Beide können verwendet werden, um den kürzesten Weg aus einer Hand zu finden. BFS läuft ein O(E+V)
, während Dijkstra einläuft O((V+E)*log(V))
.
Außerdem habe ich gesehen, dass Dijkstra ähnlich wie in Routing-Protokollen verwendet wird.
Warum also den Dijkstra-Algorithmus verwenden, wenn BFS dasselbe schneller kann?
quelle
Wenn Sie Reisewebsites in Betracht ziehen, verwenden diese den Dijkstra-Algorithmus aufgrund von Gewichten (Entfernungen) auf Knoten.
Wenn Sie den gleichen Abstand zwischen allen Knoten berücksichtigen, ist BFS die bessere Wahl.
Betrachten Sie zum Beispiel
A -> (B, C) -> (F)
mit Kantengewichten gegeben durchA->B
= 10,A->C
= 20,B->F
=C->F
= 5.Wenn wir hier BFS anwenden, lautet die Antwort ABF oder ACF, da beide kürzeste Wege sind (in Bezug auf die Anzahl der Kanten). Wenn wir jedoch Dijstra anwenden, lautet die Antwort nur ABF, da die Gewichte auf der Verbindung berücksichtigt werden Pfad.
quelle
Dijkstras Algorithmus
Quelle: https://cs.stanford.edu/people/abisee/gs.pdf
quelle
Aus Sicht der Implementierung könnte der Dijkstra-Algorithmus genau wie ein BFS implementiert werden, indem der
queue
mit einem ausgetauscht wirdpriority queue
.Quelle
quelle