GeraProva GeraProva Provas com IA para professores do Brasil
Computação8º anoBNCC EF08CO03Difícil⏱ longo

Descreva um algoritmo que, dado um grafo dirigido representando dependências entre tarefas (entrada como lista…

Publicado por Alexandre Lombardi dos Santos, fundador do GeraProva

Habilidade BNCC EF08CO03

Utilizar algoritmos clássicos de manipulação sobre listas.

Fonte: Base Nacional Comum Curricular (MEC).

Questão

Descreva um algoritmo que, dado um grafo dirigido representando dependências entre tarefas (entrada como lista de adjacência), identifique todas as componentes fortemente conectadas. Explique as variáveis e estruturas de dados usadas e informe a complexidade temporal.

✍️ Questão dissertativa: veja abaixo a resposta esperada e a explicação.

Resposta esperada

Algoritmo (Kosaraju) — passos: 1) Variáveis/estruturas: lista de adjacência adj[], vetor boolean visited[V], pilha stack (ou lista de ordem de término), adjTrans[] para o grafo transposto, lista components para resultados. 2) Primeira passagem: para cada vértice v não visitado, execute DFS(v) em adj[], marcando visited[v]=true; ao terminar a recursão de v, empurre v na stack. 3) Construa adjTrans[] invertendo todas as arestas de adj[]. 4) Zere visited[]. 5) Segunda passagem: enquanto stack não estiver vazia, pop u; se not visited[u], execute DFS_Collect(u) em adjTrans[] para coletar todos os vértices alcançáveis — esse conjunto é uma componente fortemente conectada; marque-os em visited e adicione o componente a components. 6) Resultado: lista de componentes fortemente conectadas. Complexidade: cada DFS percorre arestas e vértices uma vez; construir o transposto é O(V+E); complexidade total O(V+E). Observações: use listas para adjacência e arrays booleanos para eficiência de tempo e espaço; mantenha uma estrutura para armazenar cada componente (vetor ou lista).

Explicação

O algoritmo de Kosaraju é eficiente para identificar componentes fortemente conectadas em um grafo dirigido, utilizando duas passagens de busca em profundidade (DFS) e a construção do grafo transposto. A complexidade O(V+E) é garantida, pois cada vértice e aresta é processado uma única vez, tornando-o adequado para grandes grafos. O uso de estruturas como pilhas e listas de adjacência otimiza tanto o tempo quanto o espaço, permitindo uma implementação prática e eficiente.

Raio-X da questão

Dificuldade Difícil
Bloom Criar
Leitura alto
Discriminação alto
Peso pedagógico alto
Autonomia do enunciado completo
Cobertura da habilidade multipla
🧪 Simulado🩺 Diagnóstico🧮 Exige cálculo🏠 Cotidiano🔗 Interdisciplinar⭐ Representativa✍️ interpretativa🧩 desafio
🎯 Conceito central

componentes fortemente conectadas

📌 Objetivo

avaliacao

🧱 Pré-requisitos

grafos dirigidos · algoritmos de busca

📚 Reveja

Revisar algoritmos de grafos e suas complexidades.

⚠️ Erro mais comum

O aluno pode confundir a definição de componentes fortemente conectadas com componentes conexas, não aplicando corretamente os conceitos de grafos dirigidos.

🌎 Tema transversal

ciencia_tecnologia

🤝 Socioemocional

pensamento_critico

🏫 Contexto

cientifico

Questões parecidas com resolução

Todas as questões de Programação - Algoritmos clássicos

🔎 Procurar outra questão

Procure no banco do GeraProva pelo tema ou por um trecho do enunciado. Cada questão já vem com resolução comentada e a análise de cada alternativa.

Professor: monte a prova com questões como esta, com gabarito e folha de respostas, em 30 segundos. Ver planos · Blog

Ocorreu um erro inesperado. Recarregar X

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.