Minimale Spannbäume, Algorithmus von Prim

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