Ambos se pueden utilizar para encontrar el camino más corto desde una sola fuente. BFS entra O(E+V)
, mientras que Dijkstra corre O((V+E)*log(V))
.
Además, he visto que Dijkstra se usa mucho en protocolos de enrutamiento.
Entonces, ¿por qué usar el algoritmo de Dijkstra si BFS puede hacer lo mismo más rápido?
fuente
Si considera los sitios web de viajes, estos utilizan el algoritmo de Dijkstra debido a los pesos (distancias) en los nodos.
Si considera la misma distancia entre todos los nodos, BFS es la mejor opción.
Por ejemplo, considere los
A -> (B, C) -> (F)
pesos de los bordes dados porA->B
= 10,A->C
= 20,B->F
=C->F
= 5.Aquí, si aplicamos BFS, la respuesta será ABF o ACF, ya que ambos son caminos más cortos (con respecto al número de aristas), pero si aplicamos el de Dijstra, la respuesta será ABF solo porque considera los pesos en el conectado camino.
fuente
Algoritmo de Dijkstra
Fuente: https://cs.stanford.edu/people/abisee/gs.pdf
fuente
Desde la perspectiva de la implementación, el algoritmo de Dijkstra podría implementarse exactamente como un BFS intercambiando el
queue
con unpriority queue
.Fuente
fuente