Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Post on 21-Jan-2016

29 views 0 download

description

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2). Graphalgorithmen. Single Source Shortest Path (SSSP) Startknoten s Aufgabe: Berechne kürzeste Wege von s zu allen anderen Knoten All Pairs Shortest Path (APSP) Aufgabe: Berechne kürzeste Wege zwischen allen Knotenpaaren - PowerPoint PPT Presentation

Transcript of Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

2

Single Source Shortest Path (SSSP) Startknoten s Aufgabe: Berechne kürzeste Wege von s zu allen anderen Knoten

All Pairs Shortest Path (APSP) Aufgabe: Berechne kürzeste Wege zwischen allen Knotenpaaren

SSSP in ungerichteten Graphen (Breitensuche) Graph in Adjazenzlistendarstellung Startknoten s Nutze Kanten von G, um alle Knoten zu finden, die von s aus erreichbar sind Finde kürzeste Distanz (Anzahl Kanten) zu jedem anderen Knoten

Graphalgorithmen

LS 2 / Informatik

3

Invariante (Breitensuche) Knoten haben 3 Farben: weiß, grau und schwarz Zu Beginn: Alle Knoten sind weiß Ein nicht-weißer Knoten heißt „entdeckt“ Unterscheidung grau-schwarz dient zur Steuerung des Algorithmus Wenn (u,v)E ist und u ist schwarz, dann sind seine adjazenten Knoten grau oder schwarz Graue Knoten können adjazente weiße Knoten haben

Graphalgorithmen

LS 2 / Informatik

4

Beispiel (mögl. Zustand bei einer Breitensuche)

Graphalgorithmen

s

LS 2 / Informatik

5

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

LS 2 / Informatik

6

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

d[u]: Abstand zu s (zu Beginn )[u]: Vaterknoten von u (zu Beginn nil)d[u]: Abstand zu s (zu Beginn )[u]: Vaterknoten von u (zu Beginn nil)

LS 2 / Informatik

7

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

GraphalgorithmenFür jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil

Für jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil

LS 2 / Informatik

8

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

GraphalgorithmenFür jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil

Für jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil

Für Knoten s:• color[s] = grau• d[s]=0• [s]=nil• s wird in Schlange Q eingefügt

Für Knoten s:• color[s] = grau• d[s]=0• [s]=nil• s wird in Schlange Q eingefügt

LS 2 / Informatik

9

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s

0

i

h

g

f

ed

c

b

a

LS 2 / Informatik

10

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s

0

i

h

g

f

ed

c

b

a

u

LS 2 / Informatik

11

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s

0

i

h

g

f

ed

c

bu

v=a

LS 2 / Informatik

12

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s

0

i

h

g

f

ed

c

bu

v=a

LS 2 / Informatik

13

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s

0

i

h

g

f

ed

c

bu

v=a

LS 2 / Informatik

14

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s

0

i

h

g

f

ed

c

bu

v=a

1

LS 2 / Informatik

15

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s, a

0

i

h

g

f

ed

c

bu

v=a

1

LS 2 / Informatik

16

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s, a

0

i

h

g

f

ed

c

v=bu

a

1

LS 2 / Informatik

17

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s, a

0

i

h

g

f

ed

c

v=bu

a

1

LS 2 / Informatik

18

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s, a

0

i

h

g

f

ed

c

v=bu

a

1

LS 2 / Informatik

19

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s, a

0

i

h

g

f

ed

c

v=bu

a

1

1

LS 2 / Informatik

20

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: s, a, b

0

i

h

g

f

ed

c

v=bu

a

1

1

LS 2 / Informatik

21

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: a, b

0

i

h

g

f

ed

c

bu

a

1

1

LS 2 / Informatik

22

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: a, b

0

i

h

g

f

ed

c

bu

a

1

1

LS 2 / Informatik

23

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: a, b

0

i

h

g

f

ed

c

bu

u=a

1

1

LS 2 / Informatik

24

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: a, b

0

i

h

g

f

ed

v=c

bu

u=a

1

1

LS 2 / Informatik

25

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: a, b, c

0

i

h

g

f

ed

v=c

bu

u=a

1

1

2

LS 2 / Informatik

26

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: a, b, c

0

i

h

g

f

e

v=d

c

bu

u=a

1

1

2

LS 2 / Informatik

27

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: a, b, c, d

0

i

h

g

f

e

v=d

c

bu

u=a

1

1

2

2

LS 2 / Informatik

28

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: b, c, d

0

i

h

g

f

e

v=d

c

bu

u=a

1

1

2

2

LS 2 / Informatik

29

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: b, c, d

0

i

h

g

f

e

d

c

u=bu

a

1

1

2

2

LS 2 / Informatik

30

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: b, c, d

0

i

h

g

f

e

d

c

u=bu

a

1

1

2

2

LS 2 / Informatik

31

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: c, d

0

i

h

g

f

e

d

c

bu

a

1

1

2

2

LS 2 / Informatik

32

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: c, d

0

i

h

g

f

e

d

u=c

bu

a

1

1

2

2

