Der Dijkstra-Algorithmus Von einem gegebenen Startknoten aus: die kürzesten Wege zu allen anderen Knoten
B A B C D E F 4 1 C D 2 3 A 4 5 2 1 F E
A B C D E F B C D A F E Vorarbeit 1: setze jeden Knoten als unbesucht 4 1 C D 2 3 A 4 5 2 1 F E Vorarbeit 1: setze jeden Knoten als unbesucht setze jede Distanz auf unendlich setze jeden Vorgänger auf null
∞ ∞ ∞ ∞ ∞ ∞ A ∞ B C D E F B C D A F E Vorarbeit 1: 4 1 C D ∞ 2 ∞ 3 ∞ A 4 5 2 ∞ 1 ∞ F E Vorarbeit 1: setze jeden Knoten als unbesucht setze jede Distanz auf unendlich setze jeden Vorgänger auf null
∞ ∞ ∞ ∞ ∞ ∞ A ∞ B C D E F B C D A F E Vorarbeit 2: 4 1 C D ∞ 2 ∞ 3 ∞ A 4 5 2 ∞ 1 ∞ F E Vorarbeit 2: setze die Distanz des Startknotens auf 0 setze seinen Vorgänger auf sich selber (hilfreich, aber nicht nötig)
∞ ∞ ∞ ∞ ∞ A B ∞ C D E F B C D A F E Vorarbeit 2: B ∞ C D E F ∞ 4 1 C D 2 ∞ 3 ∞ A 4 5 2 ∞ 1 ∞ F E Vorarbeit 2: setze die Distanz des Startknotens auf 0 setze seinen Vorgänger auf sich selber (hilfreich, aber nicht nötig)
B A B ∞ C D E F ∞ 4 1 C D 2 ∞ 3 ∞ A 4 5 2 ∞ 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B ∞ C D E F ∞ 4 1 C D 2 ∞ 3 ∞ A 4 5 2 ∞ 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B ∞ C D E F ∞ 4 1 C D 2 ∞ 3 ∞ A 4 5 2 ∞ 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B 4 A B ∞ C D E F ∞ 4 1 2 C D 2 ∞ 3 ∞ A 4 5 2 ∞ 1 ∞ 4 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 4 C 2 D ∞ E F 4 4 1 C D 2 2 3 ∞ A 4 5 2 4 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 4 C 2 D ∞ E F 4 4 1 C D 2 2 3 ∞ A 4 5 2 4 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 4 C 2 D ∞ E F 4 4 1 C D 2 2 3 ∞ A 4 5 2 4 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B 3 A B 4 C 2 D ∞ E F 4 4 1 5 C D 2 2 3 ∞ A 4 5 2 7 4 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F ∞ 3 4 1 C D 2 2 3 5 A 4 5 2 7 4 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F ∞ 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F ∞ 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F ∞ 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F ∞ 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F ∞ 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 ∞ F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F ∞ 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 ∞ 5 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 5 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 5 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F 3 bei Gleichstand: beliebig 4 1 C D 2 2 3 5 A 4 5 2 4 1 5 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 5 7 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 5 7 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 5 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 5 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 5 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 5 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
B A B 3 C 2 D 5 E 4 F 3 4 1 C D 2 2 3 5 A 4 5 2 4 1 5 F E Wiederhole, bis alle Knoten besucht sind: setze den unbesuchten Knoten mit der geringsten Distanz als aktuell und besucht für alle unbesuchten Nachbarn: addiere eigene Distanz und das Kantengewicht wenn Summe geringer ist als deren aktuelle Distanz, dann setze sie und setze dich als seinen Vorgänger
Der Dijkstra-Algorithmus Von einem gegebenen Startknoten aus die kürzesten Wege zu allen anderen Knoten (Single Source Shortest Path SSSP) Angewendet auf alle Knoten im Graphen: liefert alle kürzesten Wege.