• Keine Ergebnisse gefunden

3.5 Prim’s Algorithmus, zweite Variante

N/A
N/A
Protected

Academic year: 2021

Aktie "3.5 Prim’s Algorithmus, zweite Variante"

Copied!
24
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

3.5 Prim’s Algorithmus, zweite Variante

Die Idee der folgenden Variante von Prim’s Algorithmus ist:

Lasse die Priority Queues nicht zu groß werden.

Seien dazu G = (V, E), |V | = n, |E| = m, w Gewichtsfunktion, und k ein Parameter, dessen Wert wir erst sp¨ ater festlegen werden.

Der Algorithmus arbeitet nun in

Phasen

wie folgt:

1

Initialisiere eine Schlange von B¨ aumen, jeder Baum anfangs ein (Super-) Knoten. Zu jedem Baum initialisiere eine Priority Queue (Fibonacci-Heap) mit den Nachbarn der Knoten im Baum, die selbst nicht im Baum sind, als Elementen und jeweils dem Gewicht einer leichtesten Kante zu einem Knoten im Baum als Schl¨ ussel.

2

Markiere jeden Baum in der Schlange mit der Nummer der laufenden Phase.

EADS 3.5 Prim’s Algorithmus, zweite Variante 436/455

ľErnst W. Mayr

(2)

3

while vorderster Baum in der Schlange hat laufende Phasennummer do

lasse ihn wachsen, solange seine Priority Queue h¨ ochstens k Elemente enth¨ alt (und noch etwas zu tun ist) if Priority Queue zu groß (mehr als k Elemente) then

f¨ uge Baum mit inkrementierter Phasennummer am Ende der Schlange ein

fi od

4

Falls

” Phasensprung“: Schrumpfe alle B¨ aume zu Superknoten, reduziere Kantenmenge (d.h., behalte zwischen zwei Knoten jeweils nur die leichteste Kante)

5

Beginne n¨ achste Phase mit Schritt 1.!

EADS 3.5 Prim’s Algorithmus, zweite Variante 437/455

ľErnst W. Mayr

(3)

t t t t t t t

I

Ende-

markierung wenn groß genug

hinten anstellen

j

...

Ende- markierung

t t t t t t t

?

falls

Phasensprung schrumpfen und

n¨ achste Phase

?

EADS 3.5 Prim’s Algorithmus, zweite Variante 438/455

ľErnst W. Mayr

(4)

Analyse des Zeitbedarfs:

Sei t die Anzahl der B¨ aume in der Schlange zu Beginn einer Phase.

Betrachte die Schlange von B¨ aumen:

T

1

T

2

· · · T

i

· · · T

t

r

r @@r

r

r

v

Abgesehen von den Operationen, die bei der Vereinigung von Superknoten anfallen, betr¨ agt der Zeitaufwand pro Phase O(m).

EADS 3.5 Prim’s Algorithmus, zweite Variante 439/455

ľErnst W. Mayr

(5)

Vereinigung zweier Superknoten, z.B. T

1

und T

2

: F¨ ur jeden (Super-)Knoten v in T

2

’s Priority Queue:

1

v ∈ T

1

: √

(nichts zu tun)

2

v in Priority Queue von T

1

: DecreaseKey. Hilfsdatenstruktur:

f¨ ur alle Knoten in den Priority Queues ein Zeiger auf den Superknoten, in dessen Priority Queue der Knoten letztmals am Anfang der Schlange stand.

3

sonst: Einf¨ ugen

EADS 3.5 Prim’s Algorithmus, zweite Variante 440/455

ľErnst W. Mayr

(6)

Betrachte Knoten mit

” Halbkanten“: jede Halbkante kommt nur 1x in allen B¨ aumen der Queue vor. Mit m Kanten ergeben sich 2m Halbkanten.

m

Kanten 2m

Halbkanten

Kante aus zwei Halbkanten

r

v

r

e →

v

r

e

und

r

e

=

b r

v

r

e

EADS 3.5 Prim’s Algorithmus, zweite Variante 441/455

ľErnst W. Mayr

(7)

Zeitaufwand pro Phase (mit Bildung der Superknoten zu Beginn):

Initialisierung: O(m)

ExtractMin: < t Operationen

sonstige Priority Queue-Operationen, Overhead: Zeit O(m) Da die Priority Queues h¨ ochstens k Elemente enthalten, wenn darauf eine

” teure“ Priority Queue-Operation durchgef¨ uhrt wird, sind die Kosten pro Phase

O(t log k + m) .

Setze k = 2

2mt

(damit t log k = 2m). Damit sind die Kosten pro Phase O(m).

EADS 3.5 Prim’s Algorithmus, zweite Variante 442/455

ľErnst W. Mayr

(8)

