Laut dieser Seite ist der Dijkstra-Algorithmus nur BFS mit einer Prioritätswarteschlange. Ist es wirklich so einfach? Ich denke nicht.
Laut dieser Seite ist der Dijkstra-Algorithmus nur BFS mit einer Prioritätswarteschlange. Ist es wirklich so einfach? Ich denke nicht.
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.
Oder in einer anderen Perspektive: Wie würde sich der Dijkstra-Algorithmus verhalten, wenn alle Gewichte 1 wären? Genau wie BFS.
Hier ist eine Idee aus dem Buch "Algorithmen (Abschnitt 4.4)" von Dasgupta et al:
Drittens, wie verhält sich der Dijkstra-Algorithmus in ungewichteten Diagrammen?
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
for all edges (u,v) in E:
if dist(v) > dist(u) + w(u,v)
dist(v) = dist(u) + w(u,v)
for all edges (u,v) in E:
if dist(v) = \infty
dist(v) = dist(u) + 1
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.