• Keine Ergebnisse gefunden

3.1 Konstruktion von minimalen Spannb¨aumen

N/A
N/A
Protected

Academic year: 2021

Aktie "3.1 Konstruktion von minimalen Spannb¨aumen"

Copied!
30
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

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

(2)

Satz 100

Sei G = (V, E) ein zusammenh¨ angender ungerichteter Graph, w : E →

R

eine Gewichtsfunktion, C = (V

1

, V

2

) ein Schnitt (d.h.

V = V

1

∪ V

2

, V

1

∩ V

2

= ∅, V

1

6= ∅ 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

C

die

einzige

Kante minimalen Gewichts (¨ uber alle Kanten in E

C

), dann ist e in

jedem

minimalen Spannbaum f¨ ur (G,w) enthalten.

2

Hat e ∈ E

C

minimales 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

(3)

Beweis:

[durch Widerspruch]

1

Sei T ein minimaler Spannbaum von (G, w), sei e ∈ E

C

die minimale Kante. Annahme: e / ∈ T . Da T Spannbaum

⇒ T ∩ E

C

6= ∅.

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

(4)

Beweis (Forts.):

r r r AA

AA AA

r r r jj

j e

e

0

V

1

V

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

(5)

Beweis (Forts.):

2

Sei e ∈ E

C

minimal. Annahme: e kommt in

keinem

minimalen Spannbaum vor. Sei T ein beliebiger minimaler Spannbaum von (G, w).

r r r

j r

j j

j r

r e

V

1

V

2

e /∈ T∩Ec 6=∅

e / ∈ T ∩ E

C

6= ∅. 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

0

minimaler Spannbaum und e ∈ T

0

.

EADS 3.1 Konstruktion von minimalen Spannb¨aumen 420/436

ľErnst W. Mayr

(6)

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

keinem

minimalen Spannbaum vor.

2

Ist C

1

= e

1

, . . . , e

k

ein Kreis in G und

w(e

i

) = max{w(e

j

); 1 ≤ j ≤ k}, dann gibt es einen minimalen Spannbaum, der e

i

nicht enth¨ alt.

EADS 3.1 Konstruktion von minimalen Spannb¨aumen 421/436

ľErnst W. Mayr

(7)

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

1

und T

2

mit v

i

∈ T

i

, i = 1, 2. Da aber e auf einem Kreis in G liegt, muss es einen Weg von v

1

nach v

2

geben, der e nicht ben¨ utzt.

Mithin gibt es eine Kante e ˆ 6= e auf diesem Weg, die einen Knoten in T

1

mit T

2

verbindet. Verbinden wir T

1

und T

2

entlang ˆ 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

(8)

Beweis (Forts.):

2

Wir nehmen an, e

i

liege in jedem minimalen Spannbaum (MSB) von G, und zeigen die Behauptung durch Widerspruch.

Sei T ein beliebiger MSB von G. Entfernen wir e

i

aus T , so zerf¨ allt T in zwei nicht zusammenh¨ angende Teilb¨ aume T

1

und T

2

. Da e

i

auf einem Kreis C

1

= e

1

, . . . , e

k

in G liegt, k¨ onnen wir wie zuvor e

i

durch eine Kante e

j

des Kreises C

1

ersetzen, die T

1

und T

2

verbindet. Dadurch erhalten wir einen von T verschiedenen Spannbaum T ˜ , der e

i

nicht 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

i

nicht enth¨ alt, im Widerspruch zur Annahme, e

i

liege in jedem MSB von G.

EADS 3.1 Konstruktion von minimalen Spannb¨aumen 423/436

ľErnst W. Mayr

(9)

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

(10)

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 heraus

sei v ∈ T , w ∈ T

0

vereinige T und T

0

, f¨ uge e zum minimalen Spannbaum hinzu od

EADS 3.2 Generischer minimaler Spannbaum-Algorithmus 425/436

ľErnst W. Mayr

(11)

Generischer MST-Algorithmus

"!

# q q

"!

# q q

q q

"!

# q q qq

"!

# q

q HH q q

T T

0

T

00

T

000

V

1

V

2

Wald F

EADS 3.2 Generischer minimaler Spannbaum-Algorithmus 426/436

ľErnst W. Mayr

(12)

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

i

x := 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

(13)

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

k

ein 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

i

induziert in T einen zusammenh¨ angenden Teilbaum, dessen Kanten alle Gewicht

< r haben.

EADS 3.3 Kruskals Algorithmus 428/436

ľErnst W. Mayr

(14)

Beweis der Hilfsbehauptung:

Sei T

i

=: (V

i

, E

i

). Wir m¨ ussen zeigen, dass V

i

in T einen zusammenh¨ angenden Teilbaum induziert. Seien u, v ∈ V

i

zwei Knoten, die in T

i

durch eine Kante e verbunden sind. Falls der Pfad in T zwischen u und v auch Knoten 6∈ V

i

enth¨ alt (also der von V

i

induzierte 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

r

und ist damit gem¨ aß der “roten“ Regel nicht minimal! Da T

i

zusammenh¨ angend ist, folgt damit, dass je zwei Knoten aus V

i

in T immer durch einen Pfad verbunden sind, der nur Kanten aus E

r

enth¨ alt.

EADS 3.3 Kruskals Algorithmus 429/436

ľErnst W. Mayr

(15)

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

(16)

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

(17)

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

(18)

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

(19)

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

(20)

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

(21)

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

(22)

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

(23)

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

(24)

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

(25)

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

(26)

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

(27)

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

(28)

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

(29)

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

(30)

EADS 3.4 Prim’s Algorithmus 436/436 ľErnst W. Mayr

Referenzen

ÄHNLICHE DOKUMENTE

 jeder Aufruf ist am wenigsten ausgewogen, wenn -das Array A 1..n sortiert oder umgekehrt sortiert

Diese Formelsammlung basiert auf der Vorlesung“Formale Grundlagen der Informatik - 3”von Prof.. Christoph Walther an der Technischen Universit¨at Darmstadt im

Das besondere an Bitonic Sort ist, dass die Anzahl zu vergleichenden Elemente un- abh¨ angig von den Daten sind.. Bitonic Sort l¨ aßt sich deshalb in

lexikographischen oder terminalen Symbolen (Wörter und Symbole) Gibt an, wie die linke Seite zu reduzieren ist. Am Ende wird das Quellprogramm durch diesen

Es gibt weitere korrekte und vollst¨andige deduktive Systeme f¨ur

Wir werden zeigen, dass jeder Satz, der in einem Schritt im Rahmen eines Beweises auftritt, eine PL1-Folgerung aus denjenigen Annahmen ist, die zu diesem Schritt in Kraft sind..

Wir prüfen das erst einmal exemplarisch: geben Sie dazu die Auswertung des Programmes mittels operationaler Semantik für σ ( x ) =

Genauso wie bei Mergesort die eigentliche Arbeit von der Funktion merge erledigt wird, steckt die eigentliche Beweisarbeit f¨ ur die Korrektheit von Mergesort in zwei Lemmata ¨ uber