Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

155
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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)

Page 1: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

Page 2: 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

Page 3: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 4: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

4

Beispiel (mögl. Zustand bei einer Breitensuche)

Graphalgorithmen

s

Page 5: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 6: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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)

Page 7: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 8: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 9: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 10: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 11: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 12: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 13: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 14: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 15: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 16: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 17: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 18: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 19: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 20: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 21: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 22: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 23: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 24: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 25: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 26: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 27: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 28: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 29: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 30: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 31: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 32: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 33: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 34: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 35: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 36: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 37: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 38: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 39: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 40: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 41: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 42: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 43: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 44: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 45: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 46: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 47: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 48: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 49: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 50: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 51: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 52: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 53: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 54: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 55: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 56: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 57: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 58: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 59: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 60: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

60

Beweis• Fall 2 (v erreichbar von s):

Graphalgorithmen

Page 61: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

61

Beweis• Fall 2 (v erreichbar von s):

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

Graphalgorithmen

k

Page 62: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 63: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 64: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 65: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 66: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 67: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 68: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 69: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 70: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 71: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 72: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 73: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 74: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 75: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 76: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 77: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 78: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 79: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 80: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

80

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

Graphalgorithmen

k-1k

Page 81: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 82: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 83: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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|)

Page 84: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 85: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 86: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 87: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

87

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

Graphalgorithmen

Page 88: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 89: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 90: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 91: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 92: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 93: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 94: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 95: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 96: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 97: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 98: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 99: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 100: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 101: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 102: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 103: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 104: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 105: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 106: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 107: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 108: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 109: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 110: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 111: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 112: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 113: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 114: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 115: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 116: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 117: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 118: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 119: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 120: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 121: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 122: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 123: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 124: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 125: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 126: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 127: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 128: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 129: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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.

Page 130: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 131: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 132: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 133: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 134: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 135: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 136: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 137: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 138: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 139: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 140: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 141: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 142: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 143: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 144: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 145: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 146: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 147: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 148: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 149: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 150: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

LS 2 / Informatik

150

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

Graphalgorithmen

32 4

s x

y 4

u

Page 151: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 152: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 153: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 154: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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

Page 155: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)

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