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)