16. Minimale Spannbäume Definition 16.1: 1. Ein gewichteter ungerichteter Graph (G,w) ist ein ungerichteter Graph G=(V,E) zusammen mit einer Gewichtsfunktion w : E → R . 2. Ist H=(U,F), U ⊆ V, F ⊆ E , ein Teilgraph von G, so ist das Gewicht w(H) von H definiert als w (H) = ∑ w (e ) e∈F SS 2006 Datenstrukturen und Algorithmen 16.Minimale Spannbäume 1 Minimale Spannbäume - Definition Definition 16.2: 1. Ein Teilgraph H eines ungerichteten Graphen G heisst Spannbaum von G, wenn H ein Baum auf den Knoten von G ist. 2. Ein Spannbaum S eines gewichteten ungerichteten Graphen G heisst minimaler Spannbaum von G, wenn S minimales Gewicht unter allen Spannbäumen von G besitzt. SS 2006 Datenstrukturen und Algorithmen 16.Minimale Spannbäume 2 Illustration von minimalen Spannbäumen (1) a 2 3 b 2 c a 1 2 b 3 d 1 c d 4 Graph G=(V,E) a 3 Spannbaum für G (minimal) b 2 a 2 1 b 2 3 c d c Spannbaum für G (minimal) SS 2006 d Spannbaum für G (nicht minimal) Datenstrukturen und Algorithmen 16.Minimale Spannbäume 3 Illustration von minimalen Spannbäumen (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 4 Berechnung minimaler Spannbäume Ziel: Gegeben ein gewichteter ungerichteter Graph (G,w), G=(V,E). Wollen effizient einen minimalen Spannbaum von (G,w) finden. Vorgehensweise: Erweitern sukzessive eine Kantenmenge A ⊆ E zu einem minimalen Spannbaum 1. Zu Beginn A = { }. 2. Ersetzen in jedem Schritt A durch A ∪ {(u, v )}, wobei (u, v ) eine A-sichere Kante ist. 3. Solange bis A = V − 1 Definition 16.3: (u, v ) heisst A-sicher, wenn mit A auch A ∪ {(u, v )} zu einem minimalen Spannbaum erweitert werden kann. SS 2006 Datenstrukturen und Algorithmen 16.Minimale Spannbäume 5 Generischer MST-Algorithmus Generic − MST(G, w ) 1 A ←{ } 2 while A ist noch keine Spannbaum 3 do Finde eine A - sichere Kante (u, v ) 4 A ← A ∪ {(u, v )} 5 return A SS 2006 Datenstrukturen und Algorithmen 16.Minimale Spannbäume 6 Schnitte in Graphen Definition 16.4: 1. Ein Schnitt (C,V-C) in einem Graphen G=(V,E) ist eine Partition der Knotenmenge V des Graphen. 2. Eine Kante von G kreuzt einen Schnitt (C,V-C), wenn ein Knoten der Kante in C und der andere Knoten in V-C liegt. 3. Ein Schnitt (C,V-C) ist mit einer Teilmenge A ⊆ E verträglich, wenn kein Element von A den Schnitt kreuzt. 4. Eine (C,V-C) kreuzende Kante heisst leicht, wenn sie eine Kante minimalen Gewichts unter den (C,V-C) kreuzenden Kanten ist. SS 2006 Datenstrukturen und Algorithmen 16.Minimale Spannbäume 7 Schnitt in einem Graphen (1) 8 7 b c 4 S a d 9 2 4 i 11 14 e S 6 V-S 7 8 10 h g 1 f V-S 2 Schnittkanten SS 2006 Datenstrukturen und Algorithmen 16.Minimale Spannbäume 8 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-sichere 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 9 Beweis des Satzes - Illustration x p y u Knoten in C Kanten in A SS 2006 v Datenstrukturen und Algorithmen 16.Minimale Spannbäume 10 Algorithmus von Prim - Idee Zu jedem Zeitpunkt des Algorithmus besteht der Graph GA = (V, A ) aus einem Baum TA und einer Menge von isolierten Knoten IA . Eine Kante minimalen Gewichts, die einen Knoten in IA mit TA verbindet, wird zu A hinzugefügt. Die Knoten in IA sind in einem min-Heap organisiert. Dabei ist der Schlüssel key[v] eines Knoten v ∈ IA gegeben durch das minimale Gewicht einer Kante, die v mit TA verbindet. SS 2006 Datenstrukturen und Algorithmen 16.Minimale Spannbäume 11 Algorithmus von Prim - Pseudocode Pr im − MST(G, w, r ) 1 for alle v ∈ V 2 do key[v ] ← ∞ 3 π[v ] ← NIL 4 key[r ] ← 0 5 Q ← Build - Min - Heap(V ) 6 while Q ≠ { } 7 do u ← Extract - Min(Q ) 8 for alle v ∈ Adj[u] 9 do if v ∈ Q ∧ w (u, v ) < key[v ] 10 then π[v ] ← u 11 key[v ] ← w (u, v ) 12 Heap - Decrease - Key (Q, v, key[v ]) SS 2006 Datenstrukturen und Algorithmen 16.Minimale Spannbäume 12 Heap-Decrease-Key Heap-Decrease-Key (H, v, key[v ]) ersetzt aktuellen Schlüssel von v durch neuen Wert key[v ]. Dabei muss der neue Schlüssel kleiner als der alte Schlüssel sein. Kann bei einem Heap mit n Elementen in Zeit O (log(n)) ausgeführt werden. SS 2006 Datenstrukturen und Algorithmen 16.Minimale Spannbäume 13 Algorithmus von Prim – 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 14 Algorithmus von Prim – 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 15 Algorithmus von Prim – Illustration (3) 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 Prim – 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 17 Algorithmus von Prim – 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 18 Algorithmus von Prim – Laufzeit Zeile 7 pro Durchlauf O (log( V )), wird V -mal durchlaufen. Zeilen 8-12 pro Durchlauf O (log( V )) (für HeapDecrease-Key). Zeilen 9-12 2 E -mal durchlaufen, da Größe aller Adjazenzlisten zusammen genau 2 E . Satz 16.7: Der Algorithmus von Prim berechnet in Zeit O ( V log( V ) + E log( V )) einen minimalen Spannbaum eines gewichteten ungerichteten Graphen (G,w), G=(V,E). Mit Fibonacci-Heaps Verbesserung auf O ( V log( V ) + E ) möglich. SS 2006 Datenstrukturen und Algorithmen 16.Minimale Spannbäume 19