Laut dieser Seite ist der Dijkstra-Algorithmus nur BFS mit einer Prioritätswarteschlange. Ist es wirklich so einfach? Ich denke nicht.
algorithms
graphs
shortest-path
Barry Fruitman
quelle
quelle
Antworten:
Sie können den Dijkstra-Algorithmus als BFS mit einer Prioritätswarteschlange implementieren (obwohl dies nicht die einzige Implementierung ist).
Der Dijkstra-Algorithmus basiert auf der Eigenschaft, dass der kürzeste Weg von nach t auch der kürzeste Weg zu einem der Scheitelpunkte entlang des Pfades ist. Genau das macht BFS.s t
Oder in einer anderen Perspektive: Wie würde sich der Dijkstra-Algorithmus verhalten, wenn alle Gewichte 1 wären? Genau wie BFS.
quelle
Hier ist eine Idee aus dem Buch "Algorithmen (Abschnitt 4.4)" von Dasgupta et al:
Es verhält sich genauso wie BFS. Wir arbeiten dies aus zwei Hauptpunkten heraus.
Auf "Entspannung".
Für den Dijkstra-Algorithmus im Allgemeinen ist die Relaxation gewichtet
Auf "Prioritätswarteschlange".
Wenn der Dijkstra-Algorithmus zu einem beliebigen Zeitpunkt in einem ungewichteten Diagramm ausgeführt wird, enthält die Prioritätswarteschlange höchstens zwei unterschiedliche (Entfernungs-) Werte. Daher reicht eine FIFO-Warteschlange von BFS aus.
quelle