Nachtest für Ausnahmefälle 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 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 DAP2 SS08 2 DAP2 SS08 4 • Topologisches Sortieren • Minimale Spannbäume 3 Petra Mutzel Algorithmus BFS(s) Sei G=(V,E) ungerichteter Graph, s,u,v: Knoten 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) (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) } } } dist(v) enthält den graphentheoretischen Abstand von u nach v; π(v) den Vorgänger des kürz. Weges DAP2 SS08 DAP2 SS08 • Kurzer Rückblick: BFS / DFS Breitensuche (BFS) Petra Mutzel Petra Mutzel Überblick • • • • • Petra Mutzel • 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 5 Petra Mutzel DAP2 SS08 6 1 Algorithmus DFS(G) BFS-Baum vs. DFS-Baum Sei G=(V,E) ungerichteter Graph, v,w: Knoten BFS-Baum (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 1 1 2 3 2 3 4 DFS-Baum 6 7 5 DFS-Nummer gibt die Reihenfolge der besuchten Knoten an Modellierung von Abhängigkeiten 2. 3. Dachstuhl Mauern Achtung: in diesem Abschnitt gerichtete Graphen! 1. Baugrube 4. → DAP2 SS08 5. Fenster Dach eindecken gerichteter Graph Kante (x,y) ⇒ Aufgabe x muss abgeschlossen werden, bevor mit y angefangen werden kann 9 Petra Mutzel DAG DAP2 SS08 10 Topologisches Sortieren Grundvoraussetzung: Topologisches Sortieren Graph ist azyklisch! (also keine zyklischen Abhängigkeiten) Gegeben: DAG G = (V,A) Gesucht: Definition: Ein DAG (directed acyclic graph) ist ein gerichteter Graph, der keinen (gerichteten) Kreis enthält. Petra Mutzel 3 Höhe eindeutig Kap. 6.4.3 Topologisches Sortieren Petra Mutzel 2 DAP2 SS08 v1 11 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 2 Quellen & Senken Warum ist dies nicht mit BFS lösbar? 2. 3. • Eine Quelle ist ein Knoten ohne eingehende Kanten • Eine Senke ist ein Knoten ohne ausgehende Kanten 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 Quelle Senke 13 Petra Mutzel DAP2 SS08 14 Algorithmus Beobachtung: Jeder (nicht-leere) DAG G =(V,A) hat mindestens eine Quelle und eine Senke. Idee: Wähle immer Quelle und entferne sie dann 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! while G ist nicht leer do Wähle eine Quelle s in G und gib sie aus G := G - s end while • Analog für Quelle Petra Mutzel DAP2 SS08 15 Petra Mutzel Verbesserungen Müssen wir Knoten wirklich löschen? • Nein! Verwalte Eingangsgrad in Knotenfeld indeg. DAP2 SS08 16 Algorithmus TopSort 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. Petra Mutzel DAP2 SS08 17 (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 3 Beispiel: TopSort 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) } a b c d Q Petra Mutzel DAP2 SS08 19 Analyse der Laufzeit 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 TopSort • Initialisierung: Θ(|V|) (da d +(v) in konstanter Zeit abrufbar) Theorem: Der Algorithmus TopSort berechnet eine topologische Sortierung der Knoten eines DAGs G=(V,A) in Zeit Θ(|V|+|A|). • 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 Petra Mutzel DAP2 SS08 23 Bäume Kap. 6.5 Minimale Spannbäume Definition: Ein ungerichteter Graph heißt Baum (engl. tree), wenn er zusammenhängend und kreisfrei ist. Achtung: in diesem Abschnitt ungerichtete gewichtete Graphen! ungerichteter Graph G=(V,E) Gewichtsfunktion w : E→R Kantengewichte: Kosten, Länge, … Petra Mutzel DAP2 SS08 auch: freier Baum (im Gegensatz zu gewurzelter Baum) nicht zusammenhängend: Wald 24 Petra Mutzel DAP2 SS08 25 4 Erläuternde Bilder zum Theorem 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. zu 2) 3) G ist zshgd., zerfällt aber durch Entfernen einer beliebigen Kante in zwei Komponenten. 4) G ist zshgd. und |E| = |V|-1 zu 3) 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 zu 6) 27 Beweis: durch Ringschluss 1) 2) … 6) 1) DAP2 SS08 28 2) 3) • zusammenhängend klar 1) 2) • 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 • Da Baum zshgd. ex. Weg zwischen u und v • Annahme: zwei Wege p und q p′ u Petra Mutzel x y v q′ • p′ + q′ bilden Kreis! Widerspruch Petra Mutzel DAP2 SS08 29 Petra Mutzel DAP2 SS08 3) 4) 4) 5) • zusammenhängend klar • Da G zshgd. und |E| = |V|-1 die T-Kanten eines DFS-Baums sind genau die Kanten von G • 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 30 • keine B-Kanten • G kreisfrei 31 Petra Mutzel DAP2 SS08 32 5 5) 6) 6) 1) • G kreisfrei und besteht aus k Komponenten • Sei u,v beliebiges Knotenpaar • G hat |V|-k Kanten • Entweder (u,v) ∈ E oder • k=1 (d.h. G ist zusammenhängend) • Hinzufügen einer Kante erzeugt Kreis Hinzufügen von (u,v) erzeugt Kreis ex. Weg von u nach v in G • G ist zusammenhängend Petra Mutzel DAP2 SS08 33 Spannbaum Gegeben: ungerichteter, zshgd. Graph G = (V,E) Gewichtsfunktion w : E→R Gesucht: ein Spannbaum T von G mit minimalem Gewicht w(T) w(T) := w(ET) := ∑e∈ ET w(e) Anwendung: Konstruktion von Netzwerken DAP2 SS08 35 Beispiel für MST 4 a 10 2 d g 2 12 c e 5 7 b 5 f 1 h a DAP2 SS08 37 d 36 g i e c Petra Mutzel DAP2 SS08 i 8 4 Petra Mutzel 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 7 11 9 34 Minimum Spanning Tree (MST) Gewicht eines Spannbaums: b DAP2 SS08 Minimaler 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. Petra Mutzel Petra Mutzel f S Petra Mutzel h DAP2 SS08 39 6 MST Eigenschaft 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 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 • E′:=∅ ist immer aussichtsreich. • E′ aussichtsreich und |E′| = |V|-1 G′ := (V,E′) ist ein MST Petra Mutzel Dann ist E′∪{e} aussichtsreich. DAP2 SS08 40 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 Greedy-Algorithmus („gefräßig“): iterative Konstruktion einer Lösung, die immer um die momentan besten Kandidaten erweitert wird. 43 DAP2 SS08 42 Beispiel für Kruskal b 4 a 2 d g 2 12 c e 5 7 5 f 1 h Problem: Teste, ob T ∪ {ei} kreisfrei Korrektheit von Kruskal: siehe nächste Vorlesung Petra Mutzel DAP2 SS08 43 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} i 8 4 Petra Mutzel Realisierung von Kruskal 7 11 9 41 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} e 10 DAP2 SS08 6.5.1 Algorithmus von Kruskal Beweis: • Ex. MST T=(V,ET) mit E′ ⊆ ET • Falls e∈ ET fertig! • Sonst: ET ∪{e} enthält Kreis: S Petra Mutzel DAP2 SS08 44 Petra Mutzel DAP2 SS08 46 46 7 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) j f 4 b a g c d e DAP2 SS08 48 Zum Ausdrucken und Üben: Zum Ausschneiden: a Petra Mutzel i h 10 b g 7 11 9 12 2 d 2 c e 5 7 f i 8 4 1 h 5 Q: a j b f c e d g h i Ausgabe: 8