Ambos podem ser usados para encontrar o caminho mais curto de uma fonte única. O BFS entra O(E+V)
, enquanto o de Dijkstra entra O((V+E)*log(V))
.
Além disso, vi Dijkstra ser usado de maneira muito semelhante aos protocolos de roteamento.
Portanto, por que usar o algoritmo de Dijkstra se o BFS pode fazer a mesma coisa mais rápido?
fonte
Se você considerar sites de viagens, eles usam o algoritmo de Dijkstra por causa dos pesos (distâncias) dos nós.
Se você considerar a mesma distância entre todos os nós, então o BFS é a melhor escolha.
Por exemplo, considere os
A -> (B, C) -> (F)
pesos das arestas dados porA->B
= 10,A->C
= 20,B->F
=C->F
= 5.Aqui, se aplicarmos BFS, a resposta será ABF ou ACF, pois ambos são caminhos mais curtos (no que diz respeito ao número de arestas), mas se aplicarmos Dijstra, a resposta será ABF apenas porque considera os pesos nos caminho.
fonte
Algoritmo de Dijkstra
Fonte: https://cs.stanford.edu/people/abisee/gs.pdf
fonte
Do ponto de vista da implementação, o algoritmo de Dijkstra poderia ser implementado exatamente como um BFS trocando o
queue
por apriority queue
.Fonte
fonte