3.1 Konstruktion von minimalen Spannb¨ aumen
Es gibt zwei Prinzipien f¨ ur die Konstruktion von minimalen Spannb¨ aumen (Tarjan):
”blaue“ Regel
”rote“ Regel
EADS 3.1 Konstruktion von minimalen Spannb¨aumen 416/436
ľErnst W. Mayr
Satz 100
Sei G = (V, E) ein zusammenh¨ angender ungerichteter Graph, w : E →
Reine Gewichtsfunktion, C = (V
1, V
2) ein Schnitt (d.h.
V = V
1∪ V
2, V
1∩ V
2= ∅, V
16= ∅ 6= V
2). Sei weiter E
C= E ∩ (V
1× V
2) die Menge der Kanten
” ¨ uber den Schnitt hinweg“. Dann gilt: (
”blaue“ Regel)
1
Ist e ∈ E
Cdie
einzigeKante minimalen Gewichts (¨ uber alle Kanten in E
C), dann ist e in
jedemminimalen Spannbaum f¨ ur (G,w) enthalten.
2
Hat e ∈ E
Cminimales Gewicht (¨ uber alle Kanten in E
C), dann gibt es einen minimalen Spannbaum von (G,w), der e enth¨ alt.
EADS 3.1 Konstruktion von minimalen Spannb¨aumen 417/436
ľErnst W. Mayr
Beweis:
[durch Widerspruch]
1
Sei T ein minimaler Spannbaum von (G, w), sei e ∈ E
Cdie minimale Kante. Annahme: e / ∈ T . Da T Spannbaum
⇒ T ∩ E
C6= ∅.
Sei T ∩ E
C= {e
1, e
2, . . . , e
k}, k ≥ 1. Dann enth¨ alt T ∪ {e}
einen eindeutig bestimmten Kreis (den sogenannten durch e bzgl. T bestimmten Fundamentalkreis). Dieser Kreis muss mindestens eine Kante ∈ E
C∩ T enthalten, da die beiden Endpunkte von e auf verschiedenen Seiten des Schnitts C liegen.
EADS 3.1 Konstruktion von minimalen Spannb¨aumen 418/436
ľErnst W. Mayr
Beweis (Forts.):
r r r AA
AA AA
r r r jj
j e
e
0V
1V
2@@ r
H HH
@@ HH H
r
@@ r
r
r r AA
AA
AA AA
r r
j je0
e
T
Sei e
0∈ E
C∩ T . Dann gilt nach Voraussetzung w(e
0) > w(e). Also ist T
0:= T − {e
0} ∪ {e} ein Spannbaum von G, der echt kleineres Gewicht als T hat, Widerspruch zu
” T ist minimaler Spannbaum“.
EADS 3.1 Konstruktion von minimalen Spannb¨aumen 419/436
ľErnst W. Mayr
Beweis (Forts.):
2
Sei e ∈ E
Cminimal. Annahme: e kommt in
keinemminimalen Spannbaum vor. Sei T ein beliebiger minimaler Spannbaum von (G, w).
r r r
j r
j j
j r
r e
V
1V
2e /∈ T∩Ec 6=∅
e / ∈ T ∩ E
C6= ∅. Sei e
0∈ E
C∩ T eine Kante auf dem durch e bez¨ uglich T erzeugten Fundamentalkreis. Dann ist
T
0= T − {e
0} ∪ {e} wieder ein Spannbaum von G, und es ist w(T
0) ≤ w(T ). Also ist T
0minimaler Spannbaum und e ∈ T
0.
EADS 3.1 Konstruktion von minimalen Spannb¨aumen 420/436
ľErnst W. Mayr
Satz 101
Sei G = (V, E) ein ungerichteter, gewichteter,
zusammenh¨ angender Graph mit Gewichtsfunktion w : E →
R. Dann gilt: (
”rote“ Regel)
1
Gibt es zu e ∈ E einen Kreis C in G, der e enth¨ alt und w(e) > w(e
0) f¨ ur alle e
0∈ C \ {e} erf¨ ullt, dann kommt e in
keinemminimalen Spannbaum vor.
2
Ist C
1= e
1, . . . , e
kein Kreis in G und
w(e
i) = max{w(e
j); 1 ≤ j ≤ k}, dann gibt es einen minimalen Spannbaum, der e
inicht enth¨ alt.
EADS 3.1 Konstruktion von minimalen Spannb¨aumen 421/436
ľErnst W. Mayr
Beweis:
1
Nehmen wir an, dass es einen minimalen Spannbaum T gibt, der e = {v
1, v
2} enth¨ alt. Wenn wir e aus T entfernen, so zerf¨ allt T in zwei nicht zusammenh¨ angende Teilb¨ aume T
1und T
2mit v
i∈ T
i, i = 1, 2. Da aber e auf einem Kreis in G liegt, muss es einen Weg von v
1nach v
2geben, der e nicht ben¨ utzt.
Mithin gibt es eine Kante e ˆ 6= e auf diesem Weg, die einen Knoten in T
1mit T
2verbindet. Verbinden wir T
1und T
2entlang ˆ e, so erhalten wir einen von T verschiedenen Spannbaum T ˆ . Wegen w(ˆ e) < w(e) folgt w( ˆ T ) < w(T ), im Widerspruch zur Minimalit¨ at von T .
EADS 3.1 Konstruktion von minimalen Spannb¨aumen 422/436
ľErnst W. Mayr
Beweis (Forts.):
2
Wir nehmen an, e
iliege in jedem minimalen Spannbaum (MSB) von G, und zeigen die Behauptung durch Widerspruch.
Sei T ein beliebiger MSB von G. Entfernen wir e
iaus T , so zerf¨ allt T in zwei nicht zusammenh¨ angende Teilb¨ aume T
1und T
2. Da e
iauf einem Kreis C
1= e
1, . . . , e
kin G liegt, k¨ onnen wir wie zuvor e
idurch eine Kante e
jdes Kreises C
1ersetzen, die T
1und T
2verbindet. Dadurch erhalten wir einen von T verschiedenen Spannbaum T ˜ , der e
inicht enth¨ alt. Da nach Voraussetzung w(e
j) ≤ w(e
i) gilt, folgt w( ˜ T ) ≤ w(T ) (und sogar w( ˜ T ) = w(T ), da T nach Annahme ein MSB ist). Also ist T ˜ ein MSB von G, der e
inicht enth¨ alt, im Widerspruch zur Annahme, e
iliege in jedem MSB von G.
EADS 3.1 Konstruktion von minimalen Spannb¨aumen 423/436
ľErnst W. Mayr
Literatur
Robert E. Tarjan:
Data Structures and Network Algorithms
SIAM CBMS-NSF Regional Conference Series in Applied Mathematics Bd. 44 (1983)
EADS 3.1 Konstruktion von minimalen Spannb¨aumen 424/436
ľErnst W. Mayr
3.2 Generischer minimaler Spannbaum-Algorithmus
Initialisiere Wald F von B¨ aumen, jeder Baum ist ein singul¨ arer Knoten
(jedes v ∈ V bildet einen Baum)
while Wald F mehr als einen Baum enth¨ alt do w¨ ahle einen Baum T ∈ F aus
bestimme eine leichteste Kante e = {v, w}
ausT heraussei v ∈ T , w ∈ T
0vereinige T und T
0, f¨ uge e zum minimalen Spannbaum hinzu od
EADS 3.2 Generischer minimaler Spannbaum-Algorithmus 425/436
ľErnst W. Mayr
Generischer MST-Algorithmus
"!
# q q
"!
# q q
q q
"!
# q q qq
"!
# q
q HH q q
T T
0T
00T
000V
1V
2Wald F
EADS 3.2 Generischer minimaler Spannbaum-Algorithmus 426/436
ľErnst W. Mayr
3.3 Kruskals Algorithmus
algorithm Kruskal (G, w) :=
sortiere die Kanten nach aufsteigendem Gewicht in eine Liste L initialisiere Wald F = {T
i, i = 1, . . . , n}, mit T
i= {v
i}
MSB:=∅
for i := 1 to length(L) do {v, w} := L
ix := Baum ∈ F , der v enth¨ alt; co x :=Find(v) oc y := Baum ∈ F , der w enth¨ alt; co y :=Find(w) oc if x 6= y then
MSB:=MSB ∪ {{v, w}}
Union(x, y) co gewichtete Vereinigung oc fi
od
EADS 3.3 Kruskals Algorithmus 427/436
ľErnst W. Mayr
Korrektheit: Falls die Gewichte eindeutig sind (w(·) injektiv), folgt die Korrektheit direkt mit Hilfe der “blauen“ und “roten“ Regel.
Ansonsten Induktion ¨ uber die Anzahl |V | der Knoten:
Ind. Anfang: |V | klein: √
Sei r ∈
R,E
r:= {e ∈ E; w(e) < r}.
Es gen¨ ugt zu zeigen:
Sei T
1, . . . , T
kein minimaler Spannwald f¨ ur G
r:= {V, E
r} (d.h., wir betrachten nur Kanten mit Gewicht < r). Sei weiter T ein MSB von G, dann gilt die
Hilfsbehauptung: Die Knotenmenge eines jeden T
iinduziert in T einen zusammenh¨ angenden Teilbaum, dessen Kanten alle Gewicht
< r haben.
EADS 3.3 Kruskals Algorithmus 428/436
ľErnst W. Mayr
Beweis der Hilfsbehauptung:
Sei T
i=: (V
i, E
i). Wir m¨ ussen zeigen, dass V
iin T einen zusammenh¨ angenden Teilbaum induziert. Seien u, v ∈ V
izwei Knoten, die in T
idurch eine Kante e verbunden sind. Falls der Pfad in T zwischen u und v auch Knoten 6∈ V
ienth¨ alt (also der von V
iinduzierte Teilgraph von T nicht zusammenh¨ angend ist), dann enth¨ alt der in T durch Hinzuf¨ ugen der Kante e entstehende Fundamentalkreis notwendigerweise auch Kanten aus E \ E
rund ist damit gem¨ aß der “roten“ Regel nicht minimal! Da T
izusammenh¨ angend ist, folgt damit, dass je zwei Knoten aus V
iin T immer durch einen Pfad verbunden sind, der nur Kanten aus E
renth¨ alt.
EADS 3.3 Kruskals Algorithmus 429/436
ľErnst W. Mayr
Zeitkomplexit¨ at: (mit n = |V |, m = |E|)
Sortieren m log m = O(m log n) O(m) Find-Operationen O(m log n)
n − 1 Unions O(n log n)
Satz 102
Kruskal’s MSB-Algorithmus hat die Zeitkomplexit¨ at O((m + n) log n).
Beweis:
s.o.
EADS 3.3 Kruskals Algorithmus 430/436
ľErnst W. Mayr
Beispiel 103 (Kruskals Algorithmus)
1 2
10 9 7
8 4
8 11
7 6
2
4 14
1 2
3
4 5
6 8 7
h h
h
h h
h h h
t
t t
t
t t
t t
t
⇓ minimaler Spannbaum
1 2
10 9 7
8 4
8 11
7 6
2
4 14
t
t t
t
t t
t t
t
EADS 3.3 Kruskals Algorithmus 431/436
ľErnst W. Mayr
3.4 Prim’s Algorithmus
algorithm PRIM-MSB (G, w) :=
initialisiere Priority Queue PQ mit Knotenmenge V und Schl¨ ussel +∞, ∀v ∈ V
w¨ ahle Knoten r als Wurzel (beliebig) Schl¨ ussel k[r] := 0
Vorg¨ anger[r] := nil while P Q 6= ∅ do
u := ExtractMin(P Q)
for alle Knoten v, die in G zu u benachbart sind do if v ∈ P Q and w({u, v}) < k[v] then
Vorg¨ anger[v] := u k[v] := w({u, v}) fi
od od
EADS 3.4 Prim’s Algorithmus 432/436
ľErnst W. Mayr
Beispiel 104 (Prim’s Algorithmus)
1 2
10 9 7
8 4
8 11
7 6
2
4 14
Ausgangszustand:
alle Schl¨ussel = +∞
aktueller Knoten u: it Startknoten: r(=v0)
2 0
+∞ +∞ +∞
+∞
+∞
+∞
+∞
t +∞
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
EADS 433/436
ľErnst W. Mayr
Beispiel 104 (Prim’s Algorithmus)
1 2
10 9 7
8 4
8 11
7 6
2
4 14
Ausgangszustand:
alle Schl¨ussel = +∞
aktueller Knoten u: it Startknoten: r(=v0)
2 0
+∞ +∞ +∞
+∞
+∞
+∞
+∞
t +∞
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
1 2
10 9 7
8 4
8 11
7 6
2
4 14
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v1= 8, v7= 4)
8 +∞ +∞
+∞
+∞
4 +∞
i +∞
2 t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
EADS 433/436
ľErnst W. Mayr
Beispiel 104 (Prim’s Algorithmus)
1 2
10 9 7
8 4
8 11
7 6
2
4 14
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v1= 8, v7= 4)
8 +∞ +∞
+∞
+∞
4 +∞
i +∞
2 t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
1 2
10 9 7
8
8 11
7 6
2
4 14
1 suche u := FindMin(P Q)
und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v6= 8)
8 +∞ +∞
+∞
8 +∞
+∞
i
2 t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
EADS 433/436
ľErnst W. Mayr
Beispiel 104 (Prim’s Algorithmus)
1 2
10 9 7
8
8 11
7 6
2
4 14
1 suche u := FindMin(P Q)
und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v6= 8)
8 +∞ +∞
+∞
8 +∞
+∞
i
2 t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
1 2
10 9 7
8 11
7 6
2
4 14
1
2
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v3= 4, v5= 7, v8= 2)
8 +∞ 4
+∞
7
2
i
2 t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
EADS 433/436
ľErnst W. Mayr
Beispiel 104 (Prim’s Algorithmus)
1 2
10 9 7
8 11
7 6
2
4 14
1
2
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v3= 4, v5= 7, v8= 2)
8 +∞ 4
+∞
7
2
i
2 t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
1 2
10 9 7
8 11
7 6 4 14
1
2
3 suche u := FindMin(P Q)
und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v1= 7, v2= 6)
7 6 4
+∞
7
i
2 t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
EADS 433/436
ľErnst W. Mayr
Beispiel 104 (Prim’s Algorithmus)
1 2
10 9 7
8 11
7 6 4 14
1
2
3 suche u := FindMin(P Q)
und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v1= 7, v2= 6)
7 6 4
+∞
7
i
2 t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
1 2
10 9 7
8 11
7 6
14 1
2 3
4
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v2= 2, v4= 10)
7 2
10 7
i t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
EADS 433/436
ľErnst W. Mayr
Beispiel 104 (Prim’s Algorithmus)
1 2
10 9 7
8 11
7 6
14 1
2 3
4
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v2= 2, v4= 10)
7 2
10 7
i t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
1
10 9 7
8 11
7 6
14 1
2 3
4
5
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v1= 1) 1
10 7
i t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
EADS 433/436
ľErnst W. Mayr
Beispiel 104 (Prim’s Algorithmus)
1
10 9 7
8 11
7 6
14 1
2 3
4
5
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v1= 1) 1
10 7
i t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
10 9 7
8 11
7 6
14 1
2 3
4
5 6
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
solche Nachbarn existieren nicht
10 7
i t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
EADS 433/436
ľErnst W. Mayr
Beispiel 104 (Prim’s Algorithmus)
10 9 7
8 11
7 6
14 1
2 3
4
5 6
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
solche Nachbarn existieren nicht
10 7
i t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
10 9
8 11
7 6
14 1
2 3
4
5 6
7
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v4= 9) 9
i
t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
EADS 433/436
ľErnst W. Mayr
Beispiel 104 (Prim’s Algorithmus)
10 9
8 11
7 6
14 1
2 3
4
5 6
7
suche u := FindMin(P Q) und entferneuausP Q setze Schl¨ussel der Nach- barn inP Qmit
w({u, v})<Schl¨ussel[v]:
(v4= 9) 9
i
t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
8 10 11
7 6
14 1
2 3
4
5 6
7
8 Endzustand:
suche u := FindMin(P Q) und entferneuausP Q, damit ist P Q leer und der Algorithmus beendet i
t
t t
t
t t
t t
v0 t
v1 v2 v3
v4 v5
v6
v7
v8
EADS 3.4 Prim’s Algorithmus 433/436
ľErnst W. Mayr
Korrektheit: ist klar.
Zeitkomplexit¨ at:
n ExtractMin
O(m) sonstige Operationen inclusive DecreaseKey
Implementierung der Priority Queue mittels Fibonacci-Heaps:
Initialisierung O(n)
ExtractMins O(n log n) (≤ n St¨ uck) DecreaseKeys O(m) (≤ m St¨ uck) Sonstiger Overhead O(m)
EADS 3.4 Prim’s Algorithmus 434/436
ľErnst W. Mayr
Satz 105
Sei G = (V, E) ein ungerichteter Graph (zusammenh¨ angend, einfach) mit Kantengewichten w. Prim’s Algorithmus berechnet, wenn mit Fibonacci-Heaps implementiert, einen minimalen Spannbaum von (G, w) in Zeit O(m + n log n) (wobei n = |V |, m = |E|). Dies ist f¨ ur m = Ω(n log n) asymptotisch optimal.
Beweis:
s.o.
EADS 3.4 Prim’s Algorithmus 435/436
ľErnst W. Mayr
EADS 3.4 Prim’s Algorithmus 436/436 ľErnst W. Mayr