DFS vs BFS e Algoritmo de Prim para MST

Classificado em Computação

Escrito em em português com um tamanho de 2,82 KB

DFS vs BFS

Vantagens DFS:

  • Simples de implementar.
  • Precisa de pouca memória para armazenar.

Desvantagens DFS:

  • Pode, às vezes, falhar ao encontrar a solução.
  • Não garante que seja a melhor solução.
  • Pode demorar muito para encontrar a solução.

Vantagens BFS:

  • Garante que encontra a solução (se esta existir).
  • Dependendo do problema, pode garantir que a solução encontrada é a melhor.

Desvantagens BFS:

  • Mais complexo de implementar.
  • Precisa de muita memória para armazenar.

Grafos: Minimum Spanning Tree (MST)

É um grafo ponderado. Uma árvore abrangente (spanning tree) de um grafo conexo é um subgrafo que contém todos os vértices do grafo e é uma árvore. A árvore abrangente de custo mínimo (MST) de um grafo conexo com V vértices é uma árvore constituída por V-1 arestas, que ligam todos os vértices do grafo e que tem o menor custo total possível.

  • A árvore só existe se o grafo for conexo.
  • É uma árvore porque é um grafo acíclico.
  • É abrangente porque liga todos os vértices do grafo.
  • É de custo mínimo porque o custo total das suas arestas é o menor custo possível.

Quando é inserida mais uma aresta, ele passa a ter um ciclo e deixa de ser uma árvore. Os custos das ligações podem ser negativos. Se houver custos iguais em ligações diferentes, a MST pode não ser única.

  • Um corte num grafo: é uma partição dos vértices em dois conjuntos distintos.
  • Uma ligação ponte (crossing edge): é uma ligação que une um vértice de um conjunto a um vértice de outro.

Algoritmo de Prim

Algoritmo ganancioso sendo recomendado para grafos densos. Este algoritmo é bom quando há muitos vértices. Baseia-se na ideia de manter um corte do grafo, dividindo-o em vértices pertencentes à MST e vértices não pertencentes à MST. Numa versão melhorada, pode ser considerado uma “extensão” do algoritmo de BFS (utiliza uma fila de espera com prioridades, em vez de uma fila de espera comum).

Eficácia:

Apresentado com uma Matriz de Adjacência:

  • Com pesquisa baseada num vetor de pesos de ligações: O(V²) — eficaz para qualquer grafo denso (força bruta).
  • Com pesquisa baseada em filas de espera com prioridades (através de heaps): O(E log V).
  • Com pesquisa baseada em filas de espera com prioridades (através de uma heap Fibonacci): O(E + V log V). Não é eficaz em grafos densos, mas sim em muito densos.

Entradas relacionadas: