Dijkstras Algorithmus der kürzesten Wege

Werbung
Dijkstras Algorithmus der kürzesten Wege
Nicole Stender
Dijkstras Algorithmus der kürzesten Wege gehört zu der Klasse der Greedy Algorithmen
und ist nach seinem Erfinder, Edsger W. Dijkstra (1930 - 2002), benannt. Er löst das SingleSource-Shortest-Path Problem für gerichtete Graphen G=(V , E) mit nicht-negativen
Kantengewichten, wobei ein Startknoten s ∈V definiert ist. Der Algorithmus versucht
durch sukzessives Abarbeiten des Graphen kürzeste Wege von einem gegebenen Startknoten zu allen anderen Knoten des Graphen zu finden. Dabei wird in jedem Schritt ein weite rer Knoten, der noch nicht betrachtet wurde, abgearbeitet. Der Algorithmus besitzt eine
Verwandtschaft zur Breitensuche.
Abb. 1: Graphbeispiel anhand einiger Hauptstädte der USA und deren Entfernung (Luftlinie)
Wir betrachten den abgebildeten Graphen, der einige der Hauptstädte innerhalb der USA
und deren Entfernungen visualisiert. Wir wollen von dem grauen Städtchen Olympia in das
sonnigere Tallahassee in Florida reisen und möchten möglichst auf dem kürzesten Weg
dort ankommen.
Menge S={s } und distanz [v ]={länge( s , v) , wenn( s , v )∈E∨∞ , sonst }
solange S !=V wiederhole
wähle einen Knoten w∈V ∖ S mit dem kleinsten Distanzwert
füge w in S hinzu
berechne den neuen Distanzwert für jeden Nachfolger u∈V ∖ S
c=distanz [w]+länge(w ,u)
distanz [u]=(distanz [u]> c) ? c : distanz [u ]
Abb. 2: Beispiel für einen Pseudocode des Dijkstra Algorithmus (Quelle: [3])
Die folgenden Abbildung erläutern den Algorithmus von Dijkstra vom Ausgangsgraphen in
Abb. 1.
Abb. 3: Start im Knoten Olympia.
Abb. 4: Für den Knoten St. Paul ist bereits
ein kürzerer Weg vorhanden.
Abb. 5
Abb. 6
Abb. 7
Abb. 8
Abb. 9: Tallahassee ist nun vollständig
betrachtet und der Dijkstra Algorithmus
kann hier vorzeitig beendet werden.
Abb. 10: Zur Vollständigkeit wird jedoch
auch der Knoten Washington noch
betrachtet.
Der Algorithmus von Dijkstra ist hiermit vollständig für unseren Graphen durchlaufen. Der
kürzeste Weg von Olympia nach Tallahassee wurde über Sacramento und Phoenix gefunden und ist 4.603 km lang.
Zum Abschluss werfen wir einen Blick auf die Laufzeit des Algorithmus. Die Laufzeit wird
in Abhängigkeit von der Anzahl der Kanten |E| und der Knoten |V| beschrieben. In jedem
Schritt bestimmen wir zunächst den Knoten, der noch nicht besucht wurde, und den minimalen Abstand zu unserem Startknoten aufweist. Das beschert uns eine Laufzeit von O((|
V| + |E|)*log |V|). Eine effizientere Laufzeit erhalten wir unter der Verwendung eines Fibonacci-Heaps mit O(log |V|).
Quellen:
[1] Der Algorithmus von Dijkstra, http://www.infschule.de/algorithmen/graphen/wegeingraphen/station_dijkstra, (Stand: 29.11.2015)
[2] Kürzeste Wege in Graphen, http://fuzzy.cs.unimagdeburg.de/studium/graph/txt/duvigneau.pdf, (Stand: 29.11.2015)
[3] Schnitger, Georg (2012). Skript zur Vorlesung “Theoretische Informatik”, 44 ff., Online
im Internet: URL: http://www.thi.informatik.unifrankfurt.de/lehre/gl1/ws1213/gl1_ws1213_skript.pdf, (Stand: 29.11.2015)
Herunterladen