Wieviele Phasen f¨ uhrt der Algorithmus aus?

t ist die Anzahl der Superknoten am Anfang einer Phase, t

0

sei diese Zahl zu Beginn der n¨ achsten Phase. Sei a die

durchschnittliche Anzahl urspr¨ unglicher Knoten in jeder der t Priority Queues zu Anfang der Phase, a

0

entsprechend zu Beginn der n¨ achsten Phase.

Wir haben:

1

a =

2mt

2

t

0

2mk

(mit Ausnahme ev. der letzten Phase)

EADS 3.5 Prim’s Algorithmus, zweite Variante 443/455

ľErnst W. Mayr

(9)

Also:

a

0

= 2m

t

0

≥ k = 2

2mt

= 2

a

F¨ ur die erste Phase ist a =

2mn

, f¨ ur jede Phase ist a ≤ n − 1. Also ist die Anzahl der Phasen

≤ 1 + min

i; log

(i)2

(n − 1) ≤ 2m n

.

Setzen wir β(m, n) := min

n

i; log

(i)2

n ≤

mno

, dann gilt

β(m, n) ≤ log

n f¨ ur n ≤ m ≤ n

2

.

EADS 3.5 Prim’s Algorithmus, zweite Variante 444/455

ľErnst W. Mayr

(10)

Satz 106

F¨ ur gewichtete, zusammenh¨ angende (ungerichtete) Graphen mit n Knoten, m Kanten kann ein minimaler Spannbaum in Zeit

O(min{m · β(m, n), m + n log n}) bestimmt werden.

EADS 3.5 Prim’s Algorithmus, zweite Variante 445/455

ľErnst W. Mayr

(11)

3.6 Erweiterungen

Euklidische

minimale Spannb¨ aume stellen ein Problem dar, f¨ ur das es speziellere Algorithmen gibt. Literatur hierzu:

Andrew Chih-Chi Yao:

On constructing minimum spanning trees in k-dimensional spaces and related problems

SIAM J. Comput.11(4), pp. 721–736 (1982)

EADS 3.6 Erweiterungen 446/455

ľErnst W. Mayr

(12)

Kapitel V K¨ urzeste Pfade

1. Grundlegende Begriffe

Betrachte Digraph G = (V, A) oder Graph G = (V, E).

Kante im ungerichteten

Graph

entgegengesetzte (antiparallele) Kanten

r r r r

=

b 6

?

Distanzfunktion:

d

: A −→

R+

(bzw. −→

R

)

O.B.d.A.: A = V × V ,

d(x, y) = +∞

f¨ ur Kanten, die eigentlich nicht vorhanden sind.

dis(v, w) := L¨ ange eines k¨ urzesten Pfades von v nach w

R+

∪ {+∞}.

EADS 1 Grundlegende Begriffe 447/455

ľErnst W. Mayr

(13)

Arten von K¨ urzeste-Pfade-Problemen:

1

single-pair-shortest-path (spsp). Beispiel: K¨ urzeste Entfernung von M¨ unchen nach Frankfurt.

2

single-source-shortest-path: gegeben G,

d

und s ∈ V ,

bestimme f¨ ur alle v ∈ V die L¨ ange eines k¨ urzesten Pfades von s nach v (bzw. einen k¨ urzesten Pfad von s nach v) (sssp).

Beispiel: K¨ urzeste Entfernung von M¨ unchen nach allen anderen Großst¨ adten.

3

all-pairs-shortest-path (apsp). Beispiel: K¨ urzeste Entfernung zwischen allen Großst¨ adten.

Bemerkung: Es gibt keinen Algorithmus, der das

single-pair-shortest-path berechnet, ohne nicht gleichzeitig das single-source-shortest-path-Problem zu l¨ osen.

EADS 1 Grundlegende Begriffe 448/455

ľErnst W. Mayr

(14)

2. Das single-source-shortest-path-Problem

Zun¨ achst nehmen wir an, dass

d

≥ 0 ist. Alle k¨ urzesten Pfade von a nach b sind o.B.d.A. einfache Pfade.

2.1 Dijkstra’s Algorithmus

Gegeben: G = (V, A), (A = V × V ), Distanzfunktion

d

: A →

R+

∪ {+∞}, Startknoten s, G durch Adjazenzlisten dar- gestellt.

A A A

C C C

r

r r

r r r r

r

s 0

EADS 2.1 Dijkstra’s Algorithmus 449/455

ľErnst W. Mayr

(15)

algorithm sssp:=

S := {s}; dis[s] := 0; initialisiere eine Priority Queue P Q, die alle Knoten v ∈ V \ {s} enth¨ alt mit Schl¨ ussel dis[v] :=

d(s, v)

for alle v ∈ V − {s} do from[v] := s od

