. All Pairs Shortest Path (ASPS) All Pairs Shortest Path (APSP): Eingabe: Gewichteter Graph G=(V,E) Ausgabe: Für jedes Paar von Knoten u,v V die Distanz von u nach v sowie einen kürzesten Weg a b c d e f a 0 0 9 b 0 0 9 c -3 0 d - 0 0 a b - d 8 c e 7 - f e 8 9 0 - f 0. All Pairs Shortest Path
All Pairs Shortest Path (APSP): Eingabe: Gewichteter Graph G=(V,E) Ausgabe: Für jedes Paar von Knoten u,v V die Distanz von u nach v sowie einen kürzesten Weg a b c d e f a 0 0 9 b 0 0 9 c -3 0 d - 0 0 a b - d 8 c e 7 - f e 8 9 0 - f 0. All Pairs Shortest Path
Eingabe APSP: Matrix W=(w ), die Graph repräsentiert ij w = ij All Pairs Shortest Path 0, wenn i=j Gewicht der ger. Kante (i,j), wenn i j und (i,j) E, wenn i j und (i,j) E a b c d e f a 0 b 0 b c 0 7 d - 0 e 8 0 - f 0 a - d 8 c e 7 - f. All Pairs Shortest Path 3
Eingabe APSP: Matrix W=(w ), die Graph repräsentiert ij w = ij All Pairs Shortest Path 0, wenn i=j Gewicht der ger. Kante (i,j), wenn i j und (i,j) E, wenn i j und (i,j) E a b c d e f a 0 b 0 b c 0 7 d - 0 e 8 0 - f 0 a - d 8 c e 7 - f. All Pairs Shortest Path
Eingabe APSP: Matrix W=(w ), die Graph repräsentiert ij w = ij All Pairs Shortest Path Annahme: Keine negativen Zyklen! 0, wenn i=j Gewicht der ger. Kante (i,j), wenn i j und (i,j) E, wenn i j und (i,j) E a b c d e f a 0 b 0 b c 0 7 d - 0 e 8 0 - f 0 a - d 8 c e 7 - f. All Pairs Shortest Path
Nummeriere Knoten von bis n= V Betrachte kürzeste i-j-wege, die nur über Knoten bis k laufen 3 0 3 0 3 0 7-0 0 7 8 9 0 - k=3 3-8 7-0. All Pairs Shortest Path
Nummeriere Knoten von bis n= V Betrachte kürzeste i-j-wege, die nur über Knoten bis k laufen 3 0 3 0 3 0 7-0 0 7 8 9 0 - k=3 3-8 7-0. All Pairs Shortest Path 7
Zur Erinnerung: All Pairs Shortest Path Sei G ein Graph ohne negative Zyklen und sei j von i aus erreichbar. Dann gibt es einen kürzesten i-j-weg, der keinen Knoten doppelt benutzt. Wir können also annehmen, dass jeder Knoten in jedem Weg maximal einmal vorkommt Betrachte i-j-weg, der nur über Knoten aus {,,k} läuft: k i j. All Pairs Shortest Path 8
Zur Erinnerung: All Pairs Shortest Path Sei G ein Graph ohne negative Zyklen und sei j von i aus erreichbar. Dann gibt es einen kürzesten i-j-weg, der keinen Knoten doppelt benutzt. Wir können also annehmen, dass jeder Knoten in jedem Weg maximal einmal vorkommt Betrachte i-j-weg, der nur über Knoten aus {,,k} läuft: k Knoten k tritt maximal einmal auf i j. All Pairs Shortest Path 9
Zur Erinnerung: All Pairs Shortest Path Sei G ein Graph ohne negative Zyklen und sei j von i aus erreichbar. Dann gibt es einen kürzesten i-j-weg, der keinen Knoten doppelt benutzt. Wir können also annehmen, dass jeder Knoten in jedem Weg maximal einmal vorkommt Betrachte i-j-weg, der nur über Knoten aus {,,k} läuft: Weg von u nach k führt nur über Knoten aus {,,k-} k i j. All Pairs Shortest Path 0
Zur Erinnerung: All Pairs Shortest Path Sei G ein Graph ohne negative Zyklen und sei j von i aus erreichbar. Dann gibt es einen kürzesten i-j-weg, der keinen Knoten doppelt benutzt. Wir können also annehmen, dass jeder Knoten in jedem Weg maximal einmal vorkommt Betrachte i-j-weg, der nur über Knoten aus {,,k} läuft: Weg von k nach v führt nur über Knoten aus {,,k-} k i j. All Pairs Shortest Path
Kürzester i-j-weg über Knoten aus {,,k} ist (a) kürzester i-j-weg über Knoten aus {,,k-} oder (b) kürzester i-k-weg über Knoten aus {,,k-} gefolgt von kürzestem k-j-weg über Knoten aus {,,k-} Fall (b): k i j. All Pairs Shortest Path
(k) Sei d ij die Länge eines kürzesten i-j-wegs mit Knoten aus {,,k} (k) d = ij w ij, falls k=0 (k-) (k-) (k-) min ( d, d + d ), falls k ij ik kj (n) (n) ij Matrix D =(d ) enthält die gesuchte Lösung. All Pairs Shortest Path 3
Floyd-Warshall(W,n) (0). D W. for k to n do 3. for i to n do. for j to n do. d min(d ij, d ik + d kj ). return D ij (n) (k) (k-) (k-) (k-). All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 7-3 0 8 0 - D (0) 0 D () 3 3. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 7-3 0 8 0 - D (0) 0 D () 3 0 3. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 7-3 0 8 0 - D (0) 0 D () 3 0 0 3. All Pairs Shortest Path 7
3 7-3 8-3 0 0 3 0 7-3 0 8 0 - D (0) 0 D () 3 0 0 3 0 7. All Pairs Shortest Path 8
3 7-3 8-3 0 0 3 0 7-3 0 8 0 - D (0) 0 D () 3 0 0 3 0 7-3 - 0. All Pairs Shortest Path 9
3 7-3 8-3 0 0 3 0 7-3 0 8 0 - D (0) 0 D () 3 0 0 3 0 7-3 - 0 8 0 -. All Pairs Shortest Path 0
3 7-3 8-3 0 0 3 0 7-3 0 8 0 - D (0) 0 D () 3 0 0 3 0 7-3 - 0 8 0-0. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 7-3 - 0 8 0 - D () 0 D () 3 0 3. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 7-3 - 0 8 0 - D () 0 D () 3 0 0 3. All Pairs Shortest Path 3
3 7-3 8-3 0 0 3 0 7-3 - 0 8 0 - D () 0 D () 3 0 0 3. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 7-3 - 0 8 0 - D () 0 D () 3 0 0 3 0 7. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 7-3 - 0 8 0 - D () 0 D () 3 0 0 3 0 7-3 - 3 0. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 7-3 - 0 8 0 - D () 0 D () 3 0 0 3 0 7-3 - 3 0 8 0 -. All Pairs Shortest Path 7
3 7-3 8-3 0 0 3 0 7-3 - 0 8 0 - D () 0 D () 3 0 0 3 0 7-3 - 3 0 8 0-0. All Pairs Shortest Path 8
3 7-3 8-3 0 0 3 0 7-3 - 3 0 8 0 - D () 0 D (3) 3 0 3 3. All Pairs Shortest Path 9
3 7-3 8-3 0 0 3 0 7-3 - 3 0 8 0 - D () 0 D (3) 3 0 3 0 3. All Pairs Shortest Path 30
3 7-3 8-3 0 0 3 0 7-3 - 3 0 8 0 - D () 0 D (3) 3 0 3 0 3 0 7. All Pairs Shortest Path 3
3 7-3 8-3 0 0 3 0 7-3 - 3 0 8 0 - D () 0 D (3) 3 0 3 0 3 0 7-3 - 3 0 0. All Pairs Shortest Path 3
3 7-3 8-3 0 0 3 0 7-3 - 3 0 8 0 - D () 0 D (3) 3 0 3 0 3 0 7-3 - 3 0 0 8 9 0 -. All Pairs Shortest Path 33
3 7-3 8-3 0 0 3 0 7-3 - 3 0 8 0 - D () 0 D (3) 3 0 3 0 3 0 7-3 - 3 0 0 8 9 0-0. All Pairs Shortest Path 3
3 7-3 8-3 0 3 0 3 0 7-3 - 3 0 0 8 9 0 - D (3) 0 D () 3 0 0 3 3. All Pairs Shortest Path 3
3 7-3 8-3 0 3 0 3 0 7-3 - 3 0 0 8 9 0 - D (3) 0 D () 3 0 0 3 0 0 3. All Pairs Shortest Path 3
3 7-3 8-3 0 3 0 3 0 7-3 - 3 0 0 8 9 0 - D (3) 0 D () 3 0 0 3 0 0 3-0 0 7. All Pairs Shortest Path 37
3 7-3 8-3 0 3 0 3 0 7-3 - 3 0 0 8 9 0 - D (3) 0 D () 3 0 0 3 0 0 3-0 0 7-3 - 3 0 0. All Pairs Shortest Path 38
3 7-3 8-3 0 3 0 3 0 7-3 - 3 0 0 8 9 0 - D (3) 0 D () 3 0 0 3 0 0 3-0 0 7-3 - 3 0 0 8 8 9 0 -. All Pairs Shortest Path 39
3 7-3 8-3 0 3 0 3 0 7-3 - 3 0 0 8 9 0 - D (3) 0 D () 3 0 0 3 0 0 3-0 0 7-3 - 3 0 0 8 8 9 0-0. All Pairs Shortest Path 0
3 7-3 8-3 0 0 3 0 0 3-0 0 7-3 - 3 0 0 8 8 9 0 - D () 0 D () 3 0 0 9 3. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 0 3-0 0 7-3 - 3 0 0 8 8 9 0 - D () 0 D () 3 0 0 9 0 0 9 3. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 0 3-0 0 7-3 - 3 0 0 8 8 9 0 - D () 0 D () 3 0 0 9 0 0 9 3-0 0. All Pairs Shortest Path 3
3 7-3 8-3 0 0 3 0 0 3-0 0 7-3 - 3 0 0 8 8 9 0 - D () 0 D () 3 0 0 9 0 0 9 3-0 0-3 - 3 0. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 0 3-0 0 7-3 - 3 0 0 8 8 9 0 - D () 0 D () 3 0 0 9 0 0 9 3-0 0-3 - 3 0 8 8 9 0 -. All Pairs Shortest Path
3 7-3 8-3 0 0 3 0 0 3-0 0 7-3 - 3 0 0 8 8 9 0 - D () 0 D () 3 0 0 9 0 0 9 3-0 0-3 - 3 0 8 8 9 0-0. All Pairs Shortest Path
3 7-3 8-3 0 0 9 0 0 9 3-0 0-3 - 3 0 8 8 9 0 - D () 0 D () 3 0 0 9 0 0 9 3-0 0-3 - 3 0 8 8 9 0-0. All Pairs Shortest Path 7
3 7-3 8-3 0 0 9 0 0 9 3-0 0-3 - 3 0 8 8 9 0 - D () 0 D () 3 0 0 9 0 0 9 3-0 0-3 - 3 0 8 8 9 0-0. All Pairs Shortest Path 8
Satz.: Sei G=(V,E) ein Graph mit nicht-negativen Zyklen. Dann berechnet der Algorithmus von Floyd-Warshall die Entfernung zwischen jedem Knotenpaar in O( V ³) Zeit.. All Pairs Shortest Path 9
Aufrechterhalten der kürzesten Wege: Konstruiere Vorgängermatrix Π Dazu konstruiere Sequenz Π,, Π mit Π = Π (k) Π ist Vorgängermatrix zu D (k) π ij ist Vorgänger von Knoten j auf dem kürzesten Weg von Knoten i über Knoten aus {,,k} Die Startmatrix: () (n) (n) (k) (0) π ij = nil, falls i=j oder w ij = i, falls i j und w < ij. All Pairs Shortest Path 0
Aufrechterhalten der kürzesten Wege: Konstruiere Vorgängermatrix Π Dazu konstruiere Sequenz Π,, Π mit Π = Π (k) Π ist Vorgängermatrix zu D (k) π ij ist Vorgänger von Knoten j auf dem kürzesten Weg von Knoten i über Knoten aus {,,k} Das Aktualisieren: (k) π ij = π π (k-) ij (k-) kj (k-) () (n) (n) (k), falls d d + d ij, falls d > d + d ij (k-) (k-) ik (k-) ik (k-) kj (k-) kj. All Pairs Shortest Path
Teile & Herrsche: Divide & Conquer Problem in Teilprobleme aufteilen Teilprobleme rekursiv lösen Lösung aus Teillösungen zusammensetzen Probleme: Wie setzt man zusammen? [erfordert algorithmisches Geschick und Übung] Laufzeitanalyse (Auflösen der Rekursion) [ist normalerweise nach Standardschema; erfordert ebenfalls Übung] 7. Divide & Conquer
Divide & Conquer Teile & Herrsche: Problem in Teilprobleme aufteilen Teilprobleme rekursiv lösen Lösung aus Teillösungen zusammensetzen Algorithmen: Merge Sort Quick Sort 7. Divide & Conquer 3
Matrix Multiplikation 3 7 0 0 3 0 0 3 0 0 3 0 0 0 3 = 7. Divide & Conquer
Matrix Multiplikation 3 7 0 0 3 0 0 3 0 0 3 0 0 0 3 = Zeile Spalte: 3 + 7 0 + 3 + = 9 7. Divide & Conquer
Matrix Multiplikation 3 7 0 9 0 3 0 0 3 0 0 3 0 0 0 3 = Zeile Spalte: 3 + 7 0 + 3 + = 9 7. Divide & Conquer
Matrix Multiplikation 3 7 0 9 0 0 3 0 0 3 0 0 3 0 0 0 3 = Zeile Spalte: 3 + 7 0 + + 3 = 0 7. Divide & Conquer 7
Matrix Multiplikation 3 7 0 9 0 3 0 3 0 0 3 0 0 3 0 0 0 3 = 7. Divide & Conquer 8
Matrix Multiplikation 3 7 0 9 0 3 9 0 3 0 0 3 0 0 3 0 0 0 3 = 7. Divide & Conquer 9
Matrix Multiplikation 3 7 0 9 0 3 9 0 3 0 0 3 0 0 3 0 0 0 3 = 7. Divide & Conquer 0
Matrix Multiplikation 3 7 0 9 0 3 9 0 3 0 0 3 0 0 3 0 0 0 3 = 7. Divide & Conquer
Matrix Multiplikation 3 7 0 9 0 3 9 0 3 0 0 3 0 0 3 0 0 0 3 = 7. Divide & Conquer
Matrix Multiplikation Problem: Berechne das Produkt zweier n n Matrizen Eingabe: Matrizen X,Y Ausgabe: Matrix Z = X Y X x, x, x,3 x, x, x, x,3 x, = x3, x3, x3,3 x3, x, x, x,3 x,, Y y y = y y,, 3, y y y y,, 3, y y y y,3,3 3,3 y y y y,, 3,,,,3, 7. Divide & Conquer 3
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n). new array Z[,..,n][,..,n]. for i to n do 3. for j to n do. Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n). new array Z[,..,n][,..,n]. for i to n do 3. for j to n do. Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n). new array Z[,..,n][,..,n]. for i to n do 3. for j to n do. Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n). new array Z[,..,n][,..,n]. for i to n do 3. for j to n do. Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer 7
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n). new array Z[,..,n][,..,n]. for i to n do 3. for j to n do. Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer 8
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n). new array Z[,..,n][,..,n]. for i to n do 3. for j to n do. Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer 9
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n). new array Z[,..,n][,..,n]. for i to n do 3. for j to n do. Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer 70
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n). new array Z[,..,n][,..,n]. for i to n do 3. for j to n do. Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer 7
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n) Laufzeit:. new array Z[,..,n][,..,n] Θ(n²). for i to n do 3. for j to n do. Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer 7
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n) Laufzeit:. new array Z[,..,n][,..,n] Θ(n²). for i to n do Θ(n) 3. for j to n do. Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer 73
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n) Laufzeit:. new array Z[,..,n][,..,n] Θ(n²). for i to n do Θ(n) 3. for j to n do Θ(n²). Z[i][j] 0. for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer 7
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n) Laufzeit:. new array Z[,..,n][,..,n] Θ(n²). for i to n do Θ(n) 3. for j to n do Θ(n²). Z[i][j] 0 Θ(n²). for k to n do. Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer 7
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n) Laufzeit:. new array Z[,..,n][,..,n] Θ(n²). for i to n do Θ(n) 3. for j to n do Θ(n²). Z[i][j] 0 Θ(n²). for k to n do Θ(n³). Z[i][j] Z[i][j] + X[i][k] Y[k][j] 7. return Z 7. Divide & Conquer 7
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n) Laufzeit:. new array Z[,..,n][,..,n] Θ(n²). for i to n do Θ(n) 3. for j to n do Θ(n²). Z[i][j] 0 Θ(n²). for k to n do Θ(n³). Z[i][j] Z[i][j] + X[i][k] Y[k][j] Θ(n 3 ) 7. return Z 7. Divide & Conquer 77
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n) Laufzeit:. new array Z[,..,n][,..,n] Θ(n²). for i to n do Θ(n) 3. for j to n do Θ(n²). Z[i][j] 0 Θ(n²). for k to n do Θ(n³). Z[i][j] Z[i][j] + X[i][k] Y[k][j] Θ(n 3 ) 7. return Z Θ() 7. Divide & Conquer 78
Matrix Multiplikation MatrixMultiplikation(Array X, Y, n) Laufzeit:. new array Z[,..,n][,..,n] Θ(n²). for i to n do Θ(n) 3. for j to n do Θ(n²). Z[i][j] 0 Θ(n²). for k to n do Θ(n³). Z[i][j] Z[i][j] + X[i][k] Y[k][j] Θ(n 3 ) 7. return Z Θ() Θ(n³) 7. Divide & Conquer 79
Teile und Herrsche: Matrix Multiplikation A C B E D G F H = AE + BG AF + CE+ DG CF+ BH DH Aufwand: 8 Multiplikationen von n/ n/ Matrizen Additionen von n/ n/ Matrizen 7. Divide & Conquer 80
Teile und Herrsche: Matrix Multiplikation A C B E D G F H = AE + BG AF + CE+ DG CF+ BH DH Aufwand: 8 Multiplikationen von n/ n/ Matrizen Additionen von n/ n/ Matrizen Laufzeit: T(n) = 8 T(n/) + Θ(n²) 7. Divide & Conquer 8
Laufzeit: T(n) = 8 T(n/) + k n² a b f(n) Master Theorem: f(n) = k n² Matrix Multiplikation 7. Divide & Conquer 8
Laufzeit: T(n) = 8 T(n/) + k n² a b f(n) Master Theorem: f(n) = k n² Matrix Multiplikation log a Fall : Laufzeit Θ(n b ) = Θ(n³) 7. Divide & Conquer 83
Laufzeit: T(n) = 8 T(n/) + k n² a b f(n) Master Theorem: f(n) = k n² Matrix Multiplikation log a Fall : Laufzeit Θ(n b ) = Θ(n³) Formaler Beweis durch Induktion!! 7. Divide & Conquer 8
Laufzeit: T(n) = 8 T(n/) + k n² a b f(n) Master Theorem: f(n) = k n² Matrix Multiplikation log a Fall : Laufzeit Θ(n b ) = Θ(n³) Formaler Beweis durch Induktion!! Nicht besser als einfacher Algorithmus 7. Divide & Conquer 8