Informatik II ‐ SS 2014 (Algorithmen & Datenstrukturen) Vorlesung 16 (2.7.2014) Graphtraversierung II, Minimale Spannbäume I Fabian Kuhn Algorithmen und Komplexität Fabian Kuhn Informatik II, SS 2014 Tiefensuche: Pseusocode DFS‐Traversal: for all u in V: u.color = white; DFS‐visit(root, NULL) DFS‐visit(u, p): u.color = gray; u.parent = p; for all v in u.neighbors do if v.color = white DFS‐visit(v, u) visit node u; u.color = black; Fabian Kuhn Informatik II, SS 2014 2 DFS‐ “Klammer”‐Theorem Beispiel (aus [CLRS]) Fabian Kuhn Informatik II, SS 2014 3 Weiße Pfade Theorem: In einem DFS‐Baum ist ein Knoten genau dann im Teilbaum eines Knoten , falls unmittelbar vor dem Markieren von , ein komplett weißer Pfad von nach besteht. Fabian Kuhn Informatik II, SS 2014 4 Klassifizierung der Kanten (bei DFS‐Suche) Baumkanten: • , ist eine Baumkante, falls von aus entdeckt wird 2 8 1 Rückwärtskanten: • , ist eine Rückwärtskante, falls eine Vorgängerknoten von ist Vorwärtskanten: • , ist eine Vorwärtskante, falls ein Nachfolgerknoten von ist Querkanten: • Alle übrigen Kanten Fabian Kuhn 7 3 9 4 5 6 Informatik II, SS 2014 5 DFS – Ungerichtete Graphen Theorem: Bei einer DFS‐Suche in ungerichteten Graphen ist jede Kante entweder eine Baumkante oder eine Rückwärtskante. Fabian Kuhn Informatik II, SS 2014 6 DFS – Gerichtete Graphen Theorem: Ein gerichteter Graph hat genau dann keine Zyklen, falls es bei der DFS‐Suche keine Rückwärtskanten gibt. Fabian Kuhn Informatik II, SS 2014 7 Anwendung: Topologische Sortierung Zyklenfreie, gerichtete Graphen: • DAG: directed acyclic graph • Modellieren z.B. zeitliche Abhängigkeiten von Aufgaben • Beispiel: Anziehen von Kleidungsstücken Unterhemd Pullover Mantel Unterhose Hose Schuhe Brille Socken Topologische Sortierung: • Sortiere die Knoten eines DAGs so, dass vor erscheint, falls ein gerichteter Pfad von nach existiert • Im Beispiel: Finde eine mögliche Anziehreihenfolge Fabian Kuhn Informatik II, SS 2014 8 Topologische Sortierung: Etwas formaler… Zyklenfreie, gerichtete Graphen: • repräsentieren partielle Ordnungsrelationen – asymmetrisch: ⟹ transitiv: ∧ ⟹ – partielle Ordnung: nicht alle Paare müssen vergleichbar sein • Beispiel: Teilmengenrelation bei Mengen Topologische Sortierung: • Sortiere die Knoten eines DAGs so, dass vor erscheint, falls ein gerichteter Pfad von nach existiert • Erweitere eine partielle Ordnung zu einer totalen Ordnung Fabian Kuhn Informatik II, SS 2014 9 Topologische Sortierung: Algorithmus Führe DFS aus… 2 1 3 7 6 11 5 4 8 12 9 13 10 14 Beobachtung: • Knoten ohne Nachfolger werden als erstes besucht (schwarz gef.) • Besuchreihenfolge ist umgekehrte topologische Sortierung Fabian Kuhn Informatik II, SS 2014 10 Topologische Sortierung: Algorithmus Theorem: Umgekehrte “Visit”‐Reihenfolge (schwarz färben) der Knoten bei DFS‐Traversierung ergibt topologische Sortierung Fabian Kuhn Informatik II, SS 2014 11 Topologische Sortierung: Algorithmus Theorem: Umgekehrte “Visit”‐Reihenfolge (schwarz färben) der Knoten bei DFS‐Traversierung ergibt topologische Sortierung Fabian Kuhn Informatik II, SS 2014 12 DFS‐Traversierung: Weitere Anwendungen Stark zusammenhängende Komponenten • Stark zus.‐hängende Komponente eines gerichteten Graphen: “Maximale Knoten‐Teilmenge, so dass jeder jeden erreichen kann” Bild: Wikipedia • Benötigt 2 DFS‐Traversierungen (Zeit ∈ ) – auf und auf (alle Kanten umgedreht) – und haben die gleichen stark zus.‐hängenden Komponenten • Details z.B. in [CLRS] Fabian Kuhn Informatik II, SS 2014 13 DFS‐Traversierung: Weitere Anwendungen Artikulationsknoten, Brücken, Biconnected Components • Annahme: ungerichteter Graph • Artikulationsknoten : entfernen vergrössert die Anzahl Komponenten • Brücke : Kante entfernen vergrössert die Anzahl Komponenten Fabian Kuhn Informatik II, SS 2014 14 DFS‐Traversierung: Weitere Anwendungen Biconnected Components • Komponenten, welche übrig bleiben, wenn man alle Brücken entfernt Bild: [CLRS] • Artikulationsknoten und Brücken können mit einer DFS‐ Traversierung in Zeit gefunden werden – Algorithmus von Hopcroft, Tarjan (1973) • Zerlegung in Biconnected Components daher in der gleichen Zeit Fabian Kuhn Informatik II, SS 2014 15 Bäume • Als ungerichtete Graphen (mit Knoten) betrachtet… Baum: • Zusammenhängender ungerichteter Graph, ohne Zyklen – Ein nicht zus.‐hängender zyklenfreier (unger.) Graph heisst Wald – Anzahl Kanten: 1 (jede Kante reduziert die #Komponenten um 1) Äquivalente Definitionen: • Minimaler zusammenhängender Graph • Maximaler zyklenfreier Graph • Eindeutiger Pfad zwischen jedem Knotenpaar • Zusammenhängender Graph mit 1 Kanten Fabian Kuhn Informatik II, SS 2014 16 Spannbaum Gegeben: Zusammenhängender, ungerichteter Graph , Spannbaum , : Teilgraph ( ⊆ ) • ist ein Baum ist, welcher alle Knoten von enthält • Alternativ: ist ein Baum mit 1 Kanten aus 1 2 8 3 4 5 6 Fabian Kuhn Informatik II, SS 2014 7 17 Minimaler Spannbaum Gegeben: Zus.‐hängender, ungerichteter Graph Kantengewichten ∶ → , , mit Minimaler Spannbaum , : • Spannbaum mit kleinstem Gesamtgewicht 1 1 2 3 9 3 15 3 7 8 4 2 6 1 6 5 8 Fabian Kuhn 6 9 Informatik II, SS 2014 7 18 Minimale Spannbäume Ziel: Gegeben ein gewichteter, ungerichteter Graph , finde einen Spannbaum mit minimalem Gesamtgewicht. • Minimaler Spannbaum = Minimum Spanning Tree = MST • Ein grundlegendes Optimierungsproblem auf Graphen – eines von sehr vielen Optimierungsproblemen auf Graphen • kommt oft als Teilproblem vor • ist aber auch interessant an sich Fabian Kuhn Informatik II, SS 2014 19 Basis‐MST‐Algorithmus Idee: Starte mit leerer Kantenmenge und füge die Kanten schrittweise hinzu, bis es ein Spannbaum ist Invariante: Algorithmus hat zu jeder Zeit eine Kantenmenge , so dass Teilmenge eines minimalen Spannbaums ist. • Am Anfang ist ∅ • Danach wird jeweils eine Kante hinzugefügt, ohne die Invariante zu verletzen • Wir nennen eine Kante, für welche wir sicher sein können, dass wir sie zu hinzufügen können eine sichere Kante für • Wie man sichere Kanten findet, werden wir sehen… Fabian Kuhn Informatik II, SS 2014 20 Basis‐MST‐Algorithmus Invariante: Algorithmus hat zu jeder Zeit eine Kantenmenge , so dass Teilmenge eines minimalen Spannbaums ist. Basis‐MST‐Algorithmus: = ∅ while ist kein Spannbaum do , für Finde sichere Kante = ∪ , return • Invariante ist eine gültige Schleifeninvariante • Invariante + Abbruchbedingung ⟹ Fabian Kuhn Informatik II, SS 2014 ist ein MST! 21 Wie findet man sichere Kanten? • Invariante es gibt immer mindestens eine sicher Kante – ist Teilmenge eines MST und kann daher zu einem MST erweitert werden • Zuerst benötigen wir ein paar Begriffe… Schnitt , ∖ : • Kante , ∈ ist eine Schnittkante bezüglich , ∖ , falls ein Ende in und ein Ende in ∖ ist. • Wir nennen Kante , eine leichte Schnittkante bez. , ∖ , falls sie das kleinste Gewicht von allen Schnittkanten hat Fabian Kuhn Informatik II, SS 2014 22 Sichere Kanten Annahmen: • , , ist zus.‐h., unger. Graph mit Kantengewichten • ist Teilmenge (Teilgraph) eines MST Theorem: Sei , ∖ ein Schnitt, so dass keine Schnittkanten enthält und sei , , ∈ , ∈ ∖ eine leichte Schnittkante bezüglich , ∖ . Dann ist , eine sichere Kante für . 1 1 3 9 3 2 15 3 7 8 4 2 6 6 1 5 8 Fabian Kuhn 6 9 7 Informatik II, SS 2014 23 Sichere Kanten Theorem: Sei , ∖ ein Schnitt, so dass keine Schnittkanten enthält und sei , , ∈ , ∈ ∖ eine leichte Schnittkante bezüglich , ∖ . Dann ist , eine sichere Kante für . Fabian Kuhn Informatik II, SS 2014 24