Kürzeste Wege und Stacks CoMa-Übung IX TU Berlin 19.12.2012 CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 1 / 21 Themen der Übung Themen heute Nachtrag: SimpleStack.toString() Nachtrag: Beweis aus der Vorlesung Algorithmus von Floyd-Warshall Kürzeste Wege aus der Tree-Matrix berechnen Adjazenzlisten und -matrizen Tiefensuche CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 2 / 21 Nachträge SimpleStack.toString() 1 2 3 4 5 6 7 8 9 10 11 /∗ ∗ ∗ Returns a s t r i n g r e p r e s e n t a t i o n of t h i s stack , top element f i r s t . ∗ @return a String r e p r e s e n t i n g t h i s stack . ∗/ public String toString () { S t r i n g s t r = ”” ; f o r ( L i s t N o d e <T> c u r r = t o p ; c u r r != n u l l ; c u r r = c u r r . getNext () ) { s t r = s t r + c u r r . getData ( ) . t o S t r i n g ( ) ; } return s t r ; } CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 3 / 21 Nachträge SimpleStack.toString() 1 2 3 4 5 6 7 8 9 10 11 /∗ ∗ ∗ Returns a s t r i n g r e p r e s e n t a t i o n of t h i s stack , top element f i r s t . ∗ @return a String r e p r e s e n t i n g t h i s stack . ∗/ public String toString () { S t r i n g s t r = ”” ; f o r ( L i s t N o d e <T> c u r r = t o p ; c u r r != n u l l ; c u r r = c u r r . getNext () ) { s t r = s t r + c u r r . getData ( ) . t o S t r i n g ( ) ; } return s t r ; } Beweis Stackbedingung eKreide CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 3 / 21 Floyd-Warshall-Algorithmus Geschichte 1962 unabhängig von Floyd und Warshall publiziert. Robert W. Floyd. Algorithm 97 (SHORTEST PATH). Communications of the ACM, 5(6): 345, 1962. Stephen Warshall. A Theorem on Boolean Matrices. Journal of the ACM, 9(1): 11-12, 1962. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 4 / 21 Floyd-Warshall-Algorithmus Geschichte 1962 unabhängig von Floyd und Warshall publiziert. Robert W. Floyd. → Diese Version machen wir hier. Algorithm 97 (SHORTEST PATH). Communications of the ACM, 5(6): 345, 1962. Stephen Warshall. A Theorem on Boolean Matrices. Journal of the ACM, 9(1): 11-12, 1962. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 4 / 21 Floyd-Warshall-Algorithmus Geschichte 1962 unabhängig von Floyd und Warshall publiziert. Robert W. Floyd. → Diese Version machen wir hier. Algorithm 97 (SHORTEST PATH). Communications of the ACM, 5(6): 345, 1962. Stephen Warshall. A Theorem on Boolean Matrices. Journal of the ACM, 9(1): 11-12, 1962. Idee Bellman-Ford: Berechne kürzeste Wege mit maximal 1, 2, 3, . . . Kanten. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 4 / 21 Floyd-Warshall-Algorithmus Geschichte 1962 unabhängig von Floyd und Warshall publiziert. Robert W. Floyd. → Diese Version machen wir hier. Algorithm 97 (SHORTEST PATH). Communications of the ACM, 5(6): 345, 1962. Stephen Warshall. A Theorem on Boolean Matrices. Journal of the ACM, 9(1): 11-12, 1962. Idee Bellman-Ford: Berechne kürzeste Wege mit maximal 1, 2, 3, . . . Kanten. Floyd-Warshall: Berechne kürzeste Wege die nur Zwischenstopps in ∅, {v1 }, {v1 , v2 }, . . . machen. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 4 / 21 Floyd-Warshall-Algorithmus (2) Formalisierung der Idee dist(v , w , X ) := Länge eines kürzesten v -w -Weges, der nur Knoten aus {v , w } ∪ X besucht CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 5 / 21 Floyd-Warshall-Algorithmus (2) Formalisierung der Idee dist(v , w , X ) := Länge eines kürzesten v -w -Weges, der nur Knoten aus {v , w } ∪ X besucht Beobachtungen Wir sind an den dist(v , w , V ), v , w ∈ V interessiert. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 5 / 21 Floyd-Warshall-Algorithmus (2) Formalisierung der Idee dist(v , w , X ) := Länge eines kürzesten v -w -Weges, der nur Knoten aus {v , w } ∪ X besucht Beobachtungen Wir sind an den dist(v , w , V ), v , w ∈ V interessiert. dist(v , w , ∅) ist leicht zu berechnen: I dist(v , w , ∅) := avw (für eine Entfernungsmatrix A = (a)ij ). CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 5 / 21 Floyd-Warshall-Algorithmus (2) Formalisierung der Idee dist(v , w , X ) := Länge eines kürzesten v -w -Weges, der nur Knoten aus {v , w } ∪ X besucht Beobachtungen Wir sind an den dist(v , w , V ), v , w ∈ V interessiert. dist(v , w , ∅) ist leicht zu berechnen: I dist(v , w , ∅) := avw (für eine Entfernungsmatrix A = (a)ij ). dist(v , w , {x}) auch: I I dist(v , w , {x}) = min{dist(v , w , ∅), dist(v , x, ∅) + dist(x, w , ∅)}. Entweder der direkte Weg oder der Umweg über den einzig erlaubten Zwischenstopp x ist besser. x v CoMa-Übung IX (TU Berlin) w Kürzeste Wege und Stacks 19.12.2012 5 / 21 Floyd-Warshall-Algorithmus (3) Berechnen der dist(v , w , X ) Initialisierung: dist(v , w , ∅) := avw . CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 6 / 21 Floyd-Warshall-Algorithmus (3) Berechnen der dist(v , w , X ) Initialisierung: dist(v , w , ∅) := avw . Zurückführung auf leichtere Fälle: dist(v , w , {x1 , . . . , xk }) = min{ I I dist(v , w , {x1 , . . . , xk−1 }), dist(v , xk , {x1 , . . . , xk−1 }) + dist(xk , w , {x1 , . . . , xk−1 }) }. xk {x1 , . . . , xk−1 } v CoMa-Übung IX (TU Berlin) {x1 , . . . , xk−1 } {x1 , . . . , xk−1 } Kürzeste Wege und Stacks w 19.12.2012 6 / 21 Floyd-Warshall-Algorithmus (3) Berechnen der dist(v , w , X ) Initialisierung: dist(v , w , ∅) := avw . Zurückführung auf leichtere Fälle: dist(v , w , {x1 , . . . , xk }) = min{ I I dist(v , w , {x1 , . . . , xk−1 }), dist(v , xk , {x1 , . . . , xk−1 }) + dist(xk , w , {x1 , . . . , xk−1 }) }. xk {x1 , . . . , xk−1 } v {x1 , . . . , xk−1 } {x1 , . . . , xk−1 } w Entweder ist xk ein hilfreicher Zwischenstopp für einen kürzesten v -w -Weg oder nicht. Rückführung auf den Fall mit einem Zwischenstopp weniger. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 6 / 21 Floyd-Warshall-Algorithmus (4) Code Für v = 0, . . . , n − 1: I Für w = 0, . . . , n − 1 : dist(v , w , ∅) := avw . Für i = 1, . . . , n − 1: I Für v = 0, . . . , n − 1: F F F F Für w = 0, . . . , n − 1: dist(v , w , {0, . . . , i}) := min{ dist(v , w , {0, . . . , i − 1}), dist(v , i, {0, . . . , i − 1}) + dist(i, w , {0, . . . , i − 1}) }. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 7 / 21 Floyd-Warshall-Algorithmus (4) Code Für v = 0, . . . , n − 1: I Für w = 0, . . . , n − 1 : dist(v , w , ∅) := avw . Für i = 1, . . . , n − 1: I Für v = 0, . . . , n − 1: F F F F Für w = 0, . . . , n − 1: dist(v , w , {0, . . . , i}) := min{ dist(v , w , {0, . . . , i − 1}), dist(v , i, {0, . . . , i − 1}) + dist(i, w , {0, . . . , i − 1}) }. Aufwand 3 verschaltete Schleifen von 0 bis n − 1. Größenordnung von n3 Operationen nötig. Schneller als die Bellman-Ford-Varianten aus der VL (n3 log n bzw. n4 ) – es gibt aber auch schnellere Bellman-Ford-Varianten. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 7 / 21 Tree-Matrizen Idee: Bellman-Ford und Floyd-Warshall bilden wiederholt Minima. Speichere, wie die Minima gebildet wurden (→ Tree-Matrix). Bellman-Ford: I tree[i][j] – speichert Vorgängerknoten von j auf dem i-j-Weg. Für jeden Startknoten v lässt sich aus tree[v] ein kürzester Wege-Baum berechnen. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 8 / 21 Tree-Matrizen Idee: Bellman-Ford und Floyd-Warshall bilden wiederholt Minima. Speichere, wie die Minima gebildet wurden (→ Tree-Matrix). Bellman-Ford: I tree[i][j] – speichert Vorgängerknoten von j auf dem i-j-Weg. Initialisierung: tree[i][j] = i falls (i, j) ∈ E , tree[i][j] = -1 sonst. Für jeden Startknoten v lässt sich aus tree[v] ein kürzester Wege-Baum berechnen. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 8 / 21 Tree-Matrizen Idee: Bellman-Ford und Floyd-Warshall bilden wiederholt Minima. Speichere, wie die Minima gebildet wurden (→ Tree-Matrix). Bellman-Ford: I tree[i][j] – speichert Vorgängerknoten von j auf dem i-j-Weg. Initialisierung: tree[i][j] = i falls (i, j) ∈ E , tree[i][j] = -1 sonst. Updates in der innersten Schleife des Bellman-Ford-Algorithmus: 1 2 3 4 5 6 f o r ( i n t k = 0 ; k < n ; k++) { i f (u [ i ] [ j ] > u [ i ] [ k ] + a [ k ] [ j ]) { u[ i ][ j ] = u[ i ][ k] + a[k ][ j ]; tree [ i ][ j ] = k ; } } Für jeden Startknoten v lässt sich aus tree[v] ein kürzester Wege-Baum berechnen. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 8 / 21 Tree-Matrizen (2) Beispiel: 2 1 4 2 1 1 -1 1 -3 2 -3 3 CoMa-Übung IX (TU Berlin) 6 1 5 Kürzeste Wege und Stacks 19.12.2012 9 / 21 Tree-Matrizen (2) Beispiel: 2 1 4 2 1 1 -1 1 -3 2 6 -3 3 1 5 Der kürzeste Wege Baum für den Startknoten 1. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 9 / 21 Tree-Matrizen (2) Beispiel: 1 2 1 5 4 2 1 -1 1 -1 1 -3 2 6 5 -3 3 2 1 5 3 Der kürzeste Wege Baum für den Startknoten 1. Die Einträge von tree[1]. CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 9 / 21 Tree-Matrizen (2) Beispiel: 1 2 1 5 4 2 1 -1 1 -1 1 -3 2 6 5 -3 3 2 1 5 3 Der kürzeste Wege Baum für den Startknoten 1. Die Einträge von tree[1]. Ein kürzester 1-6-Weg lässt sich dann aus schrittweise aus der Matrix ablesen: CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 9 / 21 Tree-Matrizen (2) Beispiel: 1 2 1 5 4 2 1 -1 1 -1 1 -3 2 6 5 -3 3 2 1 5 3 Der kürzeste Wege Baum für den Startknoten 1. Die Einträge von tree[1]. Ein kürzester 1-6-Weg lässt sich dann aus schrittweise aus der Matrix ablesen: 6 CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 9 / 21 Tree-Matrizen (2) Beispiel: 1 2 1 5 4 2 1 -1 1 -1 1 -3 2 6 5 -3 3 2 1 5 3 Der kürzeste Wege Baum für den Startknoten 1. Die Einträge von tree[1]. Ein kürzester 1-6-Weg lässt sich dann aus schrittweise aus der Matrix ablesen: 5 → 6 CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 9 / 21 Tree-Matrizen (2) Beispiel: 1 2 1 5 4 2 1 -1 1 -1 1 -3 2 6 5 -3 3 2 1 5 3 Der kürzeste Wege Baum für den Startknoten 1. Die Einträge von tree[1]. Ein kürzester 1-6-Weg lässt sich dann aus schrittweise aus der Matrix ablesen: 3 → 5 → 6 CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 9 / 21 Tree-Matrizen (2) Beispiel: 1 2 1 5 4 2 1 -1 1 -1 1 -3 2 6 5 -3 3 2 1 5 3 Der kürzeste Wege Baum für den Startknoten 1. Die Einträge von tree[1]. Ein kürzester 1-6-Weg lässt sich dann aus schrittweise aus der Matrix ablesen: 2 → 3 → 5 → 6 CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 9 / 21 Tree-Matrizen (2) Beispiel: 1 2 1 5 4 2 1 -1 1 -1 1 -3 2 6 5 -3 3 2 1 5 3 Der kürzeste Wege Baum für den Startknoten 1. Die Einträge von tree[1]. Ein kürzester 1-6-Weg lässt sich dann aus schrittweise aus der Matrix ablesen: 1 → 2 → 3 → 5 → 6 CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 9 / 21 Datenstrukturen für Graphen Graphen sind ein wichtiges Modellierungswerkzeug Müssen irgendwie gespeichert werden Bisher: Adjazenzmatrizen Jetzt: Adjazenzlisten CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 10 / 21 Datenstrukturen für Graphen Graphen sind ein wichtiges Modellierungswerkzeug Müssen irgendwie gespeichert werden Bisher: Adjazenzmatrizen Jetzt: Adjazenzlisten Adjazenzmatrizen: Beispiel 1 2 3 CoMa-Übung IX (TU Berlin) 4 5 Kürzeste Wege und Stacks 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 19.12.2012 10 / 21 Datenstrukturen für Graphen Graphen sind ein wichtiges Modellierungswerkzeug Müssen irgendwie gespeichert werden Bisher: Adjazenzmatrizen Jetzt: Adjazenzlisten Adjazenzmatrizen: Beispiel 1 2 3 4 5 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 Blöd: nur n Knoten & n − 1 Kanten, aber n2 Platz für die Matrix nötig Adjazenzlisten zum Platzsparen CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 10 / 21 Adjazenzlisten Idee Jeder Knoten besitzt Liste seiner Nachbarn CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 11 / 21 Adjazenzlisten Idee Jeder Knoten besitzt Liste seiner Nachbarn Beispiel Knoten 1: {2} 1 2 3 4 5 Knoten 2: {3} Knoten 3: {4} Knoten 4: {5} Knoten 5: {} CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 11 / 21 Adjazenzlisten Idee Jeder Knoten besitzt Liste seiner Nachbarn Beispiel Knoten 1: {2} 1 2 3 4 5 Knoten 2: {3} Knoten 3: {4} Knoten 4: {5} Knoten 5: {} Gut: n Knoten & n − 1 Kanten, in der Größenordnung von n Platz nötig CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 11 / 21 Ein weiteres Beispiel (Gerichteter) Petersen-Graph Knoten 1: {2,6} Knoten 2: {3,7} 1 Knoten 3: {4,8} 2 6 Knoten 4: {5,9} 7 10 Knoten 5: {1,10} Knoten 6: {8,9} 8 3 5 9 Knoten 7: {9,10} 4 Knoten 8: {10} Knoten 9: {} Knoten 10: {} CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 12 / 21 Ein ungerichtetes Beispiel Petersen-Graph Knoten 1: {5,2,6} Knoten 2: {1,3,7} 1 Knoten 3: {2,4,8} 2 6 Knoten 4: {3,5,9} 7 10 Knoten 5: {4,1,10} Knoten 6: {1,8,9} 8 3 5 9 Knoten 7: {2,9,10} 4 Knoten 8: {3,6,10} Knoten 9: {4,6,7} Knoten 10: {5,7,8} CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 13 / 21 Vorteile und Nachteile von Adjazenzlisten Vorteile Braucht für dünne Graphen (um n Kanten) weniger Speicher als Matrizen Beschleunigt Algorithmen auf dünnen Graphen, die I I alle Nachbarn eines Knoten oder alle Knoten des Graphen betrachten Nachteile Test, ob eine Kante im Graph ist, dauert länger Erfordert für dichte Graphen (um n2 Kanten) mehr Speicher als Matrizen (Overhead durch Listen) CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 14 / 21 Tiefensuche Algorithmus zur systematischen Suche in Graphen Eingabe: Graph G = (V , E ), manchmal auch Startknoten s ∈ V Ausgabe: Anwendungsabhängig Anwendungen: I I I I I Zusammenhängende Komponenten eines Graphen bestimmen Kreise finden Wege zwischen zwei Knoten finden Baum / Wald, der alle Knoten enthält ... CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 15 / 21 Tiefensuche mit vorgegebenem Startknoten Ideen Beginne bei Startknoten CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 16 / 21 Tiefensuche mit vorgegebenem Startknoten Ideen Beginne bei Startknoten Benutze Adjazenzlisten, um neue Knoten zu finden CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 16 / 21 Tiefensuche mit vorgegebenem Startknoten Ideen Beginne bei Startknoten Benutze Adjazenzlisten, um neue Knoten zu finden Markiere Knoten: I I I Weiß für noch nicht besuchte Knoten Orange für besuchte Knoten, von denen wir weitersuchen können Rot für besuchte Knoten, von denen wir nicht weitersuchen können CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 16 / 21 Tiefensuche mit vorgegebenem Startknoten Ideen Beginne bei Startknoten Benutze Adjazenzlisten, um neue Knoten zu finden Markiere Knoten: I I I Weiß für noch nicht besuchte Knoten Orange für besuchte Knoten, von denen wir weitersuchen können Rot für besuchte Knoten, von denen wir nicht weitersuchen können Benutze einen Stack weitersuchen können CoMa-Übung IX (TU Berlin) , um Knoten zu merken, von denen wir Kürzeste Wege und Stacks 19.12.2012 16 / 21 Tiefensuche mit vorgegebenem Startknoten Ideen Beginne bei Startknoten Benutze Adjazenzlisten, um neue Knoten zu finden Markiere Knoten: I I I Weiß für noch nicht besuchte Knoten Orange für besuchte Knoten, von denen wir weitersuchen können Rot für besuchte Knoten, von denen wir nicht weitersuchen können Benutze einen Stack weitersuchen können , um Knoten zu merken, von denen wir Nummeriere die Knoten in der Reihenfolge, in der sie gefunden werden (nett für einige Anwendungen) CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 16 / 21 Tiefensuche mit vorgegebenem Startknoten Basis-Algorithmus mit Startknoten s Färbe alle Knoten weiß s CoMa-Übung IX (TU Berlin) a b ... Kürzeste Wege und Stacks 19.12.2012 17 / 21 Tiefensuche mit vorgegebenem Startknoten Basis-Algorithmus mit Startknoten s Färbe alle Knoten weiß s a b ... Erzeuge einen leeren Stack CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 17 / 21 Tiefensuche mit vorgegebenem Startknoten Basis-Algorithmus mit Startknoten s Färbe alle Knoten weiß s a b ... Erzeuge einen leeren Stack Lege s auf den Stack s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 17 / 21 Tiefensuche mit vorgegebenem Startknoten Basis-Algorithmus mit Startknoten s Färbe alle Knoten weiß s a b ... Erzeuge einen leeren Stack Lege s auf den Stack s Solange der Stack nicht leer ist: Betrachte den obersten Knoten v v des Stacks CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 17 / 21 Tiefensuche mit vorgegebenem Startknoten Basis-Algorithmus mit Startknoten s Färbe alle Knoten weiß s a b ... Erzeuge einen leeren Stack Lege s auf den Stack s Solange der Stack nicht leer ist: Betrachte den obersten Knoten v v des Stacks I Falls v weiß ist: Färbe den Knoten orange v → v F F v erhält die nächste freie Nummer Weiße Nachbarn w werden auf den Stack gelegt (Adjazenzliste durchlaufen) CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 17 / 21 Tiefensuche mit vorgegebenem Startknoten Basis-Algorithmus mit Startknoten s Färbe alle Knoten weiß s a b ... Erzeuge einen leeren Stack Lege s auf den Stack s Solange der Stack nicht leer ist: Betrachte den obersten Knoten v v des Stacks I Falls v weiß ist: Färbe den Knoten orange v → v F F I v erhält die nächste freie Nummer Weiße Nachbarn w werden auf den Stack gelegt (Adjazenzliste durchlaufen) Falls v orange ist: Färbe den Knoten rot v → v und entferne ihn vom Stack CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 17 / 21 Tiefensuche mit vorgegebenem Startknoten Basis-Algorithmus mit Startknoten s Färbe alle Knoten weiß s a b ... Erzeuge einen leeren Stack Lege s auf den Stack s Solange der Stack nicht leer ist: Betrachte den obersten Knoten v v des Stacks I Falls v weiß ist: Färbe den Knoten orange v → v F F I I v erhält die nächste freie Nummer Weiße Nachbarn w werden auf den Stack gelegt (Adjazenzliste durchlaufen) Falls v orange ist: Färbe den Knoten rot v → v und entferne ihn vom Stack Falls v rot ist: Nimm den Knoten vom Stack CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 17 / 21 Tiefensuche – Beispiel g d a e i s b k f j c CoMa-Übung IX (TU Berlin) h Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel j g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel j g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel k i j g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel k i j g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel k i j g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel i j g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel i j g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel i j g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel j g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel j g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d h a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel e g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel e g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d e g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d e g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d e g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel d e g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel d e g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel d e g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel e g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel e g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d f a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e b b i s k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c h s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Beispiel g d a e i s b k f j c CoMa-Übung IX (TU Berlin) h Kürzeste Wege und Stacks 19.12.2012 18 / 21 Tiefensuche – Laufzeit, Speicherplatz und Kantenklassifizierung Laufzeit: jede Kante wird genau einmal betrachtet CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 19 / 21 Tiefensuche – Laufzeit, Speicherplatz und Kantenklassifizierung Laufzeit: jede Kante wird genau einmal betrachtet Speicherplatz: für jede Kante wird maximal einmal ein Knoten auf den Stack gelegt CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 19 / 21 Tiefensuche – Laufzeit, Speicherplatz und Kantenklassifizierung Laufzeit: jede Kante wird genau einmal betrachtet Speicherplatz: für jede Kante wird maximal einmal ein Knoten auf den Stack gelegt Laufzeit und Speicherplatz linear in der Anzahl der Kanten CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 19 / 21 Tiefensuche – Laufzeit, Speicherplatz und Kantenklassifizierung Laufzeit: jede Kante wird genau einmal betrachtet Speicherplatz: für jede Kante wird maximal einmal ein Knoten auf den Stack gelegt Laufzeit und Speicherplatz linear in der Anzahl der Kanten Farben und Knotennummern erlauben Klassifikation der Kanten → für Anwendungen interessant Anwendungsbeispiel: Gerichtete Zykel aus Digraph entfernen CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 19 / 21 Tiefensuche – Laufzeit, Speicherplatz und Kantenklassifizierung Laufzeit: jede Kante wird genau einmal betrachtet Speicherplatz: für jede Kante wird maximal einmal ein Knoten auf den Stack gelegt Laufzeit und Speicherplatz linear in der Anzahl der Kanten Farben und Knotennummern erlauben Klassifikation der Kanten → für Anwendungen interessant Anwendungsbeispiel: Gerichtete Zykel aus Digraph entfernen Kanten betrachten, sobald beide Knoten gefärbt wurden I I I 1 → 2 : okay 1 → : okay 2 → 1 : gerichteter Zykel CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 19 / 21 Tiefensuche – Beispiel mit Nummerierung g d a e i s b k f j c CoMa-Übung IX (TU Berlin) h Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d a e i s b k f j c h s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d a e i 1s b k f j c h s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d a e i 1s b k f j c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d a e i 1s b k f j 2c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d h a e b b i 1s k f j 2c h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d h a e b b i 1s k f j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung j g d h a e b b i 1s k f j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung j g d h a e b b i 1s k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung k i j g d h a e b b i 1s k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung k i j g d h a e b b i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung k i j g d h a e b b i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung i j g d h a e b b i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung i j g d h a e b b 6i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung i j g d h a e b b 6i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung j g d h a e b b 6i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung j g d h a e b b 6i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d h a e b b 6i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d h a e b b 6i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d a e b b 6i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d a e 7 b b 6i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d f a e 7 b b 6i 1s 5k f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d f a e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung e g d f a e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung e g d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d e g d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d e g 10 d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g d e g 10 d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung d e g 10 d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung d e g 10 11 d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung d e g 10 11 d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung e g 10 11 d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung e g 10 11 d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d f a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 9e 7 b b 6i 1s 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 9e 6i 1s 7 b 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 9e 6i 1s 7 b 5k 8f 4j 2c 3 h c b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 9e 6i 1s 7 b 5k 8f 4j 2c 3 h b a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 9e 6i 1s 7 b 5k 8f 4j 2c 3 h a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 12 9e 6i 1s 7 b 5k 8f 4j 2c 3 h a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 12 9e 6i 1s 7 b 5k 8f 4j 2c 3 h a s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 12 9e 6i 1s 7 b 5k 8f 4j 2c 3 h s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 12 9e 6i 1s 7 b 5k 8f 4j 2c 3 h s CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 20 / 21 Tiefensuche – Beispiel mit Nummerierung g 10 11 d a 12 9e 6i 1s 7 b 5k 8f 4j 2c CoMa-Übung IX (TU Berlin) 3 h Kürzeste Wege und Stacks 19.12.2012 20 / 21 Frohe Weihnachten und einen guten Rutsch! Euer CoMa-Team CoMa-Übung IX (TU Berlin) Kürzeste Wege und Stacks 19.12.2012 21 / 21