Algorithmus von Prim

Werbung
15. Minimale Spannbäume
Definition 15.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
∈F
SS 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
1
Minimale Spannbäume - Definition
Definition 15.2:
1. Ein Teilgraph H eines ungerichteten Graphen G
heißt Spannbaum von G, wenn H ein Baum auf
den Knoten von G ist.
2. Ein Spannbaum S eines gewichteten ungerichteten
Graphen G heißt minimaler Spannbaum von G,
wenn S minimales Gewicht unter allen
Spannbäumen von G besitzt.
SS 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
2
Berechnung minimaler Spannbäume
Ziel: Gegeben ein gewichteter ungerichteter Graph (G,w),
G=(V,E). Wollen effizient einen minimalen Spannbaum von
(G,w) finde.
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 15.3: (u, v ) heißt A-sicher, wenn mit A auch
A ∪ {(u, v )} zu einem minimalen Spannbaum erweitert
werden kann.
SS 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
3
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 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
4
Schnitte in Graphen
Definition 15.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 heißt leicht, wenn
sie eine Kante minimalen Gewichts unter den
(C,V-C) kreuzenden Kanten ist.
SS 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
5
Schnitt in einem Graphen (1)
b
4
S
V-S
8
d
2
11
a
c
7
i
7
8
h
4
6
14
9
e
10
1
g
2
f
S
V-S
Schnittkanten
SS 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
6
Charakterisierung sicherer Kanten
Satz 15.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 15.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 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
7
Beweis des Satzes - Illustration
x
p
y
u
Knoten in C
Kanten in A
SS 2008
v
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
8
Algorithmus von Prim - Idee
Zu jedem Zeitpunkt des Algorithmus besteht der Graph
G A = (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 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
9
Algorithmus von Prim - Pseudocode
Pr im − MST (G, w, r )
1 for all v ∈ V
2
do key[v ] ← ∞
π [v ] ← NIL
3
4 key[r ] ← 0
5 Q ← Build - Min - Heap (V )
6 while Q ≠ { }
7
do u ← Extract - Min (Q )
8
for all v ∈ Adj[u ]
9
do if v ∈ Q ∧ w (u, v ) < key [v ]
10
then π [v ] ← u
11
key[v ] ← w (u, v )
12
Decrease - Key(Q, v, key[v ])
SS 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
10
Heap-Decrease-Key
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 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
11
Algorithmus von Prim – Illustration (1)
4
8
b
h
i
7
h
SS 2008
g
c
2
7
f
d
2
8
e
10
8
b
9
14
6
1
11
a
d
4
i
7
8
4
7
2
11
a
c
4
14
6
9
e
10
1
g
2
f
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
12
Algorithmus von Prim – Illustration (2)
4
8
b
h
i
7
h
SS 2008
g
c
2
7
f
d
2
8
e
10
8
b
9
14
6
1
11
a
d
4
i
7
8
4
7
2
11
a
c
4
14
6
9
e
10
1
g
2
f
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
13
Algorithmus von Prim – Illustration (3)
4
8
b
h
i
7
h
SS 2008
g
c
2
7
f
d
2
8
e
10
8
b
9
14
6
1
11
a
d
4
i
7
8
4
7
2
11
a
c
4
14
6
9
e
10
1
g
2
f
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
14
Algorithmus von Prim – Illustration (4)
4
8
b
h
i
7
h
SS 2008
g
c
2
7
f
d
2
8
e
10
8
b
9
14
6
1
11
a
d
4
i
7
8
4
7
2
11
a
c
4
14
6
9
e
10
1
g
2
f
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
15
Algorithmus von Prim – Illustration (5)
4
c
7
d
2
11
a
i
7
8
h
SS 2008
8
b
4
14
6
9
e
10
1
g
2
f
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
16
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 15.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 2008
Datenstrukturen und Algorithmen
15.Minimale Spannbäume
17
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 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
18
Algorithmus von Kruskal – Idee (2)
Solch eine Kante muss zwei Bäume in GA
verbinden.
Korrektheit folgt dann aus Satz 15.5 und
Korollar 15.6.
SS 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
19
Charakterisierung sicherer Kanten
Satz 15.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 15.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 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
20
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 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
21
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 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
22
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 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
23
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
S der Objekte in S.
2. Repräsentant ist dabei das erste Objekt der Liste.
3. Zusätzlich head [S ] und tail [S ] Verweise auf erstes
bzw. letztes Element der Liste. Feld size [S ]
speichert Größe der Liste.
4. Für jedes Element x der Liste Verweis rep [x ] auf
Repräsentanten der Liste.
SS 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
24
Union-Find mit verketteten Listen - Illustration
c
h
head
e
b
/
tail
SS 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
25
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)
SS 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
26
Operation Union
Union(x,y):
Sx enthalte x und Sy enthalte y.
1. Bestimmen, welche der Listen kürzer ist.
2. Hänge kürzere Liste an längere Liste.
3. Ersetze Repräsentanten für die Elemente der
kürzeren Liste.
Lemma 15.8: Die Operation Union kann in Zeit
proportional zur Länge der kürzeren Liste durchgeführt werden.
SS 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
27
Analyse vieler Operationen
Satz 15.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 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
28
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 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
29
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 Reihenfolg e aufsteigen den
Gewichts
6
do if Find - Set (u) ≠ Find - Set (v )
7
then A ← A ∪ {(u, v )}
8
Union(u, v )
9 return A
SS 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
30
Algorithmus von Kruskal – Illustration (1)
4
8
b
h
i
7
h
SS 2008
g
c
2
7
f
d
2
8
e
10
8
b
9
14
6
1
11
a
d
4
i
7
8
4
7
2
11
a
c
4
14
6
9
e
10
1
g
2
f
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
31
Algorithmus von Kruskal – Illustration (2)
4
8
b
h
i
7
h
SS 2008
g
c
2
7
f
d
2
8
e
10
8
b
9
14
6
1
11
a
d
4
i
7
8
4
7
2
11
a
c
4
14
6
9
e
10
1
g
2
f
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
32
Algorithmus von Kruskal – Illustration (3)
8
b
4
g
8
c
f
2
7
d
2
11
i
7
h
e
10
1
b
8
SS 2008
9
14
6
7
h
a
d
4
i
8
4
c
2
11
a
7
4
14
6
9
e
10
1
g
2
f
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
33
Algorithmus von Kruskal – Illustration (4)
8
b
4
h
i
7
h
SS 2008
g
c
f
2
7
d
2
8
e
10
8
b
9
14
6
1
11
a
4
i
7
8
4
d
2
11
a
c
7
4
14
6
9
e
10
1
g
2
f
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
34
Laufzeitanalyse von Kruskals Algorithmus
Satz 15.9: Werden verkettete Listen als Union-FindDatenstruktur benutzt, so ist die Laufzeit von
Kruskals Algorithmus O ( V log( V ) + E log(E )).
SS 2008
Datenstrukturen und Algorithmen
15. Minimale Spannbäume
35
Herunterladen