Wolfgang Hönig / Andreas Ecke WS 09/10
1 Floyd-Warshall-Algorithmus
1.1 Überblick
1. DistanzmatrixD=WG(0)(i, j) 2. Fürk= 1 bis n
a) Für jedes Paar(i, j):
WG(k)(i, j) = min
WG(k−1)(i, j), WG(k−1)(i, k) +WG(k−1)(k, j)
1.2 Grundidee
Graphen können mit einer Kantenbewertung versehen werden. Zum Beispiel kann ein Stra- ßennetz als kantenbewerteter Graph dargestellt werden, in dem alle Kreuzungen Knoten sind. Die Länge des jeweiligen Straßenabschnittes wird als Bewertung an eine Kante ge- schrieben. Die Frage ist nun, wie der kürzeste Weg von einer Kreuzung (Knoten) zur anderen ist.
Der Floyd-Warshall-Algorithmus teilt dieses Problem in k Teilprobleme auf, wobei k die Anzahl der Knoten ist. Ausgangspunkt ist eine einfache Distanzmatrix D, welche die di- rekten Bewertungen der Kanten widerspiegelt. Nun wird schrittweise das Problem weiter gelöst: Welche Knoten wären (besser) erreichbar, wenn man zusätzlich als mittleren Knoten den Knoten mit der Beschriftung 1 nehmen dürfte (k= 1). Fürk= 2 dürfen die Knoten 1 und 2 als mittlere Knoten auftreten usw. NachkSchritten dürfen alle Knoten als mittlere Knoten verwendet werden und das eigentliche Ausgangsproblem ist gelöst.
1.3 Erklärung am Beispiel
Für folgenden kantenbewerteten und gerichteten Graphen sollen alle kürzesten Wege mit Hilfe des Floyd-Warshall-Algorithmus gefunden werden:
4 1
3
2 5
4 2
5 1
6 3 2
Zuerst wird die Distanzmatrix aus dem Graphen abgelesen. Hierbei stellt in der Matrix die Zeile den Ausgangsknoten und die Spalte den Zielknoten dar. Da es z.B. eine Kante mit der Bewertung 4 von Knoten 2 nach Knoten 3 gibt, wird in Zeile 2 und Spalte 3 der Wert 4 eingetragen. Damit ergibt sich:
1 3 4
5
2 2
6
Da die Knoten von sich selber aus immer erreichbar sind, wird in der Diagonale eine 0 eingetragen. Die restlichen Felder erhalten die Bewertung ∞ um darzustellen, dass es keinen Weg gibt.
1
Wolfgang Hönig / Andreas Ecke WS 09/10
D=WG(0) =
0 ∞ ∞ 1 3
∞ 0 4 ∞ ∞
∞ ∞ 0 5 ∞
∞ 2 ∞ 0 2 6 ∞ ∞ ∞ 0
Im Nächsten Schritt kann Knoten 1 als mittlere Knoten auftreten. Also kann es eine Ver- besserung nur geben, wenn der Startknoten 5 und der Zielknoten 4 oder 5 ist. Momentan ist in der Matrix kein Weg von 5 nach 4 vorhanden. Mit Knoten 1 in der Mitte ist aber ein Weg der Länge 7 möglich ((5,4,7) in der Notation (Anfangsknoten, Endknoten, Ent- fernung)). Von Knoten 5 zu Knoten 5 bringt der mittlere Knoten 1 keine Besserung, also ändert sich hier nichts.
WG(1) =
0 ∞ ∞ 1 3
∞ 0 4 ∞ ∞
∞ ∞ 0 5 ∞
∞ 2 ∞ 0 2
6 ∞ ∞ 7 0
FürWG(2) können nun Knoten 1 oder Knoten 2 (oder beide) als mittlere Knoten auftreten.
Offenbar verbessert sich dabei nur der Weg von 4 zu 3, welcher nun 2+4=6 lang ist (4,3,6).
Nun können die Knoten 1,2 und 3 als mittlere Knoten benutzt werden. Hier gibt es keine Verbessung, da der Weg von Knoten 4 zu 4 schon optimal ist.
Als mittlere Knoten fürWG(4) können die Knoten 1 bis 4 dienen. Damit verbessern sich die Wege von 1 nach 2, von 3 nach 2, von 3 nach 5, von 2 nach 5, von 5 nach 2 und 5 nach 3(
(1,2,3), (3,5,7), (3,2,7),(2,5,11),(5,2,9),(5,3,13)).
Im letzten Schritt dürfen alle Knoten als mittlere Knoten benutzt werden. Dadurch wird im Vergleich zur letzten Optimierung der Weg von 2 nach 1 (2,1,17), 3 nach 1 (3,1,13) und 4 nach 1 (4,1,8) möglich.
WG(5) =
0 3 7 1 3
17 0 4 9 11 13 7 0 5 7
8 2 6 0 2
6 9 13 7 0
1.3.1 Eigenschaften
Komplexität:O(n3) mitn . . . Anzahl Knoten
2