LS 2 / Informatik

33

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: c, d, f

0

i

h

g

f

e

d

u=c

bu

a

1

1

2

2

3

LS 2 / Informatik

34

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: d, f

0

i

h

g

f

e

d

c

bu

a

1

1

2

2

3

LS 2 / Informatik

35

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: d, f

0

i

h

g

f

e

u=d

c

bu

a

1

1

2

2

3

LS 2 / Informatik

36

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: d, f, e

0

i

h

g

f

e

u=d

c

bu

a

1

1

2

2

3

3

LS 2 / Informatik

37

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: f, e

0

i

h

g

f

e

u=d

c

bu

a

1

1

2

2

3

3

LS 2 / Informatik

38

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: f, e

0

i

h

g

u=f

e

u=d

c

bu

a

1

1

2

2

3

3

LS 2 / Informatik

39

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: f, e, g, i

0

i

h

g

u=f

e

u=d

c

bu

a

1

1

2

2

3

3

4

4

LS 2 / Informatik

40

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: e, g, i

0

i

h

g

u=f

e

u=d

c

bu

a

1

1

2

2

3

3

4

4

LS 2 / Informatik

41

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: g, i

0

i

h

g

f

u=e

u=d

c

bu

a

1

1

2

2

3

3

4

4

LS 2 / Informatik

42

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: i, h

0

i

h

u=g

f

e

u=d

c

bu

a

1

1

2

2

3

3

4

4

5

LS 2 / Informatik

43

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q: h

0

u=i

h

g

f

e

u=d

c

bu

a

1

1

2

2

3

3

4

4

5

LS 2 / Informatik

44

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s

Q:

0

i

u=h

g

f

e

u=d

c

bu

a

1

1

2

2

3

3

4

4

5

LS 2 / Informatik

45

BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz

Graphalgorithmen

s 0

i

h

g

f

e

u=d

c

bu

a

1

1

2

2

3

3

4

4

5

LS 2 / Informatik

46

Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).

Beweis• Laufzeit Initialisierung: O(|V|)• Nach der Initialisierung wird kein Knoten weiß gefärbt• Daher ist jeder Knoten nur einmal in der Schlange• Zeit für Schlangenoperationen ist O(|V|) • Adjazenzliste jedes Knotens wird nur durchlaufen, wenn er aus der Schlange entfernt wird• Damit wird jede Adjazenzliste maximal einmal durchlaufen (d.h. jede Kante maximal zweimal) Laufzeit für Liste: O(|E|)• Gesamtlaufzeit: O(|V|+|E|)

Graphalgorithmen

LS 2 / Informatik

47

Kürzeste Wege in ungewichteten Graphen Sei (s,t) die minimale Anzahl Kanten in einem s-t-Weg Ein s-t-Weg der Länge (s,t) heißt kürzester Weg Wollen zeigen, dass BFS korrekt kürzeste Wege berechnet

Graphalgorithmen

LS 2 / Informatik

48

Lemma 48Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV ein beliebiger Knoten. Dann gilt für jede Kante

(u,v)E:

(s,v) (s,u)+1

Beweis• Ist u erreichbar von s, dann ist es auch v• Der kürzeste Weg von s nach v kann nicht länger sein, als der kürzeste Weg

von s nach u gefolgt von der Kante (u,v). Damit gilt die Ungleichung.• Ist u nicht erreichbar von s, dann ist (s,u)= und die Ungleichung gilt.

Graphalgorithmen

LS 2 / Informatik

49

Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem Startknoten sV. Nach Abschluss

der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.

Beweis• Induktion über Anzahl von Zeitpunkten, an denen ein Knoten in Q eingefügt wird• (I.A.) Nach Initialisierung gilt d[s]=0=(s,s) und d[v]=≥(s,v) für alle vV-{s}• (I.V.) Aussage gilt nach m Einfügeoperationen• (I.S.) Betrachte nach m Einfügeoperationen einen weißen Knoten v, der während einer Suche von u entdeckt wird. Nach (I.V.)

gilt d[u]≥(s,u).• Zeile 7: d[v] wird auf d[u]+1 gesetzt• Es gilt: d[v] = d[u]+1 ≥ (s,u)+1 ≥ (s,v) nach Lemma 48

Graphalgorithmen

LS 2 / Informatik

50

Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem

Startknoten sV. Nach Abschluss der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.

Beweis• Knoten v wird dann in die Schlange eingefügt und grau gefärbt• Damit ändert sich d[v] im Laufe des Algorithmus nicht mehr und die Aussage des Lemmas bleibt

erhalten

Graphalgorithmen

LS 2 / Informatik

51

Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E), wobei v Kopf

und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.

Beweis• Induktion über die Anzahl Schlangenoperationen• (I.A.) Die Schlange enthält nur s, damit gilt das Lemma• (I.V.) Das Lemma gilt nach m Schlangenoperationen• (I.S.) Wir müssen zeigen, dass das Lemma immer noch nach m+1 Schlangenoperationen gilt. Die (m+1)ste

Schlangenoperation ist entwedereine enqueue oder dequeue Operation

