![Page 1: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/1.jpg)
LS 2 / Informatik
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
![Page 2: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/2.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/3.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/4.jpg)
LS 2 / Informatik
4
Beispiel (mögl. Zustand bei einer Breitensuche)
Graphalgorithmen
s
![Page 5: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/5.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/6.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/7.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/8.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/9.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/10.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/11.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/12.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/13.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/14.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/15.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/16.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/17.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/18.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/19.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/20.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/21.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/22.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/23.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/24.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/25.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/26.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/27.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/28.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/29.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/30.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/31.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/32.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/33.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/34.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/35.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/36.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/37.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/38.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/39.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/40.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/41.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/42.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/43.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/44.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/45.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/46.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/47.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/48.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/49.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/50.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/51.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/52.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/53.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/54.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/55.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/56.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/57.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/58.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/59.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/60.jpg)
LS 2 / Informatik
60
Beweis• Fall 2 (v erreichbar von s):
Graphalgorithmen
![Page 61: Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/61.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/62.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/63.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/64.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/65.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/66.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/67.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/68.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/69.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/70.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/71.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/72.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/73.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/74.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/75.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/76.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/77.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/78.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/79.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/80.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/81.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/82.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/83.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/84.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/85.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/86.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/87.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/88.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/89.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/90.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/91.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/92.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/93.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/94.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/95.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/96.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/97.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/98.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/99.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/100.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/101.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/102.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/103.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/104.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/105.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/106.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/107.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/108.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/109.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/110.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/111.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/112.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/113.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/114.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/115.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/116.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/117.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/118.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/119.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/120.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/121.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/122.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/123.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/124.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/125.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/126.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/127.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/128.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/129.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/130.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/131.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/132.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/133.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/134.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/135.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/136.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/137.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/138.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/139.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/140.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/141.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/142.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/143.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/144.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/145.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/146.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/147.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/148.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/149.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/150.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/151.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/152.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/153.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/154.jpg)
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)](https://reader035.vdokument.com/reader035/viewer/2022062315/56814fb3550346895dbd6cc6/html5/thumbnails/155.jpg)
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