5.2 Das All-Pairs-Shortest-Paths-Problem (APSP-Problem) Kürzeste Wege zwischen allen Knoten. Eingabe: Gerichteter Graph G =(V, E, c) mit V = {1,...,n} und E {(v, w) 1 apple v, w apple n, v 6= w}. c : E! R [{+1}: Gewichts-/Kosten-/Längenfunktion. 2 1 6 3 2 3 1 1 4 3 4 FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 18
Länge eines Weges p =(v = v 0, v 1,...,v r = w) ist X c(v s 1, v s ). 1applesappler Gesucht: für jedes Paar (v, w), 1 apple v, w apple n: Länge S(v, w) eines kürzesten Weges von v nach w. Algorithmus von Dijkstra löst das Single-Source-Shortest-Paths-Problem (SSSP-Problem) im Fall nicht negativer Kantengewichte. Hier: Algorithmus von Floyd-Warshall. Wir verlangen: Es darf keine Kreise mit negativem Gesamtgewicht geben: ( ) v = v 0, v 1,...,v r = v Kreis ) P 1applesappler c(v s 1, v s ) 0. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 19
Grund: Wenn es einen solchen Kreis von v nach v gibt, und irgendein Weg von v nach w existiert, dann gibt es Wege von v nach w mit beliebig stark negativer Länge die Frage nach einem kürzesten Weg ist sinnlos. Konsequenzen: (1) Wenn p Weg von v nach w ist, dann existiert ein Weg p 0 von v nach w, dernichtlänger ist als p und auf dem sich keine Knoten wiederholen. ((u,...,u)-segmente aus p herausschneiden, gegebenenfalls wiederholt. Hierdurch kann sich der Weg nicht verlängern.) (2) Wenn es einen Weg von v nach w gibt, dann auch einen mit minimaler Länge (einen kürzesten Weg ). Grund: Wegen (1) muss man nur Wege mit nicht mehr als n betrachten; davon gibt es nur endlich viele. Es kann aber mehrere kürzeste Wege von v nach w geben! 1Kanten FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 20
Ausgabe: Matrix S =(S(v, w)) 1applev,wapplen mit: S(v, w) =Länge eines kürzesten Weges von v nach w. (1, falls kein solcher Weg existiert.) FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 21
Ansatz Dynamische Programmierung O.B.d.A.: E = V V {(v, v) v 2 V } Nichtvorhandene Kanten (v, w) werdenmitc(v, w) =1 repräsentiert. Erster Schritt: Identifiziere geeignete Teilprobleme. Gegeben ein k, 0apple k apple n, betrachte Wege von v nach w, dieunterwegs (also vom Start- und Endpunkt abgesehen) nur Knoten in {1,...,k} besuchen. k = 0: Kein Knoten darf unterwegs besucht werden; es handelt sich nur um die Kanten (v, w) mitc(v, w) < 1, oderum Wege (v, v) derlänge 0. k = 1: Es kommen nur Wege in Frage, die aus der Kante (v, w) bestehen oder aus den Kanten (v, 1) und (1, w). usw. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 22
Ansatz Dynamische Programmierung S(v, w, k) :=Länge eines kürzesten Weges von v nach w, dernur Zwischenknoten in {1,...,k} benutzt. (Falls kein solcher Weg existiert: S(v, w, k) :=1) Beispiel: (Die nicht eingezeichneten Kanten haben Länge 1.) 2 1 3 S(2,4,0) = 6 2 4 6 1 S(2,4,1) = 5 S(2,4,2) = 5 monoton fallend 1 3 4 S(2,4,3)= 2 FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 23
Ansatz Dynamische Programmierung Bellman sche Optimalitätsgleichungen : Betrachte Weg p von v nach w; dabei seien die Zwischenknoten v 1,...,v l 1 aus {1,...,k}: v v 1 v 2 v l 1 w Angenommen, dieser Weg ist optimal. Dann gilt: 1) (O.B.d.A.) Der Knoten k kommt auf dem Weg höchstens einmal vor. Sonst: streiche im Weg u k k v das Teilstück zwischen erstem und letzten k weg: v k w Wegen ( ) ist der neue Weg ist nicht länger als p. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 24
Ansatz Dynamische Programmierung 2) Falls der Knoten k auf dem Weg nicht vorkommt, ist p für Zwischenknoten 1,...,k 1 optimal. 3) Falls der Knoten k auf p vorkommt, zerfällt p in zwei Teile v {z } Zwischenknoten apple k 1 k k w {z } Zwischenknoten apple k 1 die beide bezüglich der Zwischenknotenmenge {1,...,k 1} optimal sind (sonst könnte ein Teilweg durch einen billigeren ersetzt werden, Widerspruch zur Optimalität von p). FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 25
Ansatz Dynamische Programmierung Punkte 2) und 3) drücken aus, dass Substrukturen einer optimalen Lösung selbst wieder optimal sind. Die Bellman schen Optimalitätsgleichungen für den Algorithmus von Floyd-Warshall lauten dann: S(v, w, k) = min{s(v, w, k 1), S(v, k, k 1) + S(k, w, k 1)}, für 1 apple v, w apple n, 1 apple k apple n. Basisfälle: S(v, v, 0) = 0. S(v, w, 0) = c(v, w), für v 6= w. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 26
Ansatz Dynamische Programmierung Wir beschreiben einen iterativen Algorithmus. Zur Aufbewahrung der Zwischenergebnisse benutzen wir ein Array S[1..n,1..n,0..n], das durch S[v,w,0] := c(v, w), 1 apple v, w apple n, v 6= w; S[v,v,0] := 0, 1 apple v apple n initialisiert wird. Unser Algorithmus füllt das Array S gemäß wachsendem k aus: for k from 1 to n do for v from 1 to n do for w from 1 to n do S[v,w,k] min{s[v,w,k-1], S[v,k,k-1] + S[k,w,k-1]}. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 27
Ansatz Dynamische Programmierung Korrektheit: Folgt aus der Vorüberlegung. Es werden genau die Werte S(v, w, k) gemäß den Bellman schen Optimalitätsgleichungen ausgerechnet. Laufzeit: Drei geschachtelte Schleifen: (n 3 ). Bei dieser simplen Implementierung wird noch Platz verschwendet, da für den k- ten Schleifendurchlauf o enbar nur die (k 1)-Komponenten des Arrays S benötigt werden. Man überlegt sich leicht, dass man mit zwei Matrizen auskommt, eine alte ((k 1)-Version) und eine neue (k-version), zwischen denen dann immer passend umzuschalten ist. Der Platzaufwand beträgt damit O(n 2 ), der Zeitbedarf o ensichtlich immer noch O(n 3 ). FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 28
Ansatz Dynamische Programmierung Dieser Spezialfall des Ansatzes dynamische Programmierung lässt noch eine weitere Verbesserung zu. Es gilt S(v, k, k) =S(v, k, k 1) und ( ) S(k, w, k) =S(k, w, k 1), für 1 apple v, w, k apple n, da wiederholtes Benutzen des Knotens k den Weg von v nach k bzw. von k nach w nicht verkürzen kann (keine Kreise mit negativer Gesamtlänge). Man kann also für die Berechnung von S(v, w, k) den alten oder den neuen Wert im S-Array benutzen. Damit erübrigt es sich, altes und neues Array zu unterscheiden, und der dritte Index k kann wegfallen: for k from 1 to n do for v from 1 to n do for w from 1 to n do S[v,w] min{s[v,w], S[v,k] + S[k,w]}. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 29
Ansatz Dynamische Programmierung Man möchte nicht nur den Wert des kürzesten Weges kennenlernen, sondern auch zu gegebenen v, w diesen Weg konstruieren können. Hierfür benutzt man ein Hilfsarray I[1..n,1..n], indemfür jedes Paar v, w die Information gehalten wird, welches der bis zur Runde k gefundene größte Knoten ist, der für die Konstruktion eines kürzesten Weges von v nach w benötigt worden ist. Dies liefert den Floyd-Warshall-Algorithmus. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 30
Algorithmus von Floyd-Warshall 5.2.1 Algorithmus Floyd-Warshall(C[1..n,1..n]) Eingabe: C[1..n,1..n]: Matrix der Kantenkosten/längen Ausgabe: S[1..n,1..n]: Kosten der kürzesten Wege I[1..n,1..n]: Hilfsarray zur Konstruktion der kürzesten Wege Datenstruktur: Matrizen S[1..n,1..n], I[1..n,1..n] Ziel: ( S[v,w] enthält S(v, w) ) ( I[v,w]: möglichst kleiner max. Knoten auf kürzestem (v, w)-weg ) (1) for v from 1 to n do (2) for w from 1 to n do (3) if v = w then S[v,w] 0; I[v,w] 0 (4) else S[v,w] C[v,w]; (5) if S[v,w] < 1 then I[v,w] 0 else I[v,w] 1; (6) for k from 1 to n do (7) for v from 1 to n do (8) for w from 1 to n do (9) if S[v,k] + S[k,w] < S[v,w] then (10) S[v,w] S[v,k] + S[k,w]; I[v,w] k; (11) Ausgabe: S[1..n,1..n] und I[1..n,1..n]. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 31
Algorithmus von Floyd-Warshall Korrektheit: Es gilt folgende Schleifeninvariante: Nach dem Schleifendurchlauf k ist S[v, w] = S(v, w, k). (Beweis durch vollständige Induktion, unter Ausnutzung der Bellman-Gleichungen und von ( ).) Zudem: I[v, w] ist das kleinste ` mit der Eigenschaft, dass es unter den kürzesten Wegen von v nach w über 1,...,k einen gibt, dessen maximaler Eintrag ` ist. (Beweis durch Induktion über k.) Ein kürzester Weg von v nach w kann dann mit einer einfachen rekursiven Prozedur printpathinner rekonstruiert werden (Übung). FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 32
Algorithmus von Floyd-Warshall Satz 5.2.2 Der Algorithmus von Floyd-Warshall löst das All-Pairs-Shortest-Paths- Problem in Zeit O(n 3 )undplatzo(n 2 ). FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 33
Single-Source-Shortest-Paths Bellman-Ford 5.3 Der Bellman-Ford-Algorithmus Zweck: Kürzeste Wege von einem Startknoten aus (SSSP: single source shortest paths ). Im Unterschied zum Algorithmus von Dijkstra dürfen negative Kanten vorhanden sein. Algorithmus liefert Fehlermeldung, wenn vom Startknoten s aus ein Kreis mit negativer Gesamtlänge erreichbar ist. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 34
Single-Source-Shortest-Paths Bellman-Ford Knotenmenge: V = {1,...,n}. Menge E von gerichteten Kanten, mit Kantengewichten c : E! R. Das Format des Inputs ist recht frei: Adjazenzlisten oder auch nur eine große Liste aller Kanten. Datenstrukturen: Distanzarray d[1..n] Vorgängerarray p[1..n] Idee: d[v] enthält einen Schätzwert (eine obere Schranke) für die Länge eines kürzesten Weges. p[v] enthält einen Vorgänger von v auf einem Weg von s nach v der Länge höchstens d[v]. Durch eine Reihe von Operationen sollen Werte und Vorgänger so gesetzt werden, dass sie zu kürzesten Wegen gehören. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 35
Single-Source-Shortest-Paths Bellman-Ford Grundoperation, schon aus dem Dijkstra-Algorithmus bekannt: relax(u, v) (1) if d[u] + c(u, v) < d[v] (2) then (3) p[v] u; (4) d[v] d[u] + c(u, v) ; Idee: Durch Verwenden eines s-u-weges der Länge d[u] und (u, v) als letzter Kante kann der bisherige Wert d[v] verbessert werden. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 36
Single-Source-Shortest-Paths Bellman-Ford 5.3.1 Algorithmus Bellman-Ford(((V, E, c), s)) Eingabe: (V, E, c): Digraph mit Kantengewichten in R, Startknoten s 2 V. Ausgabe: Wenn G keine Kreise mit negativem Gewicht hat: In d, p: Baum von kürzesten Wegen; Datenstruktur: d[1..n]: real; p[1..n]: integer; Initialisierung: (1) for v from 1 to n do (2) d[v] 1; p[v] 1; (3) d[s] 0; p[s] s ; Hauptschleife: (4) for i from 1 to n 1 do (5) forall (u, v) 2 E do relax(u, v); Zyklentest: (6) forall (u, v) 2 E do (7) if d[u] + c(u, v) < d[v] then return Neg. Kreis ; Ergebnis: (8) return d[1..n], p[1..n]. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 37
Single-Source-Shortest-Paths Bellman-Ford Satz 5.3.2 Der Bellman-Ford-Algorithmus hat folgendes Verhalten: (a) Wenn es keinen von s aus erreichbaren Kreis mit negativer Gesamtlänge gibt ( negativer Kreis ), steht am Ende des Algorithmus in d[v] die Länge eines kürzesten Weges von s nach v; diekanten (p[v], v) (mitp[v] 6= 1) bilden einen Baum der kürzesten Wege von s aus zu den erreichbaren Knoten. (b) Der Algorithmus gibt Neg. Kreis aus genau dann wenn es einen von s aus erreichbaren negativen Kreis gibt. (c) Die Laufzeit ist O( V E ). FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 38
Single-Source-Shortest-Paths Bellman-Ford Beweis: (c)istklar. (a) Da es keine negativen Kreise gibt, die von s aus erreichbar sind, kann durch Herausschneiden von Kreisen aus solchen Wegen die Länge nicht steigen. Für jeden Weg von s nach v der Länge d gibt es einen, der keinen Kreis enthält und Länge apple d hat. Bei der Frage nach kürzesten Wegen von s aus müssen wir nur kreisfreie Wege berücksichtigen. Davon gibt es nur endlich viele. Also: d(s, v) = Länge eines Weges von s nach v mit minimalen Kosten ist wohldefiniert. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 39
Single-Source-Shortest-Paths Bellman-Ford Eine Runde im Algorithmus ist ein Durchlauf durch die Hauptschleife. Beh. 1: Es gilt stets d(s, v) apple d[v]. (Durch Induktion über Runden zeigt man: Wenn d[v] < 1, dannexistiert ein Weg von s nach v der Länge d[v].) Sei nun (s = v 0, v 1,...,v r = v) einwegkürzester Länge von s nach v, mit r apple n 1. Genau wie in 5.2 überlegt man sich, dass (v 0,...,v i )einkürzester Weg von s nach v i ist, für i =0,...,r. ( Optimale Substruktur ). D. h.: d(s, v i )=c(v 0, v 1 )+...+ c(v i 1, v i ), für i =0,...,r. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 40
Single-Source-Shortest-Paths Bellman-Ford Beh. 2: Nach Runde i gilt d[v i ] = d(s, v i ). Beweis durch Induktion über i. DerFalli = 0istklar. Ind.-Ann.: Nach Runde i 1 gilt d[v i 1 ] = d(s, v i 1 ). Schritt: In Runde i wird irgendwann relax(v i 1, v i ) ausgeführt. Die dabei betrachtete Summe d[v i 1 ] + c(v i 1, v i )=d(s, v i 1 )+c(v i 1, v i ) ist genau c(v 0, v 1 )+...+ c(v i 1, v i )=d(s, v i ). Wenn nicht vorher schon d[v i ] = d(s, v i )war,wirddieserwertjetzt eingesetzt, und p[v i ] = v i 1 gesetzt. (Wegen Beh. 1 kann nie kleinerer Wert in d[v i ] stehen.) (Beachte: Wenn es mehrere Wege von s nach v i mit minimaler Länge gibt, kann natürlich auch p[v i ] 6= v i 1 sein.) FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 41
Single-Source-Shortest-Paths Bellman-Ford Beweis von (b): ) : Annahme: Von s aus ist kein negativer Kreis erreichbar, aber in Zeile (7) wird ein v mit d[u] + c(u, v) < d[v] gefunden. Nach (a) folgt d(s, u)+c(u, v) < d(s, v), was o ensichtlich unmöglich ist. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 42
Single-Source-Shortest-Paths Bellman-Ford ( : Sei (s = v 0,...,v r,...,v t )mitr < t und v r = v t der Weg zu einem erreichbaren Kreis negativer Länge. Annahme: Bellman-Ford gibt nicht Neg. Kreis zurück. Dann ergibt der Test in Zeile (7) stets. Es gilt: d[v r ] + c(v r, v r+1 ) d[v r+1 ] d[v r+1 ] + c(v r+1, v r+2 ) d[v r+2 ].. d[v t 1 ] + c(v t 1, v t ) d[v t ] Addition dieser Ungleichungen und Vereinfachen liefert, unter Benutzung von v r = v t : c(v r, v r+1 )+...+ c(v t 1, v t ) 0, Widerspruch. Dass die p[v]-werte die gewünschte Bedeutung haben, zeigt man nun leicht. FG KTuEA, TU Ilmenau E ziente Algorithmen Sommersemester 2012 43