Erinnerung VL 27.06.2016 I Bellman-Ford-Algorithmus (Brute-Force-Suche) I Varianten des Kürzeste-Wege-Problems (azyklische Graphen) I Ausblick: Routenplanung in Straÿennetzwerken I Motivation Minimale Spannbäume (MSTs) I Heute: I I Wichtige Eigenschaften von MSTs MST-Algorithmen: (Jarník-Prim, Kruskal) KIT Institut für Theoretische Informatik 1 Kap. 11: Minimale Spannbäume 7 a b 9 6 2 3 c 4 d KIT Institut für Theoretische Informatik 2 Minimale Spannbäume (MST) Eingabe: I ungerichteter (zusammenhängender) Graph V = {1, . . . , n} I Knoten V , n = |V |, I Kanten e ∈ E ⊆ V × V , m = |E | I Kantengewichte z. B. G = (V , E ). c(e) ∈ R+ . 1 5 2 9 7 2 4 3 KIT Institut für Theoretische Informatik 3 Minimale Spannbäume (MST) Eingabe: I ungerichteter (zusammenhängender) Graph V = {1, . . . , n} I Knoten V , n = |V |, I Kanten e ∈ E ⊆ V × V , m = |E | I Kantengewichte z. B. G = (V , E ). c(e) ∈ R+ . 1 5 2 9 7 2 4 3 Aufgabe: Finde Baum (V , T ) mit minimalem Gewicht ∑e∈T c(e), der alle Knoten verbindet. KIT Institut für Theoretische Informatik 3 Minimale aufspannende Wälder (MSF) Falls G nicht zusammenhängend ist, nde minimalen aufspannenden Wald Zusammenhangskomponenten von G T, der alle aufspannt. MST-Algorithmen lassen sich leicht zu MSF-Algorithmen verallgemeinern. KIT Institut für Theoretische Informatik 4 Anwendungen I Netzwerk-Entwurf I Bottleneck-Shortest-Paths: Suche s t -Pfad, dessen max. Kantengewicht minimal ist. 1 5 Dies ist der Pfad im MST! 2 9 7 2 4 3 KIT Institut für Theoretische Informatik 5 Anwendungen I Netzwerk-Entwurf I Bottleneck-Shortest-Paths: Suche s t -Pfad, dessen max. Kantengewicht minimal ist. 1 5 Dies ist der Pfad im MST! I Clustering: Lass schwere MST-Kanten weg. Teilbäume denieren Cluster. Konkret z. B. Bildsegmentierung I Näherungslösungen für schwere Probleme, z. B. Handlungsreisenden-, 2 9 7 2 4 3 Steinerbaumproblem. Siehe Buch, VL G. theoretischer Informatik, Algorithmen II. KIT Institut für Theoretische Informatik 5 Anwendungen I Netzwerk-Entwurf I Bottleneck-Shortest-Paths: Suche s t -Pfad, dessen max. Kantengewicht minimal ist. 1 5 Dies ist der Pfad im MST! I Clustering: Lass schwere MST-Kanten weg. Teilbäume denieren Cluster. Konkret z. B. Bildsegmentierung I Näherungslösungen für schwere Probleme, z. B. Handlungsreisenden-, 2 9 7 2 4 3 Steinerbaumproblem. Siehe Buch, VL G. theoretischer Informatik, Algorithmen II. I Irrgärten (Beispiel von Wikipedia) KIT Institut für Theoretische Informatik 5 MST-Kanten auswählen und verwerfen Die Schnitteigenschaft (Cut Property) Für beliebige Teilmenge S ⊂V betrachte die Schnittkanten C = {{u, v } ∈ E : u ∈ S, v ∈ V \ S} Die leichteste Kante in C kann in einem MST verwendet werden. 1 5 9 2 4 2 7 3 KIT Institut für Theoretische Informatik 6 MST-Kanten auswählen und verwerfen Die Schnitteigenschaft (Cut Property) Für beliebige Teilmenge S ⊂V betrachte die Schnittkanten e C = {{u, v } ∈ E : u ∈ S, v ∈ V \ S} Die leichteste Kante in C kann in einem MST ver- S wendet werden. Beweis: Betrachte MST T 0 . Fall e ∈ T 0 : Beweis fertig. Sonst: T 0 ∪ {e} enthält Kreis K . (u,v) V\S e Betrachte eine Kante {u, v } ∈ (C ∩ K ) \ {e}. 0 Dann ist T = T \ {{u, v }} ∪ {e} ein Spannbaum, der nicht schwerer ist. Denn: S (u,v) V\S c(e) ≤ c({u, v }) KIT Institut für Theoretische Informatik 6 MST-Kanten auswählen und verwerfen Die Kreiseigenschaft (Cycle Property) Die schwerste Kante auf einem Kreis wird nicht für einen MST benötigt. 1 5 2 9 7 2 4 3 KIT Institut für Theoretische Informatik 7 MST-Kanten auswählen und verwerfen Die Kreiseigenschaft (Cycle Property) Die schwerste Kante auf einem Kreis wird nicht für einen MST benötigt. Beweis. Angenommen, MST T0 benutzt die schwerste Kante 0 Dann ex. e ∈ C \ T , so dass 0 (Es gilt c(e) ≤ c(e ).) T= e0 auf Kreis C. T 0 \ {e 0 } ∪ {e} auch ein MST ist. 1 5 2 9 7 2 4 3 KIT Institut für Theoretische Informatik 7 Der Jarník-Prim-Algorithmus [Jarník 1930, Prim 1957] a Idee: 6 c Lasse einen Baum wachsen T := 0/ S:= {s} for arbitrary start node s repeat n − 1 times nd (u, v ) fullling the cut property S:= S ∪ {v } T := T ∪ {(u, v )} a for S 6 c a 6 c 7 b 9 2 3 d 4 7 b 9 2 3 d 4 7 b 9 2 3 d 4 KIT Institut für Theoretische Informatik 8 Function of Edge // weitgehend analog zu Dijkstra s ∈V d = {∞, . . . , ∞}; parent[s]:= s ; d[s] := 0; Q .insert(s) while Q 6= 0/ do u := Q .deleteMin d[u]:= 0 T u // scan u S foreach edge e = (u, v ) ∈ E do if c(e) < d[v ] then // relax d[v ]:= c(e) parent[v ] := u // update tree if v ∈ Q then Q .decreaseKey(v ) T u v else Q .insert(v ) e S return {(v , parent[v ]) : v ∈ V \ {s}} jpMST : Set pick any I d[u] = 0 ⇔ u ∈ S I ⇒ am Ende jeder while-Iteration: endliches d[v ] > 0 speichert Gewicht der leichtesten Kante von v ∈/ S über den Schnitt KIT Institut für Theoretische Informatik 9 Analyse Praktisch identisch zu Dijkstra I O(m + n) I n× I O(m) × Zeit ausserhalb der PQ deleteMin (Zeit O(n log n)) decreaseKey O((m + n) log n) O(m + n log n) mit binären Heaps mit Fibonacci Heaps Wichtigster Unterschied: monotone PQs reichen nicht Warum? KIT Institut für Theoretische Informatik 10 Kruskals Algorithmus [1956] // subforest of the MST foreach (u, v ) ∈ E in ascending order of weight do if u and v are in different subtrees of (V , T ) then T := T ∪ {(u, v )} // Join two subtrees return T T := 0/ a 7 9 6 c 3 4 b 2 d 7 b 9 2 6 c 3 d 4 a 7 b 9 2 6 c 3 d 4 a 7 b 9 2 6 c 3 d 4 a KIT Institut für Theoretische Informatik 11 Kruskals Algorithmus Korrektheit // subforest of the MST foreach (u, v ) ∈ E in ascending order of weight do if u and v are in different subtrees of (V , T ) then T := T ∪ {(u, v )} // Join two subtrees return T T := 0/ Fall u, v in verschiedenen Teilbäumen: =⇒ (u, v ) ist leichteste =⇒ (u, v ) ∈ MST Kante im cut(Komponente(u), V Sonst: =⇒ (u, v ) ist schwerste =⇒ (u, v ) 6∈ MST benutze Schnitteigenschaft \ Komponente(u)) benutze Kreiseigenschaft Kante im Kreis hu, v , v u -Pfad in Ti KIT Institut für Theoretische Informatik 12 Union-Find Datenstruktur =⇒ Wir brauchen eine eziente Methode für Verbindet die Kante verschiedene Teilbäume? KIT Institut für Theoretische Informatik 13 Union-Find Datenstruktur =⇒ Wir brauchen eine eziente Methode für Verbindet die Kante verschiedene Teilbäume? Verwalte Partition der Menge 1..n, d. h., Mengen (Blöcke) M1 ,. . . ,Mk mit M1 ∪ · · · ∪ Mk = 1..n, ∀i 6= j : Mi ∩ Mj = 0/ Class UnionFind(n : N) Procedure union(i, j : 1..n) join the blocks containing i and j to a single block. Function nd(i : 1..n) : 1..n return a unique identier for the block containing i. KIT Institut für Theoretische Informatik 13 Union-Find Datenstruktur Erste Version KIT Institut für Theoretische Informatik 14 Union-Find Datenstruktur Erste Version KIT Institut für Theoretische Informatik 14 Union-Find Datenstruktur Erste Version Analyse +: union braucht konstante Zeit −: nd braucht Zeit Θ(n) im schlechtesten Fall! Zu langsam! Idee: nd-Pfade kurz halten i parent[i] .. KIT Institut für Theoretische Informatik 15 Pfadkompression Class UnionFind(n : N) parent=h1, 2, . . . , ni : Array [1..n] of 1..n Function nd(i : 1..n) : 1..n if parent[i] = i then return i else i 0 := nd(parent[i ]) parent[i] return i 0 := i 0 ... 1 2 n i’ // .. . parent[i] i KIT Institut für Theoretische Informatik 16 Union by Rank Class UnionFind(n : N) parent=h1, 2, . . . , ni : Array [1..n] of 1..n rank=h0, . . . , 0i ... 1 2 : Array [1..n] of 0.. log n n Procedure link(i, j : 1..n) assert i and j are representatives of different blocks if rank[i] < rank[j] then parent[i] := j i2 3 i 2 else parent[j] := i if rank[i] = rank[j] then rank[i]++ 2 j i j i 3 3 KIT Institut für Theoretische Informatik j j 17 Analyse nur Union by rank invariant Der Pfad zum Repr. x hat Länge höchstens rank[x] invariant x ist Repr. ⇒ x 's Menge hat Gröÿe mindestens 2rank[x] Korollar: nd braucht Zeit O(log n) i2 3 i 2 2 j i j i 3 3 j j KIT Institut für Theoretische Informatik 18 Analyse nur Pfadkompression Satz: nd braucht Beweis: im Buch Zeit O(log n) (amortisiert) KIT Institut für Theoretische Informatik 19 Analyse Pfadkompression + Union by rank Satz: m× nd + n× link brauchen Zeit O(mαT (m, n)) mit αT (m, n) = min {i ≥ 1 : A(i, dm/ne) ≥ log n} und A(1, j) = 2j for j ≥ 1, A(i, 1) = A(i − 1, 2) for i ≥ 2, and j ≥ 2. A(i, j) = A(i − 1, A(i, j − 1)) Beweis: for i ≥2 [Tarjan 1975, Seidel Sharir 2005] A ist die Ackermannfunktion und αT die inverse Ackermannfunktion. αT (m, n) = ω(1) aber ≤ 5 für alle physikalisch denkbaren n, m. KIT Institut für Theoretische Informatik 20 Ackermannfunktion Beispiele A(1, j) = 2j for j ≥ 1, A(i, 1) = A(i − 1, 2) for i ≥ 2, and j ≥ 2. A(i, j) = A(i − 1, A(i, j − 1)) A(2, 1) = A(1, 2) = for i ≥2 2 2 A(2, 2) = A(1, A(2, 1)) = A(2, 3) = A(1, A(2, 2)) = A(2, 4) = A(1, A(2, 3)) = 2 22 2 2 22 22 2 22 22 A(3, 1) = A(2, 2) = 2 A(3, 2) = A(2, A(3, 1)) = A(2, 16) = ??? A(4, 1) = A(3, 2) = ??? KIT Institut für Theoretische Informatik 21 Kruskal mit Union-Find Sei V = 1..n : UnionFind(n) // encodes components of forest T foreach (u, v ) ∈ E in ascending order of weight do // sort if Tc.nd(u) 6= Tc.nd(v ) then Tc {u, v } Tc.union(u, v ) output Zeit O(m log m). // link reicht auch Schneller für ganzzahlige Gewichte. Graphrepräsentation: Kantenliste Bäume im MSF ↔ Blöcke in Partition → Wurzelbäume, aber mit anderer Struktur als die Bäume im MSF! KIT Institut für Theoretische Informatik 22 Beispiel 7 2 9 2 3 6 3 4 4 7 2 9 2 3 6 3 4 4 7 2 9 2 3 6 3 4 4 7 2 9 2 3 6 3 4 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 0 0 0 1 1 0 0 1 1 0 0 2 1 0 0 2 1 link 1 link 1 link 1 compress KIT Institut für Theoretische Informatik 23 Vergleich Jarník-Prim ↔ Kruskal Pro Jarník-Prim I Asymptotisch gut für alle I Sehr schnell für m, n mn Pro Kruskal I Gut für m = O(n) I Braucht nur Kantenliste I Protiert von schnellen Sortierern (ganzzahlig, parallel,. . . ) I Verfeinerungen auch gut für groÿe m/n KIT Institut für Theoretische Informatik 24 Mehr MST-Algorithmen I Zeit O(m log n) [Boruvka 1926] Zutat vieler fortgeschrittener Algorithmen I Erwartete Zeit O(m) [Karger Klein Tarjan 1995], parallelisierbar, externalisierbar I Det. Zeit O(mαT (m, n)) I optimaler det. Algorithmus [Chazelle 2000] [Pettie, Ramachandran 2000] I Invented at ITI: Praktikabler externer Algorithmus [Sanders Schultes Sibeyn 2004] Verbesserung von Kruskal (parallelisierbar, weniger Sortieraufwand). [Osipov Sanders Singler 2009] KIT Institut für Theoretische Informatik 25 Zusammenfassung I Schnitt- und Kreiseigenschaft als Basis für abstrakte Algorithmen. Entwurfsprinzip: benutze abstrakte Problemeigenschaften. I Beweise mittels Austauschargumenten I Implementierung braucht eziente Datenstrukturen. Auch ein Entwurfsprinzip. . . KIT Institut für Theoretische Informatik 26 Zusammenfassung I Schnitt- und Kreiseigenschaft als Basis für abstrakte Algorithmen. Entwurfsprinzip: benutze abstrakte Problemeigenschaften. I Beweise mittels Austauschargumenten I Implementierung braucht eziente Datenstrukturen. Auch ein Entwurfsprinzip. . . I Dijkstra ≈ JP. Noch ein Entwurfsprinzip: Greedy-Algorithmus ezient implementiert mittels Prioritätsliste I Union-Find: eziente Verwaltung von Partitionen mittels Pfadkompression und Union-by-rank. Beispiel für einfache Algorithmen mit nichttrivialer Analyse KIT Institut für Theoretische Informatik 26