Pular para o conteúdo principal

Questão de Algoritmos e Estrutura de Dados — Algoritmos — UFMG 2019

Algoritmos e Estrutura de DadosAlgoritmos
Código
qq559631
Banca
UFMG
Órgão
UFMG
Ano
2019
Nível
Médio
Cargo
Técnico de Tecnologia da Informação
O famoso algoritmo de Dijkstra soluciona um problema de grafos direcionados e não direcionados com uma certa complexidade. Qual é esse problema e qual é essa complexidade?
  1. AProblema do caminho mínimo com complexidade O (m + n log n) em que m é o número de arestas e n é o número de vértices.
  2. BProblema do caminho mínimo com complexidade O (n!) em que n é o número de vértices.
  3. CProblema da mochila com complexidade O (m * n) em que m é o número de arestas e n é o número de vértices.
  4. DProblema da mochila com complexidade O (m!) em que m é o número de arestas.
Revelar gabarito e comentário

GabaritoA — Problema do caminho mínimo com complexidade O (m + n log n) em que m é o número de arestas e n é o número de vértices.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Algoritmo de Dijkstra: problema e complexidade

Gabarito: letra A. O algoritmo de Dijkstra resolve o problema do caminho mínimo (ou caminho mais curto) em grafos direcionados ou não direcionados, com arestas de peso não negativo. A complexidade típica com o uso de uma fila de prioridades (heap binário) é O((n+m)logn)O((n+m)\log n), que equivale a O(m+nlogn)O(m + n \log n) quando mnm \geq n. Essa é exatamente a descrição da alternativa A.

A banca cobra o conhecimento clássico sobre um dos algoritmos mais importantes da teoria dos grafos. Dijkstra não resolve o problema da mochila (knapsack), e sua complexidade não é fatorial nem exponencial.

1Problema resolvido
Caminho mínimo
Grafos direcionados ou não
Arestas com peso não negativo
2Complexidade (heap binário)
O((m + n) log n)
O(m + n log n) (se m ≥ n)
3Não resolve
Problema da mochila
Caixeiro viajante
Algoritmo de Dijkstra
LEVELsoulevel.com.br
Algoritmo de Dijkstra: Problema resolvido (Caminho mínimo, Grafos direcionados ou não, Arestas com peso não negativo); Complexidade (heap binário) (O((m + n) log n), O(m + n log n) (se m ≥ n)); Não resolve (Problema da mochila, Caixeiro viajante)

Alternativa A — ✅ Correta ⟵ GABARITO

O algoritmo de Dijkstra encontra o caminho de menor custo entre um vértice fonte e todos os demais vértices do grafo. A complexidade O(m+nlogn)O(m + n \log n) é obtida com implementação eficiente usando heap de Fibonacci (O(m+nlogn)O(m + n \log n)) ou heap binário (O((m+n)logn)O((m+n)\log n)). Ambas estão dentro da notação apresentada. O enunciado considera o caso em que mnm \geq n, simplificando para O(m+nlogn)O(m + n \log n).

Alternativa B — ❌ Incorreta

Afirma complexidade O(n!)O(n!), que é fatorial. Algoritmos com essa complexidade são inviáveis para instâncias grandes e não correspondem ao algoritmo de Dijkstra. O problema do caminho mínimo é polinomial (P), e Dijkstra tem complexidade quase linear no número de arestas.

Alternativa C — ❌ Incorreta

Associa o algoritmo de Dijkstra ao problema da mochila (knapsack), que é um problema de otimização combinatória NP-difícil. Dijkstra resolve caminho mínimo, não mochila. A complexidade O(mn)O(m \cdot n) também não se aplica a Dijkstra; o algoritmo de Dijkstra não tem esse custo.

Alternativa D — ❌ Incorreta

Novamente atribui a Dijkstra o problema da mochila, com complexidade O(m!)O(m!) — fatorial no número de arestas. Além de ser o problema errado, a complexidade é absurda para Dijkstra.

NÃO CAIA NESSA!

Para não confundir, lembre-se: Dijkstra = caminho mínimo em grafos com pesos não negativos. A complexidade é O((V+E)logV)O((V+E)\log V) ou O(E+VlogV)O(E + V \log V) nas formas mais comuns. Jamais associe Dijkstra a problemas como mochila, caixeiro viajante ou hamiltoniano.

Gabarito: letra A.

Link permanente: /questoes/qq559631