Algorithmus von Kruskal – Idee (1) Kruskals Algorithmus berechnet minimale Spannbäume, allerdings mit anderer Strategie als Prims Algorithmus. Kruskals Algorithmus erweitert sukzessive Kantenmenge A zu einem Spannbaum. Zu jedem Zeitpunkt besteht G A = (V, A ) aus einer Menge von Bäumen. Eine Kante minimalen Gewichts, die in G A keinen Kreis erzeugt, wird zu A in jedem Schritt hinzu gefügt. SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 1 Algorithmus von Kruskal – Idee (2) Solch eine Kante muss zwei Bäume in G A verbinden. Korrektheit folgt dann aus Satz 16.5 und Korollar 16.6. SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 2 Charakterisierung sicherer Kanten Satz 16.5: Sei (G,w), G=(V,E) ein gewichteter ungerichteter Graph. Die Kantenmenge A ⊆ E sei in einem minimalen Spannbaum von (G,w) enthalten. Weiter sei (C,V-C) ein mit A verträglicher Schnitt und (u, v ) sei eine leichte (C,V-C) kreuzende Kante. Dann ist (u, v ) eine A-sicher Kante. Korollar 16.6: Sei (G,w), G=(V,E), ein gewichteter ungerichteter Graph. Die Kantenmenge A ⊆ E sei in einem minimalen Spannbaum von (G,w) enthalten. Ist (u, v ) eine Kante minimalen Gewichts, die eine Zusammenhangskomponente C von GA = (V, A ) mit dem Rest des Graphen G A verbindet, dann ist (u, v ) eine A-sichere Kante. SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 3 Algorithmus von Kruskal - Datenstruktur Kruskals Algorithmus benötigt Datenstruktur mit deren Hilfe 1. Für jede Kante (u, v ) ∈ E effizient entschieden werden kann, ob u und v in derselben ZusamMenhangskomponente von G A liegen. 2. Zusammenhangskomponenten effizient verschmolzen werden können. Solch eine Datenstruktur ist Union-Find-Datenstruktur für disjunkte dynamische Mengen. SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 4 Disjunkte dynamische Mengen (1) Gegeben ist eine Menge U von Objekten. Verwaltet wird immer eine Familie {S1, S 2 ,K, Sk } von disjunkten Teilmengen von U. Teilmengen Si werden identifiziert mit Hilfe eines Elements aus Si , einem so genannten Repräsentanten. SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 5 Disjunkte dynamische Mengen (2) Die folgenden Operationen sollen unterstützt werden: 1. Make-Set(x). erzeugt Teilmenge {x} mit Repräsentant x. 2. Union(x,y): vereinigt die beiden Teilmengen, die x bzw, y enthalten. 3. Find-Set(x): liefert den Repräsentanten derjenigen Menge, die x enthält. SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 6 Union-Find mit verketteten Listen Realisierung einer Datenstruktur für disjunkte dynamische Menge kann mit verketteten Listen erfolgen: 1. Für jede Teilmenge S gibt es eine verkettete Liste der Objekte in S. 2. Repräsentant ist dabei das erste Objekt der Liste. 3. Feld size[r ] eines jeden Repräsentanten r speichert die Größe seiner Liste. 4. Für jedes Element x der Liste Verweis rep[x ] auf Repräsentanten der Liste. SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 7 Union-Find mit verketteten Listen - Illustration c h e b / Repräsentant der Menge • speichert in „size“ die Kardinalität der Menge SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 8 Operationen Make-Set und Find-Set Make-Set: Erzeugen einer 1-elementigen Liste möglich in Zeit O (1). Find-Set(x): Ausgabe des Repräsentaten rep[x ] möglich in Zeit O (1) Make - Set (x ) 1. rep[ x ] ← x Find - Set (x ) 1. return rep[ x ] 2. next[ x ] ← nil 3. size[x] ← 1 SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 9 Operation Union Union(x,y): S x enthalte x und S x enthalte y. 1. Bestimmen, welche der Listen kürzer ist. 2. Füge kürzere Liste an 2. Position der längeren Liste ein. 3. Ersetze Repräsentanten für die Elemente der kürzeren Liste. Lemma 16.8: Die Operation Union kann in Zeit proportional zur Länge der kürzeren Liste durchgeführt werden. SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 10 Operation Union (Pseudo-Code) Union(x, y ) 1. a ← Find - Set( x ) 2. b ← Find - Set( y ) 3. if size[a] < size[b] 4. then a ↔ b 5. size[a] ← size[a] + size[b] 6. c ← next[a] 7. next[a] ← b 8. while next[b] ≠ nil 9. do rep[b] ← a 10. b ← next[b] 11. rep[b] ← a 12. next[b] ← c SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 11 Analyse vieler Operationen Satz 16.8: Werden verkettete Listen als Union-FindDatenstruktur benutzt und werden insgesamt m Operationen Make-Set, Find-Set und Union ausgeführt, von denen n Operationen Make-Set Operationen sind, so können alle Operationen zusammen in Zeit O (m + n log(n)) ausgeführt werden. SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 12 Kruskals Algorithmus und Union-Find Benutzen Union-Find-Datenstruktur, um Zusammenhangskomponenenten von G A = (V, A ) zu verwalten. Test, ob (u,v) zwei verschiedene Zusammenhangskomponenten verbindet durch Test, ob Find-Set(u)=Find-Set(v). Verschmelzen von Zusammenhangskomponenenten durch Union. SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 13 Algorithmus von Kruskal - Pseudocode Kruskal − MST(G, w ) 1 A ←{ } 2 for alle v ∈ V 3 do Make - Set (v ) 4 Sortiere die Kanten von G nach aufsteigen dem Gewicht. 5 for alle Kante (u, v) von G in der Reihenfolge aufsteigenden Gewichts 6 do if Find - Set (u) ≠ Find - Set (v ) 7 then A ← A ∪ {(u, v )} 8 Union(u, v ) 9 return A SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 14 Algorithmus von Kruskal – Illustration (1) 8 7 b c 4 a d 9 2 4 i 11 e 14 6 7 8 10 h g 1 2 8 7 b c 4 a f d 9 2 4 i 11 14 e 6 7 8 10 h g 1 SS 2006 f 2 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 15 Algorithmus von Kruskal – Illustration (2) 8 7 b c 4 a d 9 2 4 i 11 e 14 6 7 8 10 h g 1 2 8 7 b c 4 a f d 9 2 4 i 11 14 e 6 7 8 10 h g 1 SS 2006 f 2 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 16 Algorithmus von Kruskal – Illustration (3) 8 7 b c 4 a d 9 2 4 i 11 e 14 6 7 8 10 h g f 1 2 8 7 b c 4 a d 9 2 4 i 11 14 e 6 7 8 10 h g 1 SS 2006 f 2 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 17 Algorithmus von Kruskal – Illustration (4) 8 7 b c 4 a d 9 2 4 i 11 e 14 6 7 8 10 h g 1 2 8 7 b c 4 a f d 9 2 4 i 11 14 e 6 7 8 10 h g 1 SS 2006 f 2 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 18 Algorithmus von Kruskal – Illustration (5) 8 7 b c 4 a d 9 2 4 i 11 14 e 6 7 8 10 h g 1 SS 2006 f 2 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 19 Laufzeitanalyse von Kruskals Algorithmus Satz 16.9: Werden verkettete Listen als Union-FindDatenstruktur benutzt, so ist die Laufzeit von Kruskals Algorithmus O ( V log( V ) + E log(E )). SS 2006 Datenstrukturen und Algorithmen 16. Minimale Spannbäume 20