Kap. 6.4: Elementare Graphalgorithmen Kap. 6.5: Minimale Spannbäume Professor Dr. Petra Mutzel Lehrstuhl für Algorithm Engineering, LS11 Fakultät für Informatik, TU Dortmund 20. VO DAP2 SS 2008 Petra Mutzel 24. Juni 2008 DAP2 SS08 1 Nachtest für Ausnahmefälle • Di 1. Juli 2008, 10:15 Uhr, OH14, R. 202 • Anmeldung bis 26. Juni erforderlich via Email an Carsten Gutwenger • Stoff: Alles bis inkl. Hashing (inkl.1.-10. Übungsblatt) • Teilnahmevoraussetzungen: • Attest/Entschuldigt beim 1. oder 2. Übungstest • oder besondere Härtefälle anerkannt in meiner Sprechstunde Di 24.6.08,14:15 Uhr-15:15 Uhr Petra Mutzel DAP2 SS08 2 Anmeldung zur Klausur 25.07.2008 um 9:00 Uhr • • • • • Informatik AI/KI Bacc+Diplom: BOSS System Informationstechnik Diplom: bis 20.06.08: online Elektrotechnik Diplom: direkt bei uns Physik Bacc/Diplom: ihr Dekanat Datenanalyse und Datenmanagement / Statistik Bacc/Diplom: ihr eigenes Prüfungsamt • Mathematik Bacc/Diplom: erst ab 1.7. bekannt (wahrscheinlich BOSS System) • Lehramt, BaMaLa: direkt bei uns Petra Mutzel DAP2 SS08 3 Überblick • Kurzer Rückblick: BFS / DFS • Topologisches Sortieren • Minimale Spannbäume Petra Mutzel DAP2 SS08 4 Breitensuche (BFS) Methode: (1) Starte am Knoten u:=s. Sei Q:=∅ eine Queue. (2) Für alle Knoten v∈N(u) // erforsche Knoten u (3) Falls wir v zum ersten Mal sehen: (4) markiere v als „gesehen“ (5) dist(v):=dist(u)+1; merke Vorgänger; (6) hänge v hinten an Q an. (7) Sei u der nächste Knoten in Q. Gehe zu (2) dist(v) enthält den graphentheoretischen Abstand von u nach v; π(v) den Vorgänger des kürz. Weges Petra Mutzel DAP2 SS08 5 Algorithmus BFS(s) Sei G=(V,E) ungerichteter Graph, s,u,v: Knoten (1) for all v∈V \ {s} do { marked[v]:=0; dist[v]:=∞} (2) Q.put(s); marked[s]:=1; dist[s]:=π[s]:=0 (3) while not Q.ISEMPTY() do { (4) u:=Q.GET() (5) for all v∈N(u) do { (6) if not marked[v] then { (7) Q.Put(v) (8) marked[v]:=1 (9) dist[v]:=dist[u]+1; π[v]:=u (10) } } } Petra Mutzel DAP2 SS08 6 Algorithmus DFS(G) Sei G=(V,E) ungerichteter Graph, v,w: Knoten (1) for all v∈V do { marked[v]:=0; π[v]:=nil}num=0} (2) for all v∈V do { (3) if not marked[v] then DFS-VISIT(v) (4) } (5) procedur DFS-VISIT(Node v) (6) marked[v]:=1 num=num+1; dfsnum=num (7) for all w∈N(v) do (8) if not marked[w] then { (9) π[w]:=v DFS-Nummer gibt (10) DFS-VISIT(w) die Reihenfolge der (11) } besuchten Knoten an BFS-Baum vs. DFS-Baum BFS-Baum 1 2 3 Höhe eindeutig 1 2 2 3 3 4 DFS-Baum 7 6 5 DFS-Nummer gibt die Reihenfolge der besuchten Knoten an Kap. 6.4.3 Topologisches Sortieren Achtung: in diesem Abschnitt gerichtete Graphen! Petra Mutzel DAP2 SS08 9 Modellierung von Abhängigkeiten 2. 3. Dachstuhl Mauern 1. Baugrube 4. → 5. Fenster Dach eindecken gerichteter Graph Kante (x,y) ⇒ Aufgabe x muss abgeschlossen werden, bevor mit y angefangen werden kann Petra Mutzel DAP2 SS08 10 DAG Grundvoraussetzung: Graph ist azyklisch! (also keine zyklischen Abhängigkeiten) Definition: Ein DAG (directed acyclic graph) ist ein gerichteter Graph, der keinen (gerichteten) Kreis enthält. Petra Mutzel DAP2 SS08 11 Topologisches Sortieren Topologisches Sortieren Gegeben: DAG G = (V,A) Gesucht: v1 v2 eine Sortierung v1,…,vn der Knoten von G mit i<j für alle (vi,vj) ∈ A v3 v4 v5 v6 Petra Mutzel v7 v8 v9 DAP2 SS08 v10 12 Warum ist dies nicht mit BFS lösbar? 2. 3. Dachstuhl Mauern 1. Baugrube 4. 5. Fenster Dach eindecken graphentheoretische Distanz von Baugrube zu Fenster = 1 (BFS), aber Fenster darf erst nach Mauer ausgeführt werden Petra Mutzel DAP2 SS08 13 Quellen & Senken • Eine Quelle ist ein Knoten ohne eingehende Kanten • Eine Senke ist ein Knoten ohne ausgehende Kanten Quelle Senke Petra Mutzel DAP2 SS08 14 Beobachtung: Jeder (nicht-leere) DAG G =(V,A) hat mindestens eine Quelle und eine Senke. Beweis: Annahme: G hat keine Senke • Verfolge von u1 an immer ausgehende Kanten pi := u1,u2,…,ui solange bis i > |V| oder keine ausgehende Kante mehr existiert • Falls i > |V| ein Knoten zweimal auf pi • Kreis! Widerspruch! • Analog für Quelle Petra Mutzel DAP2 SS08 15 Algorithmus Idee: Wähle immer Quelle und entferne sie dann while G ist nicht leer do Wähle eine Quelle s in G und gib sie aus G := G - s end while Petra Mutzel DAP2 SS08 16 Verbesserungen Wie finden wir effizient eine Quelle? • Wird v gelöscht, dann können nur Zielknoten w von Kanten (v,w) neu zu Quellen werden. • Genügt ausgehende Nachbarmenge A -(v) zu betrachten. Müssen wir Knoten wirklich löschen? • Nein! Verwalte Eingangsgrad in Knotenfeld indeg. Petra Mutzel DAP2 SS08 17 Algorithmus TopSort (1) (2) var Queue Q var int indeg[V] (3) (4) (5) (6) (7) // Initialisierung for all v ∈ V do { indeg[v] := d +(v) if indeg[v] = 0 then Q.PUT(v) } Petra Mutzel DAP2 SS08 18 Algorithmus TopSort (2) (8) // Hauptschleife (9) while not Q.ISEMPTY() do { (10) v := Q.GET() (11) Gib v aus (12) for all (v,u) ∈ A-(v) do { (13) indeg[u] := indeg[u] - 1 (14) if indeg[u] = 0 then Q.PUT(u) (15) } (16) } Petra Mutzel DAP2 SS08 19 Beispiel: TopSort a b c d Q a e j b f c Ausgabe: a j f j b f c g i e d h g h e d g h i i Petra Mutzel DAP2 SS08 21 Analyse der Laufzeit • Initialisierung: Θ(|V|) (da d +(v) in konstanter Zeit abrufbar) • Jeder Knoten kommt genau einmal in Q while-Schleife wird |V|-mal durchlaufen • Die for all-Schleife (Zeile 12) wird insgesamt für jede Kante einmal durchlaufen: Θ(|A|) • Gesamtaufwand: Θ(|V |+|A|) Petra Mutzel DAP2 SS08 22 Analyse TopSort Theorem: Der Algorithmus TopSort berechnet eine topologische Sortierung der Knoten eines DAGs G=(V,A) in Zeit Θ(|V|+|A|). Petra Mutzel DAP2 SS08 23 Kap. 6.5 Minimale Spannbäume Achtung: in diesem Abschnitt ungerichtete gewichtete Graphen! ungerichteter Graph G=(V,E) Gewichtsfunktion w : E→R Kantengewichte: Kosten, Länge, … Petra Mutzel DAP2 SS08 24 Bäume Definition: Ein ungerichteter Graph heißt Baum (engl. tree), wenn er zusammenhängend und kreisfrei ist. auch: freier Baum (im Gegensatz zu gewurzelter Baum) nicht zusammenhängend: Wald Petra Mutzel DAP2 SS08 25 Theorem: Sei G=(V,E) ungerichteter Graph (ohne Mehrfachkanten, Schleifen). Dann sind äquivalent: 1) G ist ein Baum 2) Jedes Paar von Knoten ist durch einen eindeutigen Weg verbunden. 3) G ist zshgd., zerfällt aber durch Entfernen einer beliebigen Kante in zwei Komponenten. 4) G ist zshgd. und |E| = |V|-1 5) G ist kreisfrei und |E|=|V|-1 6) G ist kreisfrei, aber durch Hinzufügen einer beliebigen Kante entsteht ein Kreis. Petra Mutzel DAP2 SS08 27 Erläuternde Bilder zum Theorem zu 2) zu 3) zu 6) Petra Mutzel DAP2 SS08 28 Beweis: durch Ringschluss 1) 2) … 6) 1) 1) 2) • Da Baum zshgd. ex. Weg zwischen u und v • Annahme: zwei Wege p und q p′ u x y v q′ • p′ + q′ bilden Kreis! Widerspruch Petra Mutzel DAP2 SS08 29 2) 3) • zusammenhängend klar • Annahme: G zerfällt nach Löschen von (u,v) nicht • Ex. Weg zwischen u und v, der (u,v) nicht benutzt • Weg nicht eindeutig! Widerspruch Petra Mutzel DAP2 SS08 30 3) 4) • zusammenhängend klar • G besitzt DFS-Baum mit |V|-1 T-Kanten • Falls G mehr Kanten besitzt ex. B-Kante • Durch Löschen einer B-Kante zerfällt G aber nicht • G hat |V|-1 Kanten Petra Mutzel DAP2 SS08 31 4) 5) • Da G zshgd. und |E| = |V|-1 die T-Kanten eines DFS-Baums sind genau die Kanten von G • keine B-Kanten • G kreisfrei Petra Mutzel DAP2 SS08 32 5) 6) • G kreisfrei und besteht aus k Komponenten • G hat |V|-k Kanten • k=1 (d.h. G ist zusammenhängend) • Hinzufügen einer Kante erzeugt Kreis Petra Mutzel DAP2 SS08 33 6) 1) • Sei u,v beliebiges Knotenpaar • Entweder (u,v) ∈ E oder Hinzufügen von (u,v) erzeugt Kreis ex. Weg von u nach v in G • G ist zusammenhängend Petra Mutzel DAP2 SS08 34 Spannbaum Definition: Sei G=(V,E) ein ungerichteter, zusammenhängender Graph. Ein Untergraph T=(V,ET) von G heißt Spannbaum (engl. spanning tree) von G, falls T ein Baum ist. Gewicht eines Spannbaums: w(T) := w(ET) := ∑e∈ ET w(e) Petra Mutzel DAP2 SS08 35 Minimaler Spannbaum Minimum Spanning Tree (MST) Gegeben: ungerichteter, zshgd. Graph G = (V,E) Gewichtsfunktion w : E→R Gesucht: ein Spannbaum T von G mit minimalem Gewicht w(T) Anwendung: Konstruktion von Netzwerken Petra Mutzel DAP2 SS08 36 Beispiel für MST b 4 a 10 2 d g 7 11 9 2 12 c e 5 7 i 8 4 5 f Petra Mutzel 1 h DAP2 SS08 37 Definition: • Eine Teilmenge E′ der Kanten heißt aussichtsreich, wenn es einen MST gibt, der alle Kanten aus E′ enthält. • Eine Kante (u,v) verlässt eine Knotenmenge S⊂V, wenn u∈S und v∉S b a d g i e c f S Petra Mutzel h DAP2 SS08 39 Definition: • Eine Teilmenge E′ der Kanten heißt aussichtsreich, wenn es einen MST gibt, der alle Kanten aus E′ enthält. • Eine Kante (u,v) verlässt eine Knotenmenge S⊂V, wenn u∈S und v∉S • E′:=∅ ist immer aussichtsreich. • E′ aussichtsreich und |E′| = |V|-1 G′ := (V,E′) ist ein MST Petra Mutzel DAP2 SS08 40 MST Eigenschaft Lemma: Sei G=(V,E) zshgd. mit Gewichtsfunktion w:E→R. Seien: • S⊂V • E′⊂E aussichtsreich und keine Kante aus E′ verlässt S • e∈E eine Kante mit minimalem Gewicht, die S verlässt Dann ist E′∪{e} aussichtsreich. Petra Mutzel DAP2 SS08 41 Beweis: • Ex. MST T=(V,ET) mit E′ ⊆ ET • Falls e∈ ET fertig! • Sonst: ET ∪{e} enthält Kreis: e S e' • Ex. Kante e′ auf Kreis, die S verlässt • Da w(e)≤w(e′) T – e′ + e ist ein MST • E′∪{e} ist aussichtsreich Petra Mutzel DAP2 SS08 42 6.5.1 Algorithmus von Kruskal Idee: • Sortiere die Kanten nach aufsteigendem Gewicht: w(e1)≤w(e2)≤…≤w(em) • T:=∅ • Für i:=1,…,m: • Falls T ∪ {ei} kreisfrei, dann: T:=T ∪ {ei} Greedy-Algorithmus („gefräßig“): iterative Konstruktion einer Lösung, die immer um die momentan besten Kandidaten erweitert wird. 43 Petra Mutzel DAP2 SS08 43 Beispiel für Kruskal b 4 a 10 2 d g 7 11 9 2 12 c e 5 7 i 8 4 5 f 1 h Korrektheit von Kruskal: siehe nächste Vorlesung Petra Mutzel DAP2 SS08 44 Realisierung von Kruskal Idee: • Sortiere die Kanten nach aufsteigendem Gewicht: w(e1)≤w(e2)≤…≤w(em) • T:=∅ • Für i:=1,…,m: • Falls T ∪ {ei} kreisfrei, dann: T:=T ∪ {ei} Problem: Teste, ob T ∪ {ei} kreisfrei Petra Mutzel DAP2 SS08 46 46 Teste, ob T ∪ {ei} kreisfrei Idee: • Aufruf der Funktion ISACYCLIC(V, T ∪ {ei}) • Gesamtlaufzeit für alle Kreis-Tests: O(|V| |E|), da |E| Aufrufe nötig sind, und T pro Aufruf bis zu |V|-1 Kanten besitzen kann. Besser: Datenstruktur Union-Find Idee: „Lasse Wälder wachsen“ bzw. Partitionierung von Mengen → fast „Linearzeit“ erreichbar Petra Mutzel s. nächste DAP2 SS08 47 VO(inkl. Korrektheit) Petra Mutzel DAP2 SS08 48 Zum Ausschneiden: a j f b g c d e i h Q: a j b f c e d g h i Ausgabe: Zum Ausdrucken und Üben: 4 a 10 b d g 7 11 9 12 2 2 c e 5 7 4 f i 8 1 h 5