Graphalgorithmen

1 r

1 r

1r i i+1

LS 2 / Informatik

52

Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E),

wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.

Beweis• Dequeue: • Wird v aus der Schlange entfernt, so wird v der neue Kopf• Dann gilt aber sicherlich d[v ] d[v ]+1 d[v ]+1• Alle anderen Ungleichungen sind nicht betroffen, also gilt das Lemma

Graphalgorithmen

1 r

1 r

1r i i+1

1

1

2

2r

LS 2 / Informatik

53

Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E), wobei v

Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.

Beweis• Enqueue: • Wird in Zeile 8 ein Knoten v eingefügt (und damit zu v ), so ist v der Knoten u,

von dem aus v entdeckt wurde• Es gilt: d[v ] = d[v] = d[u]+1 = d[v ]+1• Außerdem: d[v ] d[v ]+1 = d[u]+1 = d[v] = d[v ]• Die anderen Ungleichungen bleiben erhalten; Also gilt das Lemma

Graphalgorithmen

1 r

1 r

1r i i+1

r+1 1

r 1

r+1 1

r+1

LS 2 / Informatik

54

Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der

Breitensuche. Dann entdeckt die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.

Graphalgorithmen

LS 2 / Informatik

55

Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann

entdeckt die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.

Beweis• Fall 1 (v nicht erreichbar von s):

Graphalgorithmen

LS 2 / Informatik

56

Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann

entdeckt die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.

Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) =

Graphalgorithmen

LS 2 / Informatik

57

Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann entdeckt

die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.

Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) = • Es kann keinen ersten Knoten geben, dessen d-Wert in Zeile 7 auf gesetzt wird

Graphalgorithmen

LS 2 / Informatik

58

Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann entdeckt die

Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.

Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) = • Es kann keinen ersten Knoten geben, dessen d-Wert in Zeile 7 auf gesetzt wird• Somit wird v nie entdeckt

Graphalgorithmen

LS 2 / Informatik

59

Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann entdeckt die

Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.

Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) = • Es kann keinen ersten Knoten geben, dessen d-Wert in Zeile 7 auf gesetzt wird• Somit wird v nie entdeckt

Graphalgorithmen

LS 2 / Informatik

60

Beweis• Fall 2 (v erreichbar von s):

Graphalgorithmen

LS 2 / Informatik

61

Beweis• Fall 2 (v erreichbar von s):

• Sei V = {vV : (s,v) = k}

Graphalgorithmen

k

LS 2 / Informatik

62

Beweis• Fall 2 (v erreichbar von s):• Sei V = {vV : (s,v) = k}• Wir zeigen per Induktion über k:• Es gibt genau einen Zeitpunkt, zu dem jeder Knoten vV

(a) grau gefärbt wird(b) d[v]=k gesetzt wird(c) wenn vs, dann [v] auf u gesetzt wird für ein uV(d) v in Schlange Q eingefügt wird

Graphalgorithmen

k

k

k-1

LS 2 / Informatik

63

Beweis• Fall 2 (v erreichbar von s):• Sei V = {vV : (s,v) = k}• Wir zeigen per Induktion über k:• Es gibt genau einen Zeitpunkt, zu dem jeder Knoten vV

(a) grau gefärbt wird(b) d[v]=k gesetzt wird(c) wenn vs, dann [v] auf u gesetzt wird für ein uV(d) v in Schlange Q eingefügt wird

• Da nur zur Initialisierung Knoten weiß gefärbt werden, gibt es maximal einen solchen Zeitpunkt

Graphalgorithmen

k

k

k-1

LS 2 / Informatik

64

Beweis• Fall 2 (v erreichbar von s):• Sei V = {vV : (s,v) = k}• Wir zeigen per Induktion über k:• Es gibt genau einen Zeitpunkt, zu dem jeder Knoten vV

(a) grau gefärbt wird(b) d[v]=k gesetzt wird(c) wenn vs, dann [v] auf u gesetzt wird für ein uV(d) v in Schlange Q eingefügt wird

• Da nur zur Initialisierung Knoten weiß gefärbt werden, gibt es maximal einen solchen Zeitpunkt

Graphalgorithmen

k

k

k-1

LS 2 / Informatik

65

Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt,

und s in Q eingefügt. Somit gilt die Aussage.

Graphalgorithmen

0

LS 2 / Informatik

66

Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt,

und s in Q eingefügt. Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V

Graphalgorithmen

0

k-1

LS 2 / Informatik

67

Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt,

und s in Q eingefügt. Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V (I.S.) Q ist nie leer bis Algorithmus terminiert.

Graphalgorithmen

0

k-1

LS 2 / Informatik

68

Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt,

und s in Q eingefügt. Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V (I.S.) Q ist nie leer bis Algorithmus terminiert. Nachdem v in Q eingefügt wurde, ändern sich d[v] und [v] nicht mehr

Graphalgorithmen

0

k-1

LS 2 / Informatik

69

Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt,

und s in Q eingefügt. Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V (I.S.) Q ist nie leer bis Algorithmus terminiert. Nachdem v in Q eingefügt wurde, ändern sich d[v] und [v] nicht mehr Nach Lemma 50 sind die d-Werte monoton steigend, wenn Knoten in die Schlange