while S 6= V do

v := ExtractMin(P Q) S := S ∪ {v}

for alle w ∈ V \ S,

d(v, w)

< ∞ do if dis[v] +

d(v, w)

< dis[w] then

DecreaseKey(w, dis[v] +

d(v, w))

co DecreaseKey aktualisiert dis[w] oc from[w] := v

fi od od

EADS 2.1 Dijkstra’s Algorithmus 450/455

ľErnst W. Mayr

(16)

Seien n = |V | und m = die Anzahl der wirklichen Kanten in G.

Laufzeit (mit Fibonacci-Heaps):

Initialisierung: O(n) ExtractMin: n · O(log n)

Sonstiger Aufwand: m · O(1) (z.B. DecreaseKey )

⇒ Zeitbedarf also: O(m + n log n)

EADS 2.1 Dijkstra’s Algorithmus 451/455

ľErnst W. Mayr

(17)

Korrektheit: Wir behaupten, dass in dem Moment, in dem ein v ∈ V \ {s} Ergebnis der ExtractMin Operation ist, der Wert dis[v]

des Schl¨ ussels von v gleich der L¨ ange eines k¨ urzesten Pfades von s nach v ist.

Beweis:

[durch Widerspruch] Sei v ∈ V \ {s} der erste Knoten, f¨ ur den diese Behauptung nicht stimmt, und sei

r -r -r

. . .

-r -r -r

. . .

-r r

s s

1

s

2

s

r

v

1

v

2

v

q

v

-

ein k¨ urzester Pfad von s nach v, mit einer L¨ ange < dis[v]. Dabei sind s

1

, . . . , s

r

∈ S, v

1

∈ / S [r = 0 und/oder q = 0 ist m¨ oglich].

Betrachte den Pfad s

r -

s

1r

. . .

-

s

rr -

v

1r

; seine L¨ ange ist < dis[v], f¨ ur q ≥ 1 (ebenso f¨ ur q = 0) ist also dis[v

1

] < dis[v], im

Widerspruch zur Wahl von v.

EADS 2.1 Dijkstra’s Algorithmus 452/455

ľErnst W. Mayr

(18)

Beispiel 107 (Dijkstra’s Algorithmus)

gegeben Graph G;

v1 ist der Startknoten;

setzev1 als Bezugsknoten;

setzedis[v1] = 0;

setzedis[Rest] = +∞;

0

∞ 2

6 3

4 3

3 2

1

1 v1

v2

v3

v4

v5

v6

v7

s

s s

s s

s s

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

EADS 453/455

ľErnst W. Mayr

(19)

Beispiel 107 (Dijkstra’s Algorithmus)

gegeben Graph G;

v1 ist der Startknoten;

setzev1 als Bezugsknoten;

setzedis[v1] = 0;

setzedis[Rest] = +∞;

0

∞ 2

6 3

4 3

3 2

1

1 v1

v2

v3

v4

v5

v6

v7

s

s s

s s

s s

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

setzedis[v2] = 2;

markiere(v1, v2);

setzedis[v3] = 6;

markiere(v1, v3);

setzev2 als Bezugsknoten, dadis[v2]minimal;

∞ 0 ∞

2 6

f

3

@

@

@

@

@

@

@

@

@

@

@

@ R 2

6 3

4 3

3 2

1

1 v1

v2

v3

v4

v5

v6

v7 s

s s

s s

s s

@

@

@

@

@

@

@

@

@

@

@

@

EADS 453/455

ľErnst W. Mayr

(20)

Beispiel 107 (Dijkstra’s Algorithmus)

setzedis[v2] = 2;

markiere(v1, v2);

setzedis[v3] = 6;

markiere(v1, v3);

setzev2 als Bezugsknoten, dadis[v2]minimal;

∞ 0 ∞

2 6

f

3

@

@

@

@

@

@

@

@

@

@

@

@ R 2

6 3

4 3

3 2

1

1 v1

v2

v3

v4

v5

v6

v7

s

s s

s s

s s

@

@

@

@

@

@

@

@

@

@

@

@

setzedis[v3] = 2 + 3 = 5;

markiere(v2, v3);

unmarkiere (v1, v3);

setzedis[v4] = 2 + 4 = 6;

markiere(v2, v4);

setzev3 als Bezugsknoten, dadis[v3]minimal;

∞ 0 ∞

2 5

6 f

@

@

@

@

@

@

@

@

@

@

@

@R

- 2

6 3

4 3

3 2

1

1 v1

v2

v3

v4

v5

v6

v7 s

s s

s s

s s

@

@

@

@

@

@

@

@

@

@

@

@

EADS 453/455

ľErnst W. Mayr

(21)

Beispiel 107 (Dijkstra’s Algorithmus)

