Algorithmus von Kruskal, disjunkte Vereinigungsmengen

Werbung
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
Herunterladen