eingefügt werden

Graphalgorithmen

0

k-1

LS 2 / Informatik

70

Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt, und s in Q eingefügt.

Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V (I.S.) Q ist nie leer bis Algorithmus terminiert. Nachdem v in Q eingefügt wurde, ändern sich d[v] und [v] nicht mehr Nach Lemma 50 sind die d-Werte monoton steigend, wenn Knoten in die Schlange eingefügt werden Betrachte nun vV , k>0.

Monotonie mit d[v]≥k (Lemma 50) und (I.V.): wenn v entdeckt wird, dann erst nachdem alle Knoten aus V in die Schlange eingefügt wurden

Graphalgorithmen

0

k-1

k

k-1

LS 2 / Informatik

71

Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt, und s in Q eingefügt.

Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V (I.S.) Q ist nie leer bis Algorithmus terminiert. Nachdem v in Q eingefügt wurde, ändern sich d[v] und [v] nicht mehr Nach Lemma 50 sind die d-Werte monoton steigend, wenn Knoten in die Schlange eingefügt werden Betrachte nun vV , k>0.

Monotonie mit d[v]≥k (Lemma 50) und (I.V.): wenn v entdeckt wird, dann erst nachdem alle Knoten aus V in die Schlange eingefügt wurden

Graphalgorithmen

0

k-1

k

k-1

LS 2 / Informatik

72

Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E

und uV

Graphalgorithmen

k-1v

u

LS 2 / Informatik

73

Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E

und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird

(existiert wegen I.V.)

Graphalgorithmen

k-1v

u

LS 2 / Informatik

74

Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E

und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird

(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange

eingefügt und muss irgendwann als Kopf der Schlangeauftauchen

Graphalgorithmen

k-1v

u

LS 2 / Informatik

75

Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird

(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange

eingefügt und muss irgendwann als Kopf der Schlangeauftauchen

Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt

Graphalgorithmen

k-1v

u

LS 2 / Informatik

76

Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird

(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange

eingefügt und muss irgendwann als Kopf der Schlangeauftauchen

Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt

Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u.

Graphalgorithmen

k-1v

u

LS 2 / Informatik

77

Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird

(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange

eingefügt und muss irgendwann als Kopf der Schlangeauftauchen

Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt

Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u. Zeile 8 fügt v in die Schlange ein

Graphalgorithmen

k-1v

u

LS 2 / Informatik

78

Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird

(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange

eingefügt und muss irgendwann als Kopf der Schlangeauftauchen

Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt

Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u. Zeile 8 fügt v in die Schlange ein Damit folgt unsere Aussage per Induktion für alle V

Graphalgorithmen

k-1v

u

k

LS 2 / Informatik

79

Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird

(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange

eingefügt und muss irgendwann als Kopf der Schlangeauftauchen

Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt

Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u. Zeile 8 fügt v in die Schlange ein Damit folgt unsere Aussage per Induktion für alle V

Graphalgorithmen

k-1v

u

k

LS 2 / Informatik

80

Beweis Abschließend beobachten wir, dass wenn vV ist, dann ist [v] in V

Graphalgorithmen

k-1k

LS 2 / Informatik

81

Beweis Abschließend beobachten wir, dass wenn vV ist, dann ist [v] in V Damit können wir einen kürzesten Weg von s nach v bekommen, indem wir

einen kürzesten Weg von s nach [v] nehmen und der Kante ([v],v) folgen

Graphalgorithmen

k-1k

LS 2 / Informatik

82

Beweis Abschließend beobachten wir, dass wenn vV ist, dann ist [v] in V Damit können wir einen kürzesten Weg von s nach v bekommen, indem wir

einen kürzesten Weg von s nach [v] nehmen und der Kante ([v],v) folgen

Graphalgorithmen

k-1k

LS 2 / Informatik

83

Graphalgorithmen

Zusammenfassung (Breitensuche) Die Breitensuche kann dazu genutzt werden, um das SSSP Problem in

ungewichteten Graphen zu lösen Die Laufzeit der Breitensuche ist O(|V|+|E|)

LS 2 / Informatik

84

Kürzeste Wege in gewichteten Graphen G=(V,E) w: ER ; w(e) ist Länge der Kante e; w(u,v) ist Länge der Kante (u,v)

Für Pfad <v , v ,…, v > ist Pfadlänge gegeben durch

(u,v) = min w(p) , falls es Pfad von u nach v gibt

(u,v) = , sonst

Graphalgorithmen

0 1 k

k

iii vvw

11 ),(

Pfade p von u nach v

LS 2 / Informatik

85

Negative Kantengewichte Manchmal hat man Instanzen mit negativen Kantenlängen

Bei ungerichteten Graphen kann man Kante immer wieder vorwärts und rückwärts durchlaufen Kürzester Pfad u.U. nicht wohldefiniert Erstmal nichtnegative Kantengewichte

Graphalgorithmen

155

-10

1

7

LS 2 / Informatik

86

Lemma 52 Sei G=(V,E) ein gewichteter, gerichteter Graph mit Kantengewichten w(e) und sei <v ,…, v > ein kürzester

Weg von v nach v . Dann ist für alle 1≤i,j≤k der Weg <v ,…, v > ein kürzester Weg von v nach v .

Beweis Annahme: Es gäbe einen kürzeren Weg <v , u ,…, u ,v > von v nach v . Dann wäre < v ,…, v , u , …, u , v ,…,

v > kürzer als <v , …, v >. Widerspruch.

Graphalgorithmen

1 k 1 k

i j ji

i j

1

1 l ji

i 1 l j k k1

LS 2 / Informatik

87

Dijkstra‘s Algorithmus Graph in Adjazenzlistendarstellung Keine negativen Kantenlängen Überträgt Idee der Breitensuche auf gewichtete Graphen

Graphalgorithmen

LS 2 / Informatik

88

Dijkstra‘s Algorithmus Graph in Adjazenzlistendarstellung Keine negativen Kantenlängen Überträgt Idee der Breitensuche auf gewichtete Graphen

Graphalgorithmen

32

1

1

4

LS 2 / Informatik

89

Dijkstra‘s Algorithmus Graph in Adjazenzlistendarstellung Keine negativen Kantenlängen Überträgt Idee der Breitensuche auf gewichtete Graphen Erster Ansatz: Ersetze Kantenlängen durch mehrfache Kanten

Graphalgorithmen

3 2

1

1

4

LS 2 / Informatik

90

Dijkstra‘s Algorithmus Erste Idee: Ersetze Kantenlängen durch mehrfache Kanten Probleme: Langsam bei großen Kantenlängen; nur ganzzahlige Längen Zunächst ganzzahlige Längen. Idee: Simuliere Breitensuche effizient

Graphalgorithmen

3 2

1

1

4

LS 2 / Informatik

91

Dijkstra‘s Algorithmus Erste Idee: Ersetze Kantenlängen durch mehrfache Kanten Probleme: Langsam bei großen Kantenlängen; nur ganzzahlige Längen Zunächst ganzzahlige Längen. Idee: Simuliere Breitensuche effizient

Graphalgorithmen

3 2

1

1

4

LS 2 / Informatik

92

Dijkstra‘s Algorithmus Erste Idee: Ersetze Kantenlängen durch mehrfache Kanten Probleme: Langsam bei großen Kantenlängen; nur ganzzahlige Längen Zunächst ganzzahlige Längen. Idee: Simuliere Breitensuche effizient Aufgabe: Bestimme für jeden Knoten den Zeitpunkt, zu dem er entdeckt wird

Graphalgorithmen

3 2

1

1

4

LS 2 / Informatik

93

Dijkstra‘s Algorithmus Betrachte Breitensuche in der expandierten Version von G u,vV Wird ein Knoten u zum Zeitpunkt t (d.h. d[u]=t) entdeckt und ist Kante (u,v) mit Gewicht w(u,v) in G, so

wird v spätestens zum Zeitpunkt t+w(u,v) entdeckt Unter Umständen wird v eher über einen anderen Knoten entdeckt

Graphalgorithmen

3

11

t Wird zu Zeitpunkt ≤t+3entdecktu

v

LS 2 / Informatik

94

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4

a b

c d

LS 2 / Informatik

95

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmend[u]= für alle uVprio[u]= prio[s]=0color[u]=weiß für alle uV

d[u]= für alle uVprio[u]= prio[s]=0color[u]=weiß für alle uV

32

11

62

7

4s

a b

c d

LS 2 / Informatik

96

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s

Q: (s,0)

a b

c d

LS 2 / Informatik

97

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s

Q: (s,0)

a b

c d

LS 2 / Informatik

98

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s

Q:

u

a b

c d

LS 2 / Informatik

99

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s

Q:

u

a b

c d

LS 2 / Informatik

100

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s

Q:

u

a b

c d

LS 2 / Informatik

101

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

Q:

u

a b

c d

LS 2 / Informatik

102

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

Q:

u

a b

c d

v

LS 2 / Informatik

103

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

Q: (a,3)

u

va b

c d

LS 2 / Informatik

104

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

Q: (a,3)

u

a b

c dv

LS 2 / Informatik

105

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

Q: (a,3), (c,6)

u

a b

c dv

LS 2 / Informatik

106

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

Q: (a,3), (c,6)

u

a b

c d

LS 2 / Informatik

107

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

Q: (c,6)

u

a b

c d

LS 2 / Informatik

108

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

Q: (c,6)

u

a b

c d

LS 2 / Informatik

109

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

Q: (c,6)

u

a b

c d

LS 2 / Informatik

110

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3

Q: (c,6)

u

a b

c d

LS 2 / Informatik

111

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3

Q: (c,4), (b,5), (c,6), (d,7)

u

a b

c d

LS 2 / Informatik

112

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3

Q: (c,4), (b,5), (c,6), (d,7)

u

a b

c d

LS 2 / Informatik

113

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3

Q: (b,5), (c,6), (d,7)

u

a b

c d

LS 2 / Informatik

114

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3

4

Q: (b,5), (c,6), (d,7)

u

a b

c d

LS 2 / Informatik

115

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3

4

Q: (b,5), (a,6), (c,6), (d,7), (d,11)

u

a b

c d

LS 2 / Informatik

116

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3

4

Q: (a,6), (c,6), (d,7), (d,11)

u

a b

c d

LS 2 / Informatik

117

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3 5

4

Q: (a,6), (c,6), (d,7), (d,11)

u

a b

c d

LS 2 / Informatik

118

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3 5

4

Q: (a,6), (c,6), (d,6), (d,7), (d,11)

u

a b

c d

LS 2 / Informatik

119

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3 5

4

Q: (c,6), (d,6), (d,7), (d,11)

u

a b

c d

LS 2 / Informatik

120

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3 5

4

Q: (d,6), (d,7), (d,11)

u

a b

c d

LS 2 / Informatik

121

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3 5

4

Q: (d,7), (d,11)

u

a b

c d

LS 2 / Informatik

122

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3 5

64

Q: (d,7), (d,11)

u

a b

c d

LS 2 / Informatik

123

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3 5

64

Q: (d,11)

u

a b

c d

LS 2 / Informatik

124

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3 5

64

Q:

u

a b

c d

LS 2 / Informatik

125

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

32

11

62

7

4s0

3 5

64

u

a b

c d

LS 2 / Informatik

126

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

GraphalgorithmenBeobachtung:Sind mehrere Paare (u,p) in der Prioritätenschlange, so ist nur das mit der geringsten Priorität relevant

Beobachtung:Sind mehrere Paare (u,p) in der Prioritätenschlange, so ist nur das mit der geringsten Priorität relevant

LS 2 / Informatik

127

BreitensucheSimulation(G,w,s)

1. Initialisiere Simulation

2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein

3. while Q do

4. (u, prio[u]) ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. d[u] prio[u]

8. for each vAdj[u] do1.

9. prio[v] d[u] + w(u,v)

10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein

Graphalgorithmen

Beobachtung:d-Werte und Prioritäten fast identisch

Beobachtung:d-Werte und Prioritäten fast identisch

LS 2 / Informatik

128

Dijkstra‘s Algorithmus(G,w,s)

1. Initialisiere SSSP

2. Q V[G]

3. while Q do

4. u ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. for each vAdj[u] do1.

8. if d[u] + w(u,v)< d[v] then

9. d[v] d[u] + w(u,v)

10. DecreaseKey(v,d[v])

Graphalgorithmen

d[u]= für alle uV-{s}d[s]=0color[u]=weiß für alle uV

d[u]= für alle uV-{s}d[s]=0color[u]=weiß für alle uV

LS 2 / Informatik

129

Dijkstra‘s Algorithmus(G,w,s)

1. Initialisiere SSSP

2. Q V[G]

3. while Q do

4. u ExtractMin(Q)

5. if color[u]=weiß then

6. color[u] schwarz

7. for each vAdj[u] do1.

8. if d[u] + w(u,v)< d[v] then

9. d[v] d[u] + w(u,v)

10. DecreaseKey(v,d[v])

Graphalgorithmen

Invariante:Für alle schwarzen Knoten wurde

die Distanz korrekt berechnet.

Invariante:Für alle schwarzen Knoten wurde

die Distanz korrekt berechnet.

LS 2 / Informatik

130

Prioritätenschlangen mit DecreaseKey DecreaseKey(v,p): Erlaubt das Verringern der Priorität von Schlüssel v auf

Wert p

Einfachste Implementation Lösche v Füge v mit Priorität p in Prioritätenschlange ein

Graphalgorithmen

LS 2 / Informatik

131

Lemma 53Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV ein beliebiger Knoten. Dann gilt für jede Kante (u,v)E:

(s,v) (s,u)+w(u,v)

Beweis• (Argumentation identisch zu Lemma 48)• Ist u erreichbar von s, dann ist es auch v• Der kürzeste Weg von s nach v kann nicht länger sein, als der kürzeste Weg

von s nach u gefolgt von der Kante (u,v). Damit gilt die Ungleichung.• Ist u nicht erreichbar von s, dann ist (s,u)= und die Ungleichung gilt.

Graphalgorithmen

LS 2 / Informatik

132

Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:

d[w] (s,w).

Beweis• Zeile 9 ist die einzige Zeile, in der d-Werte geändert werden.

Graphalgorithmen

LS 2 / Informatik

133

Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:

d[w] (s,w).

Beweis• Zeile 9 ist die einzige Zeile, in der d-Werte geändert werden.• Wir zeigen per Induktion über die Ausführungen von Zeile 9, dass Lemma 54 gilt.• (I.A.) Vor der ersten Ausführung entsprechen die d-Werte den Werten direkt nach der Initialisierung. Für

diese Werte gilt das Lemma.

Graphalgorithmen

LS 2 / Informatik

134

Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:

d[w] (s,w).

Beweis• Zeile 9 ist die einzige Zeile, in der d-Werte geändert werden.• Wir zeigen per Induktion über die Ausführungen von Zeile 9, dass Lemma 54 gilt.• (I.A.) Vor der ersten Ausführung entsprechen die d-Werte den Werten direkt nach der Initialisierung. Für diese

Werte gilt das Lemma.• (I.V.) Das Lemma gilt nach m Ausführungen von Zeile 9.

Graphalgorithmen

LS 2 / Informatik

135

Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:

d[w] (s,w).

Beweis• Zeile 9 ist die einzige Zeile, in der d-Werte geändert werden.• Wir zeigen per Induktion über die Ausführungen von Zeile 9, dass Lemma 54 gilt.• (I.A.) Vor der ersten Ausführung entsprechen die d-Werte den Werten direkt nach der Initialisierung. Für diese Werte gilt das

Lemma.• (I.V.) Das Lemma gilt nach m Ausführungen von Zeile 9.• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und

d[u] (s,u). Wir setzen in Zeile 9 d[v] auf d[u]+w(u,v).

Graphalgorithmen

LS 2 / Informatik

136

Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:

d[w] (s,w).

Beweis• Zeile 9 ist die einzige Zeile, in der d-Werte geändert werden.• Wir zeigen per Induktion über die Ausführungen von Zeile 9, dass Lemma 54 gilt.• (I.A.) Vor der ersten Ausführung entsprechen die d-Werte den Werten direkt nach der Initialisierung. Für diese Werte gilt das

Lemma.• (I.V.) Das Lemma gilt nach m Ausführungen von Zeile 9.• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und

d[u] (s,u). Wir setzen in Zeile 9 d[v] auf d[u]+w(u,v).

Graphalgorithmen

LS 2 / Informatik

137

Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten u:

d[w] (s,w).

Beweis• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und

d[u] (s,u). Wir setzen in Zeile 9 d[v] auf d[u]+w(u,v).

Graphalgorithmen

LS 2 / Informatik

138

Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:

d[w] (s,w).

Beweis• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und

d[u] (s,u). Wir setzen in Zeile 9 d[v] auf d[u]+w(u,v).

Graphalgorithmen

LS 2 / Informatik

139

Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:

d[w] (s,w).

Beweis• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und

d[u] (s,u). Wir setzen in Zeile 9 d[v] auf min{d[v], d[u]+w(u,v)}. Es gilt d[v] = d[u] + w(u,v) (s,u) + w(u,v) (s,v) nach Lemma 53. Somit gilt auch hier das Lemma.

Graphalgorithmen

LS 2 / Informatik

140

Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:

d[w] (s,w).

Beweis• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und

d[u] (s,u). Wir setzen in Zeile 9 d[v] auf min{d[v], d[u]+w(u,v)}. Es gilt d[v] = d[u] + w(u,v) (s,u) + w(u,v) (s,v) nach Lemma 53. Somit gilt auch hier das Lemma.

Graphalgorithmen

LS 2 / Informatik

141

Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E)

mit nichtnegativen Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.

Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.

Graphalgorithmen

LS 2 / Informatik

142

Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit

nichtnegativen Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.

Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.• Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten uV zum Zeitpunkt des

Schwarzfärbens d[u] = (s,u) gilt.

Graphalgorithmen

LS 2 / Informatik

143

Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen

Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.

Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.

• Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten uV zum Zeitpunkt des Schwarzfärbens d[u] = (s,u) gilt.

• Annahme: Es gibt einen Knoten u, für den zum Zeitpunkt des Schwarzfärbens d[u] (s,u) gilt.

Graphalgorithmen

LS 2 / Informatik

144

Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen

Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.

Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.• Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten uV zum Zeitpunkt des Schwarzfärbens d[u] =

(s,u) gilt. • Annahme: Es gibt einen Knoten u, für den zum Zeitpunkt des Schwarzfärbens

d[u] (s,u) gilt. Sei u der erste solche Knoten. Betrachte die Situation zu Beginn des Durchlaufs der while-Schleife, in dem u schwarz gefärbt wird.

Graphalgorithmen

LS 2 / Informatik

145

Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen Kantengewichten

und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.

Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.

• Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten uV zum Zeitpunkt des Schwarzfärbens d[u] = (s,u) gilt.

• Annahme: Es gibt einen Knoten u, für den zum Zeitpunkt des Schwarzfärbens d[u] (s,u) gilt. Sei u der erste solche Knoten. Betrachte die Situation zu Beginn des Durchlaufs der while-Schleife, in dem u schwarz gefärbt wird. Es gilt us, da s als erster Knoten schwarz gefärbt wird und zu diesem Zeitpunkt d[s]=0=(s,s) gilt. (Widerspruch!)

Graphalgorithmen

LS 2 / Informatik

146

Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen Kantengewichten

und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.

Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.

• Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten uV zum Zeitpunkt des Schwarzfärbens d[u] = (s,u) gilt.

• Annahme: Es gibt einen Knoten u, für den zum Zeitpunkt des Schwarzfärbens d[u] (s,u) gilt. Sei u der erste solche Knoten. Betrachte die Situation zu Beginn des Durchlaufs der while-Schleife, in dem u schwarz gefärbt wird. Es gilt us, da s als erster Knoten schwarz gefärbt wird und zu diesem Zeitpunkt d[s]=0=(s,s) gilt. (Widerspruch!)

Graphalgorithmen

LS 2 / Informatik

147

Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen

Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.

Beweis• Es gibt Weg von s nach u, da ansonsten wegen Lemma 54 d[u]==(s,u) gilt.

(Widerspruch!)

Graphalgorithmen

LS 2 / Informatik

148

Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen

Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.

Beweis• Es gibt Weg von s nach u, da ansonsten wegen Lemma 54 d[u]==(s,u) gilt.

(Widerspruch!)• Sei nun y der erste weiße Knoten auf einem kürzesten Weg von s nach u und x sein Vorgänger.

Graphalgorithmen

32 4

s x

y 4

u

LS 2 / Informatik

149

Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen

Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.

Beweis• Es gibt Weg von s nach u, da ansonsten wegen Lemma 54 d[u]==(s,u) gilt.

(Widerspruch!)• Sei nun y der erste weiße Knoten auf einem kürzesten Weg von s nach u und x sein Vorgänger.

Graphalgorithmen

32 4

s x

y 4

u

LS 2 / Informatik

150

Beweis• Es gilt d[x]=(s,u) nach Wahl von u.

Graphalgorithmen

32 4

s x

y 4

u

LS 2 / Informatik

151

Beweis• Es gilt d[x]=(s,u) nach Wahl von u.

• In Zeile 9 wird nun d[y] auf min{d[y], d[x]+w(x,y)} gesetzt. Nach Lemma 52 ist der Weg von s nach y über x ein kürzester Weg (da er „Teilweg“ des kürzesten Weges von s nach u ist).

Graphalgorithmen

32 4

s x

y 4

u

LS 2 / Informatik

152

Beweis• Es gilt d[x]=(s,u) nach Wahl von u.• In Zeile 9 wird nun d[y] auf min{d[y], d[x]+w(x,y)} gesetzt. Nach Lemma 52 ist der Weg

von s nach y über x ein kürzester Weg (da er „Teilweg“ des kürzesten Weges von s nach u ist). Somit ist d[x]+w(x,y)=(s,y) und d[y] wird wegen Lemma 53 auf diesen Wert gesetzt.

Graphalgorithmen

32 4

s x

y 4

u

LS 2 / Informatik

153

Beweis• Es gilt d[x]=(s,u) nach Wahl von u.• In Zeile 9 wird nun d[y] auf min{d[y], d[x]+w(x,y)} gesetzt. Nach Lemma 52 ist der Weg von s

nach y über x ein kürzester Weg (da er „Teilweg“ des kürzesten Weges von s nach u ist). Somit ist d[x]+w(x,y)=(s,y) und d[y] wird wegen Lemma 53 auf diesen Wert gesetzt.

• Da die Kantengewichte nichtnegativ sind, folgt (s,y)≤ (s,u) und somit nach Lemma 53 d[y]=(s,y)≤ (s,u) ≤ d[u].

Graphalgorithmen

32 4

s x

y 4

u

LS 2 / Informatik

154

Beweis• Es gilt d[x]=(s,u) nach Wahl von u.• In Zeile 9 wird nun d[y] auf min{d[y], d[x]+w(x,y)} gesetzt. Nach Lemma 52 ist der Weg von s nach y über x

ein kürzester Weg (da er „Teilweg“ des kürzesten Weges von s nach u ist). Somit ist d[x]+w(x,y)=(s,y) und d[y] wird wegen Lemma 53 auf diesen Wert gesetzt.

• Da die Kantengewichte nichtnegativ sind, folgt (s,y)≤ (s,u) und somit nach Lemma 53 d[y]=(s,y)≤ (s,u) ≤ d[u].

• Da aber u von ExtractMin aus der Prioritätenschlange entfernt wurde, giltd[u] ≤ d[y] und somit d[y]=(s,y)= (s,u) = d[u]. Widerspruch!

Graphalgorithmen

32 4

s x

y 4

u

LS 2 / Informatik

155

Beweis• Es gilt d[x]=(s,u) nach Wahl von u.• In Zeile 9 wird nun d[y] auf min{d[y], d[x]+w(x,y)} gesetzt. Nach Lemma 52 ist der Weg von s nach y über x

ein kürzester Weg (da er „Teilweg“ des kürzesten Weges von s nach u ist). Somit ist d[x]+w(x,y)=(s,y) und d[y] wird wegen Lemma 53 auf diesen Wert gesetzt.

• Da die Kantengewichte nichtnegativ sind, folgt (s,y)≤ (s,u) und somit nach Lemma 53 d[y]=(s,y)≤ (s,u) ≤ d[u].

• Da aber u von ExtractMin aus der Prioritätenschlange entfernt wurde, giltd[u] ≤ d[y] und somit d[y]=(s,y)= (s,u) = d[u]. Widerspruch!

Graphalgorithmen

32 4

s x

y 4

u