setzedis[v3] = 2 + 3 = 5;

markiere(v2, v3);

unmarkiere (v1, v3);

setzedis[v4] = 2 + 4 = 6;

markiere(v2, v4);

setzev3 als Bezugsknoten, dadis[v3]minimal;

∞ 0 ∞

2 5

6 f

@

@

@

@

@

@

@

@

@

@

@

@R

- 2

6 3

4 3

3 2

1

1 v1

v2

v3

v4

v5

v6

v7

s

s s

s s

s s

@

@

@

@

@

@

@

@

@

@

@

@

setzedis[v5] = 5 + 2 = 7;

markiere(v3, v5);

setzedis[v6] = 5 + 3 = 8;

markiere(v3, v6);

setzev4, dannv5 als Bezugsknoten;

0 ∞

2 5

6 7

8 f

@

@

@

@

@

@

@

@

@

@

@

@R

- -

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@ R 2

6 3

4 3

3 2

1

1 v1

v2

v3

v4

v5

v6

v7 s

s s

s s

s s

@

@

@

@

EADS 453/455

ľErnst W. Mayr

(22)

Beispiel 107 (Dijkstra’s Algorithmus)

setzedis[v5] = 5 + 2 = 7;

markiere(v3, v5);

setzedis[v6] = 5 + 3 = 8;

markiere(v3, v6);

setzev4, dannv5 als Bezugsknoten;

0 ∞

2 5

6 7

8 f

@

@

@

@

@

@

@

@

@

@

@

@R

- -

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@ R 2

6 3

4 3

3 2

1

1 v1

v2

v3

v4

v5

v6

v7

s

s s

s s

s s

@

@

@

@

setzedis[v7] := 7 + 1 = 8;

markiere(v5, v7);

alle Knoten wurden erreicht:

⇒Algorithmus zu Ende 0

2 5

6 7

8 8 f

@

@

@

@

@

@

@

@

@

@

@

@R

- -

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@

@ R

@

@

@

@

@

@

@

@

@

@

@

@ R

2 6

3

4 3

3 2

1

1 v1

v2

v3

v4

v5

v6

v7 s

s s

s s

s s

EADS 2.1 Dijkstra’s Algorithmus 453/455

ľErnst W. Mayr

(23)

Beobachtung:

ExtractMin liefert eine (schwach) monoton steigende Folge von Schl¨ usseln dis[·];

Die Schl¨ ussel in P Q sind stets ≤ dis[v] + C, wobei v das Ergebnis der vorangehenden ExtractMin-Operation (bzw. s zu Beginn) und C := max

u,v∈A

{dis(u, v)} ist.

Satz 108

Dijkstra’s Algorithmus (mit Fibonacci-Heaps) l¨ ost das single-source-shortest-path-Problem in Zeit O(m + n log n).

EADS 2.1 Dijkstra’s Algorithmus 454/455

ľErnst W. Mayr

(24)

Bemerkung:

1

Verwendet man Dijkstra’s Algorithmus mit d-Heaps, so erh¨ alt man Laufzeit

O(m log

2+m

n

n)

2 Mikkel Thorup:

Undirected single-source shortest paths with positive integer weights in linear time

J. ACM 46(3), pp. 362–394 (1999)

EADS 2.1 Dijkstra’s Algorithmus 455/455

ľErnst W. Mayr

Referenzen

ÄHNLICHE DOKUMENTE

[r]

Bäumchen – nun ein stattlicher schöner Baum – sehr viel Kraft, den anderen Trost zuzusprechen, so dass sie, dadurch gestärkt, innerlich stark wurden, was auch sie zum

Die Schüler sollen aus dem dunkelbraunen Tonpapier einen Stamm und viele Äste reißen und auf den Hintergrund kleben. Anschließend werden aus dem bunten Seidenpapier kleine

Dass die Fotos und die dazugehörigen Beschreibun- gen je nach Format unterschiedlich quer oder längs angeordnet sind, wird bei der Vielfalt der Kar- ten für kaum einen

könnte deine Schwester, Frau N., wenn sie nun doch auf diesem Stück Erde mit ihrem Manne wohnen will, ungestraft das alte Haus niederreissen und ein neues bauen; denn dies neue

Lies deinen Text am Ende rückwärts noch einmal Wort für Wort durch. Siehst du einen Fehler? Dann vergleiche deinen Text mit dieser Vorlage. Findest du jetzt noch Fehler, dann

Wenn Sie beim Einfügen Knoten splitten oder rotieren müssen, zeichnen Sie jeden

Wenn Früchte von Vögeln oder anderen Tieren gefressen werden, können sich an ande- rer Stelle aus den ausgeschiedenen Samen neue Bäume entwickeln.. Eichhörnchen vergraben Früchte