• Keine Ergebnisse gefunden

dis[ v ] und nC ) ··· v ] rrrrrrr 6HHHY rrrrrrr - 2.2Dijkstra’sAlgorithmusmitRadix-Heaps dis[ d( v ) v ∈ ]dis[ [0 ,...,C ] (alleWertesindzwischen sS v ] dis[ v ]dis[ vv + ∞

N/A
N/A
Protected

Academic year: 2021

Aktie "dis[ v ] und nC ) ··· v ] rrrrrrr 6HHHY rrrrrrr - 2.2Dijkstra’sAlgorithmusmitRadix-Heaps dis[ d( v ) v ∈ ]dis[ [0 ,...,C ] (alleWertesindzwischen sS v ] dis[ v ]dis[ vv + ∞"

Copied!
21
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

2.2 Dijkstra’s Algorithmus mit Radix-Heaps

dis[v] dis[v 0 ]

r r r r · · · r r r

d(v) ∈ [0, . . . , C] (alle Werte sind zwischen dis[v] und nC)

dis[v] dis[v 0 ] 6 H Y H H

v v 0 +∞

s S

r r r r r r - r

EADS 2.2 Dijkstra’s Algorithmus mit Radix-Heaps 456/476

ľErnst W. Mayr

(2)

Wir verwenden Radix-Heaps (siehe dort), in der einstufigen Variante wie vorgestellt.

Satz 109

Dijkstra’s Algorithmus mit einstufigen Radix-Heaps hat Zeitkomplexit¨ at O(m + n log C).

Beweis:

siehe Satz 71.

EADS 2.2 Dijkstra’s Algorithmus mit Radix-Heaps 457/476

ľErnst W. Mayr

(3)

Verbesserungen:

1

zweistufige Heaps: O(m + n · log log log C C )

2

mehrstufige Heaps (+Fibonacci-Heaps): O(m + n √ log C)

R.K. Ahuja, Kurt Mehlhorn, J.B. Orlin, R.E. Tarjan:

Faster algorithms for the shortest path problem J. ACM 37(2), pp. 213–223 (1990)

EADS 2.2 Dijkstra’s Algorithmus mit Radix-Heaps 458/476

ľErnst W. Mayr

(4)

2.3 Bellman-Ford-Algorithmus

Dieser Algorithmus ist ein Beispiel f¨ ur dynamische Programmierung.

Sei B k [i] := L¨ ange eines k¨ urzesten Pfades von s zum Knoten i, wobei der Pfad h¨ ochstens k Kanten enth¨ alt.

Gesucht ist B n−1 [i] f¨ ur i = 1, . . . , n (o.B.d.A. V = {1, . . . , n}).

EADS 2.3 Bellman-Ford-Algorithmus 459/476

ľErnst W. Mayr

(5)

Initialisierung:

B 1 [i] :=

 

 

d(s, i) , falls d(s, i) < ∞, i 6= s 0 , falls i = s

+∞ , sonst Iteration:

for k := 2 to n − 1 do for i := 1 to n do

B k [i] :=

0 , falls i = s

min j∈N

−1

(i) {B k−1 [i], B k−1 [j] + d(j, i)} , sonst od

od

Bemerkung: N −1 (i) ist die Menge der Knoten, von denen aus eine Kante zu Knoten i f¨ uhrt.

EADS 2.3 Bellman-Ford-Algorithmus 460/476

ľErnst W. Mayr

(6)

Korrekheit:

klar (Beweis durch vollst¨ andige Induktion) Zeitbedarf:

Man beachte, dass in jedem Durchlauf der ¨ außeren Schleife jede Halbkante einmal ber¨ uhrt wird.

Satz 110

Der Zeitbedarf des Bellman-Ford-Algorithmus ist O(n · m).

Beweis:

s.o.

EADS 2.3 Bellman-Ford-Algorithmus 461/476

ľErnst W. Mayr

(7)

3. Floyd’s Algorithmus f¨ ur das all-pairs-shortest-path-Problem Dieser Algorithmus wird auch als

” Kleene’s Algorithmus“

bezeichnet. Er ist ein weiteres Beispiel f¨ ur dynamische Programmierung.

Sei G = (V, E) mit Distanzfunktion d : A → R + 0 gegeben. Sei o.B.d.A. V = {v 1 , . . . , v n }.

Wir setzen nun

c k ij := L¨ ange eines k¨ urzesten Pfades von v i nach v j , der als innere Knoten (alle bis auf ersten und letzten Knoten) nur Knoten aus {v 1 , . . . , v k } enth¨ alt.

EADS 3.0 Bellman-Ford-Algorithmus 462/476

ľErnst W. Mayr

(8)

algorithm floyd :=

for alle (i, j) do c (0) ij := d(i, j) od ; 1 ≤ i, j ≤ n for k := 1 to n do

for alle (i, j), 1 ≤ i, j ≤ n do c (k) ij := min

n

c (k−1) ij , c (k−1) ik + c (k−1) kj o od

od

EADS 3.0 Bellman-Ford-Algorithmus 463/476

ľErnst W. Mayr

(9)

Laufzeit: O(n 3 ) Korrektheit:

Zu zeigen: c (k) ij des Algorithmus = c k ij (damit sind die L¨ angen der k¨ urzesten Pfade durch c (n) ij gegeben).

Beweis:

Richtig f¨ ur k = 0. Induktionsschluss: Ein k¨ urzester Pfad von v i

nach v j mit inneren Knoten ∈ {v 1 , . . . , v k+1 } enth¨ alt entweder v k+1 gar nicht als inneren Knoten, oder er enth¨ alt v k+1 genau einmal als inneren Knoten. Im ersten Fall wurde dieser Pfad also bereits f¨ ur c (k) ij betrachtet, hat also L¨ ange = c (k) ij . Im zweiten Fall setzt er sich aus einem k¨ urzesten Pfad P 1 von v i nach v k+1 und einem k¨ urzesten Pfad P 2 von v k+1 nach v j zusammen, wobei alle inneren Knoten von P 1 und P 2 ∈ {v 1 , . . . , v k } sind. Also ist die L¨ ange des Pfades = c (k) i,k+1 + c (k) k+1,j .

EADS 3.0 Bellman-Ford-Algorithmus 464/476

ľErnst W. Mayr

(10)

Satz 111

Floyd’s Algorithmus f¨ ur das all-pairs-shortest-path-Problem hat Zeitkomplexit¨ at O(n 3 ).

EADS 3.0 Bellman-Ford-Algorithmus 465/476

ľErnst W. Mayr

(11)

4. Digraphen mit negativen Kantengewichten 4.1 Grunds¨ atzliches

Betrachte Startknoten s und einen Kreis C mit Gesamtl¨ ange < 0.

t t t t

t t

t t

t - - ppppppppp -

J J

J J ^ -

Q Q Q Q Q k

+ -

s

k 0

k 1 k 2

k 3 k 4

1 3 2 v

1 1

1

−5 1 C

Sollte ein Pfad von s nach C und von C nach v existieren, so ist ein k¨ urzester Pfad von s nach v nicht definiert.

EADS 4.1 Grunds¨atzliches 466/476

ľErnst W. Mayr

(12)

Falls aber die Gesamtl¨ ange des Kreises C ≥ 0 ist,

t t t t

t t

t t

- - ppppppppp - t J

J

J J ^ -

Q Q Q Q Q k

+ -

s

k 0

k 1 k 2

k 3

k 4

1 3 2 v

1

1 1

−3 1

dann ist der k¨ urzeste Pfad wohldefiniert. Probleme gibt es also nur dann, wenn G einen Zyklus negativer L¨ ange enth¨ alt.

EADS 4.1 Grunds¨atzliches 467/476

ľErnst W. Mayr

(13)

Dijkstra’s Algorithmus funktioniert bei negativen Kantenl¨ angen nicht:

s

s

s

@

@

@

@ @

s v

w

3 −2

4

Bei diesem Beispielgraphen (der nicht einmal einen negativen Kreis enth¨ alt) berechnet der Dijkstra-Algorithmus die minimale

Entfernung von s nach w f¨ alschlicherweise als 3 (statt 2).

EADS 4.1 Grunds¨atzliches 468/476

ľErnst W. Mayr

(14)

4.2 Modifikation des Bellman-Ford-Algorithmus

B k [i] gibt die L¨ ange eines k¨ urzesten gerichteten s-i-Pfades an, der aus h¨ ochstens k Kanten besteht. Jeder Pfad, der keinen Kreis enth¨ alt, besteht aus maximal n − 1 Kanten. In einem Graphen ohne negative Kreise gilt daher:

∀i ∈ V : B n [i] ≥ B n−1 [i]

Gibt es hingegen einen (von s aus erreichbaren) Kreis negativer L¨ ange, so gibt es einen Knoten i ∈ V , bei dem ein Pfad aus n Kanten mit der L¨ ange B n [i] diesen Kreis h¨ aufiger durchl¨ auft als jeder Pfad aus maximal n − 1 Kanten der L¨ ange B n−1 [i].

Demnach gilt in diesem Fall:

B n [i] < B n−1 [i]

EADS 4.2 Modifikation des Bellman-Ford-Algorithmus 469/476

ľErnst W. Mayr

(15)

Man kann also in den Algorithmus von Bellman-Ford einen Test auf negative Kreise einbauen, indem man auch f¨ ur alle i ∈ V B n [i]

berechnet und am Ende den folgenden Befehl einf¨ ugt:

for i := 1 to n do

if B n [i] < B n−1 [i] then stop

” Negativer Kreis“ fi

EADS 4.2 Modifikation des Bellman-Ford-Algorithmus 470/476

ľErnst W. Mayr

(16)

4.3 Modifikation des Floyd-Algorithmus

Falls kein negativer Kreis existiert, funktioniert der Algorithmus weiterhin korrekt.

t

t

t

t t

t

* H H

H H H j

? H H H H H Y 6 v 1

v 2

v 3

v 4 v 5

v 6

1 1

1 1 1

−6

c 6 16 = 5 = c 5 16 c 6 61 = −6 = c 5 61

c 6 11 = min{c 5 11 , c 5 16 +c 5 61 } = −1

⇒ der Graph enth¨ alt einen negativen Kreis, gdw ein c n ii < 0 existiert.

EADS 4.3 Modifikation des Floyd-Algorithmus 471/476

ľErnst W. Mayr

(17)

Man kann also in den Algorithmus von Floyd einen Test auf negative Kreise einbauen, indem man am Ende den folgenden Befehl einf¨ ugt:

for i := 1 to n do if c n ii < 0 then stop

” Negativer Kreis“ fi

EADS 4.3 Modifikation des Floyd-Algorithmus 472/476

ľErnst W. Mayr

(18)

4.4 Der Algorithmus von Johnson Definition 112

Sei d : A → R eine Distanzfunktion. Eine Abbildung r : V → R

heißt Rekalibrierung, falls gilt:

(∀(u, v) ∈ A)[r(u) + d(u, v) ≥ r(v)]

Beobachtung: Sei r eine Rekalibrierung (f¨ ur d). Setze d 0 (u, v) := d(u, v) + r(u) − r(v). Dann gilt:

d 0 (u, v) ≥ 0

EADS 4.4 Der Algorithmus von Johnson 473/476

ľErnst W. Mayr

(19)

Sei u = v 0 → · · · → v k = v ein Pfad. Dann ist:

d-L¨ ange :=

k−1

X

i=0

d(v i , v i+1 ) Demnach ist:

d 0 -L¨ ange =

k−1

X

i=0

d 0 (v i , v i+1 )

=

k−1

X

i=0

(d(v i , v i+1 ) + r(v i ) − r(v i+1 ))

=

k−1

X

i=0

d(v i , v i+1 ) + r(v 0 ) − r(v k )

Also ist ein d-k¨ urzester Pfad von u (= v 0 ) nach v (= v k ) auch ein d 0 -k¨ urzester Pfad und umgekehrt. Nach einer Rekalibrierung kann man also auch die Algorithmen anwenden, die eine nichtnegative Distanzfunktion d voraussetzen (z.B. Dijkstra).

EADS 4.4 Der Algorithmus von Johnson 474/476

ľErnst W. Mayr

(20)

Berechnung einer Rekalibrierung:

~

z

~ 0

0 0 s

s

s

' s

&

$

% s

u

v w

Graph G

d : A → R

F¨ uge einen neuen Knoten s hin- zu und verbinde s mit jedem an- deren Knoten v ∈ V durch eine Kante der L¨ ange 0.

Berechne sssp von s nach allen anderen Knoten v ∈ V (z.B. mit Bellman-Ford). Sei r(v) die dadurch berechnete Entfernung von s zu v ∈ V . Dann ist r eine Rekalibrierung, denn es gilt:

r(u) + d(u, v) ≥ r(v) .

EADS 4.4 Der Algorithmus von Johnson 475/476

ľErnst W. Mayr

(21)

5. Zusammenfassung

d ≥ 0 d allgemein

sssp D (Fibonacci): O(m + n · log n) B-F: O(n · m) D (Radix): O(m + n √

log C) apsp D: O(n · m + n 2 min{log n, √

log C}) J: O(n · m + n 2 log n)

F: O(n 3 ) (∗) F: O(n 3 )

Bemerkung (∗) : In der Praxis ist der Floyd-Algorithmus f¨ ur kleine n besser als Dijkstra’s Algorithmus.

EADS 5.0 Der Algorithmus von Johnson 476/476

ľErnst W. Mayr

Referenzen

ÄHNLICHE DOKUMENTE

ACGCCCTTCGCGCGCCCCTCGACTAGCCCCGATAGAAGCCCGCCTGCCCA TCACGACGCGCCGAAAGCGCTGTACCTCCTGAGGAGACCGACCCACCCAG

Absuchen der Stämme und Kronen zu fällender Bäume nach Winterquar- tieren von Fledermäusen.. S 03 (1) S

[r]

C -Vektorraum mit Skalarprodukt heißt Euklidi- scher bzw.. unit¨

Januar 2004 Markus Diek¨amper, Andrew Hubery, Marc Jesse Abgabe bis 13... Die Vektoren sind also

Ein topologischer Raum heißt parakompakt, falls er ein Hausdorffraum ist und jede offene ¨ Uberdeckung von X eine lokal-endliche Verfeinerung

На уровне конкретных преступлений характер и степень их общественной опасности учитывается при индивидуализации наказания судом лицу, признанному

• &lt; ist linear, d.h. zwischen zwei beliebigen Elemente existiert immer noch ein weiteres.. a) Welche der S¨ atze sind erf¨ ullt in den Strukturen R &lt; bzw.. Welche der S¨