Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
description
Transcript of Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik
2
Single Source Shortest Path (SSSP) Startknoten s Aufgabe: Berechne kürzeste Wege von s zu allen anderen Knoten
All Pairs Shortest Path (APSP) Aufgabe: Berechne kürzeste Wege zwischen allen Knotenpaaren
SSSP in ungerichteten Graphen (Breitensuche) Graph in Adjazenzlistendarstellung Startknoten s Nutze Kanten von G, um alle Knoten zu finden, die von s aus erreichbar sind Finde kürzeste Distanz (Anzahl Kanten) zu jedem anderen Knoten
Graphalgorithmen
LS 2 / Informatik
3
Invariante (Breitensuche) Knoten haben 3 Farben: weiß, grau und schwarz Zu Beginn: Alle Knoten sind weiß Ein nicht-weißer Knoten heißt „entdeckt“ Unterscheidung grau-schwarz dient zur Steuerung des Algorithmus Wenn (u,v)E ist und u ist schwarz, dann sind seine adjazenten Knoten grau oder schwarz Graue Knoten können adjazente weiße Knoten haben
Graphalgorithmen
LS 2 / Informatik
4
Beispiel (mögl. Zustand bei einer Breitensuche)
Graphalgorithmen
s
LS 2 / Informatik
5
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
LS 2 / Informatik
6
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
d[u]: Abstand zu s (zu Beginn )[u]: Vaterknoten von u (zu Beginn nil)d[u]: Abstand zu s (zu Beginn )[u]: Vaterknoten von u (zu Beginn nil)
LS 2 / Informatik
7
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
GraphalgorithmenFür jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil
Für jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil
LS 2 / Informatik
8
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
GraphalgorithmenFür jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil
Für jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil
Für Knoten s:• color[s] = grau• d[s]=0• [s]=nil• s wird in Schlange Q eingefügt
Für Knoten s:• color[s] = grau• d[s]=0• [s]=nil• s wird in Schlange Q eingefügt
LS 2 / Informatik
9
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
b
a
LS 2 / Informatik
10
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
b
a
u
LS 2 / Informatik
11
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
bu
v=a
LS 2 / Informatik
12
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
bu
v=a
LS 2 / Informatik
13
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
bu
v=a
LS 2 / Informatik
14
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
bu
v=a
1
LS 2 / Informatik
15
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a
0
i
h
g
f
ed
c
bu
v=a
1
LS 2 / Informatik
16
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a
0
i
h
g
f
ed
c
v=bu
a
1
LS 2 / Informatik
17
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a
0
i
h
g
f
ed
c
v=bu
a
1
LS 2 / Informatik
18
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a
0
i
h
g
f
ed
c
v=bu
a
1
LS 2 / Informatik
19
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a
0
i
h
g
f
ed
c
v=bu
a
1
1
LS 2 / Informatik
20
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a, b
0
i
h
g
f
ed
c
v=bu
a
1
1
LS 2 / Informatik
21
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b
0
i
h
g
f
ed
c
bu
a
1
1
LS 2 / Informatik
22
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b
0
i
h
g
f
ed
c
bu
a
1
1
LS 2 / Informatik
23
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b
0
i
h
g
f
ed
c
bu
u=a
1
1
LS 2 / Informatik
24
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b
0
i
h
g
f
ed
v=c
bu
u=a
1
1
LS 2 / Informatik
25
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b, c
0
i
h
g
f
ed
v=c
bu
u=a
1
1
2
LS 2 / Informatik
26
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b, c
0
i
h
g
f
e
v=d
c
bu
u=a
1
1
2
LS 2 / Informatik
27
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b, c, d
0
i
h
g
f
e
v=d
c
bu
u=a
1
1
2
2
LS 2 / Informatik
28
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: b, c, d
0
i
h
g
f
e
v=d
c
bu
u=a
1
1
2
2
LS 2 / Informatik
29
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: b, c, d
0
i
h
g
f
e
d
c
u=bu
a
1
1
2
2
LS 2 / Informatik
30
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: b, c, d
0
i
h
g
f
e
d
c
u=bu
a
1
1
2
2
LS 2 / Informatik
31
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: c, d
0
i
h
g
f
e
d
c
bu
a
1
1
2
2
LS 2 / Informatik
32
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: c, d
0
i
h
g
f
e
d
u=c
bu
a
1
1
2
2
LS 2 / Informatik
33
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: c, d, f
0
i
h
g
f
e
d
u=c
bu
a
1
1
2
2
3
LS 2 / Informatik
34
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: d, f
0
i
h
g
f
e
d
c
bu
a
1
1
2
2
3
LS 2 / Informatik
35
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: d, f
0
i
h
g
f
e
u=d
c
bu
a
1
1
2
2
3
LS 2 / Informatik
36
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: d, f, e
0
i
h
g
f
e
u=d
c
bu
a
1
1
2
2
3
3
LS 2 / Informatik
37
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: f, e
0
i
h
g
f
e
u=d
c
bu
a
1
1
2
2
3
3
LS 2 / Informatik
38
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: f, e
0
i
h
g
u=f
e
u=d
c
bu
a
1
1
2
2
3
3
LS 2 / Informatik
39
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: f, e, g, i
0
i
h
g
u=f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
LS 2 / Informatik
40
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: e, g, i
0
i
h
g
u=f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
LS 2 / Informatik
41
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: g, i
0
i
h
g
f
u=e
u=d
c
bu
a
1
1
2
2
3
3
4
4
LS 2 / Informatik
42
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: i, h
0
i
h
u=g
f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
5
LS 2 / Informatik
43
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: h
0
u=i
h
g
f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
5
LS 2 / Informatik
44
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q:
0
i
u=h
g
f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
5
LS 2 / Informatik
45
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s 0
i
h
g
f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
5
LS 2 / Informatik
46
Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).
Beweis• Laufzeit Initialisierung: O(|V|)• Nach der Initialisierung wird kein Knoten weiß gefärbt• Daher ist jeder Knoten nur einmal in der Schlange• Zeit für Schlangenoperationen ist O(|V|) • Adjazenzliste jedes Knotens wird nur durchlaufen, wenn er aus der Schlange entfernt wird• Damit wird jede Adjazenzliste maximal einmal durchlaufen (d.h. jede Kante maximal zweimal) Laufzeit für Liste: O(|E|)• Gesamtlaufzeit: O(|V|+|E|)
Graphalgorithmen
LS 2 / Informatik
47
Kürzeste Wege in ungewichteten Graphen Sei (s,t) die minimale Anzahl Kanten in einem s-t-Weg Ein s-t-Weg der Länge (s,t) heißt kürzester Weg Wollen zeigen, dass BFS korrekt kürzeste Wege berechnet
Graphalgorithmen
LS 2 / Informatik
48
Lemma 48Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV ein beliebiger Knoten. Dann gilt für jede Kante
(u,v)E:
(s,v) (s,u)+1
Beweis• Ist u erreichbar von s, dann ist es auch v• Der kürzeste Weg von s nach v kann nicht länger sein, als der kürzeste Weg
von s nach u gefolgt von der Kante (u,v). Damit gilt die Ungleichung.• Ist u nicht erreichbar von s, dann ist (s,u)= und die Ungleichung gilt.
Graphalgorithmen
LS 2 / Informatik
49
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem Startknoten sV. Nach Abschluss
der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Induktion über Anzahl von Zeitpunkten, an denen ein Knoten in Q eingefügt wird• (I.A.) Nach Initialisierung gilt d[s]=0=(s,s) und d[v]=≥(s,v) für alle vV-{s}• (I.V.) Aussage gilt nach m Einfügeoperationen• (I.S.) Betrachte nach m Einfügeoperationen einen weißen Knoten v, der während einer Suche von u entdeckt wird. Nach (I.V.)
gilt d[u]≥(s,u).• Zeile 7: d[v] wird auf d[u]+1 gesetzt• Es gilt: d[v] = d[u]+1 ≥ (s,u)+1 ≥ (s,v) nach Lemma 48
Graphalgorithmen
LS 2 / Informatik
50
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem
Startknoten sV. Nach Abschluss der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Knoten v wird dann in die Schlange eingefügt und grau gefärbt• Damit ändert sich d[v] im Laufe des Algorithmus nicht mehr und die Aussage des Lemmas bleibt
erhalten
Graphalgorithmen
LS 2 / Informatik
51
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E), wobei v Kopf
und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Induktion über die Anzahl Schlangenoperationen• (I.A.) Die Schlange enthält nur s, damit gilt das Lemma• (I.V.) Das Lemma gilt nach m Schlangenoperationen• (I.S.) Wir müssen zeigen, dass das Lemma immer noch nach m+1 Schlangenoperationen gilt. Die (m+1)ste
Schlangenoperation ist entwedereine enqueue oder dequeue Operation
Graphalgorithmen
1 r
1 r
1r i i+1
LS 2 / Informatik
52
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E),
wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Dequeue: • Wird v aus der Schlange entfernt, so wird v der neue Kopf• Dann gilt aber sicherlich d[v ] d[v ]+1 d[v ]+1• Alle anderen Ungleichungen sind nicht betroffen, also gilt das Lemma
Graphalgorithmen
1 r
1 r
1r i i+1
1
1
2
2r
LS 2 / Informatik
53
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E), wobei v
Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Enqueue: • Wird in Zeile 8 ein Knoten v eingefügt (und damit zu v ), so ist v der Knoten u,
von dem aus v entdeckt wurde• Es gilt: d[v ] = d[v] = d[u]+1 = d[v ]+1• Außerdem: d[v ] d[v ]+1 = d[u]+1 = d[v] = d[v ]• Die anderen Ungleichungen bleiben erhalten; Also gilt das Lemma
Graphalgorithmen
1 r
1 r
1r i i+1
r+1 1
r 1
r+1 1
r+1
LS 2 / Informatik
54
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der
Breitensuche. Dann entdeckt die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Graphalgorithmen
LS 2 / Informatik
55
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann
entdeckt die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Beweis• Fall 1 (v nicht erreichbar von s):
Graphalgorithmen
LS 2 / Informatik
56
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann
entdeckt die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) =
Graphalgorithmen
LS 2 / Informatik
57
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann entdeckt
die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) = • Es kann keinen ersten Knoten geben, dessen d-Wert in Zeile 7 auf gesetzt wird
Graphalgorithmen
LS 2 / Informatik
58
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann entdeckt die
Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) = • Es kann keinen ersten Knoten geben, dessen d-Wert in Zeile 7 auf gesetzt wird• Somit wird v nie entdeckt
Graphalgorithmen
LS 2 / Informatik
59
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann entdeckt die
Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) = • Es kann keinen ersten Knoten geben, dessen d-Wert in Zeile 7 auf gesetzt wird• Somit wird v nie entdeckt
Graphalgorithmen
LS 2 / Informatik
60
Beweis• Fall 2 (v erreichbar von s):
Graphalgorithmen
LS 2 / Informatik
61
Beweis• Fall 2 (v erreichbar von s):
• Sei V = {vV : (s,v) = k}
Graphalgorithmen
k
LS 2 / Informatik
62
Beweis• Fall 2 (v erreichbar von s):• Sei V = {vV : (s,v) = k}• Wir zeigen per Induktion über k:• Es gibt genau einen Zeitpunkt, zu dem jeder Knoten vV
(a) grau gefärbt wird(b) d[v]=k gesetzt wird(c) wenn vs, dann [v] auf u gesetzt wird für ein uV(d) v in Schlange Q eingefügt wird
Graphalgorithmen
k
k
k-1
LS 2 / Informatik
63
Beweis• Fall 2 (v erreichbar von s):• Sei V = {vV : (s,v) = k}• Wir zeigen per Induktion über k:• Es gibt genau einen Zeitpunkt, zu dem jeder Knoten vV
(a) grau gefärbt wird(b) d[v]=k gesetzt wird(c) wenn vs, dann [v] auf u gesetzt wird für ein uV(d) v in Schlange Q eingefügt wird
• Da nur zur Initialisierung Knoten weiß gefärbt werden, gibt es maximal einen solchen Zeitpunkt
Graphalgorithmen
k
k
k-1
LS 2 / Informatik
64
Beweis• Fall 2 (v erreichbar von s):• Sei V = {vV : (s,v) = k}• Wir zeigen per Induktion über k:• Es gibt genau einen Zeitpunkt, zu dem jeder Knoten vV
(a) grau gefärbt wird(b) d[v]=k gesetzt wird(c) wenn vs, dann [v] auf u gesetzt wird für ein uV(d) v in Schlange Q eingefügt wird
• Da nur zur Initialisierung Knoten weiß gefärbt werden, gibt es maximal einen solchen Zeitpunkt
Graphalgorithmen
k
k
k-1
LS 2 / Informatik
65
Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt,
und s in Q eingefügt. Somit gilt die Aussage.
Graphalgorithmen
0
LS 2 / Informatik
66
Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt,
und s in Q eingefügt. Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V
Graphalgorithmen
0
k-1
LS 2 / Informatik
67
Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt,
und s in Q eingefügt. Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V (I.S.) Q ist nie leer bis Algorithmus terminiert.
Graphalgorithmen
0
k-1
LS 2 / Informatik
68
Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt,
und s in Q eingefügt. Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V (I.S.) Q ist nie leer bis Algorithmus terminiert. Nachdem v in Q eingefügt wurde, ändern sich d[v] und [v] nicht mehr
Graphalgorithmen
0
k-1
LS 2 / Informatik
69
Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt,
und s in Q eingefügt. Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V (I.S.) Q ist nie leer bis Algorithmus terminiert. Nachdem v in Q eingefügt wurde, ändern sich d[v] und [v] nicht mehr Nach Lemma 50 sind die d-Werte monoton steigend, wenn Knoten in die Schlange
eingefügt werden
Graphalgorithmen
0
k-1
LS 2 / Informatik
70
Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt, und s in Q eingefügt.
Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V (I.S.) Q ist nie leer bis Algorithmus terminiert. Nachdem v in Q eingefügt wurde, ändern sich d[v] und [v] nicht mehr Nach Lemma 50 sind die d-Werte monoton steigend, wenn Knoten in die Schlange eingefügt werden Betrachte nun vV , k>0.
Monotonie mit d[v]≥k (Lemma 50) und (I.V.): wenn v entdeckt wird, dann erst nachdem alle Knoten aus V in die Schlange eingefügt wurden
Graphalgorithmen
0
k-1
k
k-1
LS 2 / Informatik
71
Beweis (I.A.) V ={s}. Während der Initialisierung wird s grau gefärbt, d[s] auf 0 gesetzt, und s in Q eingefügt.
Somit gilt die Aussage. (I.V.) Aussage gilt für alle Knoten aus V (I.S.) Q ist nie leer bis Algorithmus terminiert. Nachdem v in Q eingefügt wurde, ändern sich d[v] und [v] nicht mehr Nach Lemma 50 sind die d-Werte monoton steigend, wenn Knoten in die Schlange eingefügt werden Betrachte nun vV , k>0.
Monotonie mit d[v]≥k (Lemma 50) und (I.V.): wenn v entdeckt wird, dann erst nachdem alle Knoten aus V in die Schlange eingefügt wurden
Graphalgorithmen
0
k-1
k
k-1
LS 2 / Informatik
72
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E
und uV
Graphalgorithmen
k-1v
u
LS 2 / Informatik
73
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E
und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.)
Graphalgorithmen
k-1v
u
LS 2 / Informatik
74
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E
und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Graphalgorithmen
k-1v
u
LS 2 / Informatik
75
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt
Graphalgorithmen
k-1v
u
LS 2 / Informatik
76
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt
Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u.
Graphalgorithmen
k-1v
u
LS 2 / Informatik
77
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt
Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u. Zeile 8 fügt v in die Schlange ein
Graphalgorithmen
k-1v
u
LS 2 / Informatik
78
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt
Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u. Zeile 8 fügt v in die Schlange ein Damit folgt unsere Aussage per Induktion für alle V
Graphalgorithmen
k-1v
u
k
LS 2 / Informatik
79
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt
Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u. Zeile 8 fügt v in die Schlange ein Damit folgt unsere Aussage per Induktion für alle V
Graphalgorithmen
k-1v
u
k
LS 2 / Informatik
80
Beweis Abschließend beobachten wir, dass wenn vV ist, dann ist [v] in V
Graphalgorithmen
k-1k
LS 2 / Informatik
81
Beweis Abschließend beobachten wir, dass wenn vV ist, dann ist [v] in V Damit können wir einen kürzesten Weg von s nach v bekommen, indem wir
einen kürzesten Weg von s nach [v] nehmen und der Kante ([v],v) folgen
Graphalgorithmen
k-1k
LS 2 / Informatik
82
Beweis Abschließend beobachten wir, dass wenn vV ist, dann ist [v] in V Damit können wir einen kürzesten Weg von s nach v bekommen, indem wir
einen kürzesten Weg von s nach [v] nehmen und der Kante ([v],v) folgen
Graphalgorithmen
k-1k
LS 2 / Informatik
83
Graphalgorithmen
Zusammenfassung (Breitensuche) Die Breitensuche kann dazu genutzt werden, um das SSSP Problem in
ungewichteten Graphen zu lösen Die Laufzeit der Breitensuche ist O(|V|+|E|)
LS 2 / Informatik
84
Kürzeste Wege in gewichteten Graphen G=(V,E) w: ER ; w(e) ist Länge der Kante e; w(u,v) ist Länge der Kante (u,v)
Für Pfad <v , v ,…, v > ist Pfadlänge gegeben durch
(u,v) = min w(p) , falls es Pfad von u nach v gibt
(u,v) = , sonst
Graphalgorithmen
0 1 k
k
iii vvw
11 ),(
Pfade p von u nach v
LS 2 / Informatik
85
Negative Kantengewichte Manchmal hat man Instanzen mit negativen Kantenlängen
Bei ungerichteten Graphen kann man Kante immer wieder vorwärts und rückwärts durchlaufen Kürzester Pfad u.U. nicht wohldefiniert Erstmal nichtnegative Kantengewichte
Graphalgorithmen
155
-10
1
7
LS 2 / Informatik
86
Lemma 52 Sei G=(V,E) ein gewichteter, gerichteter Graph mit Kantengewichten w(e) und sei <v ,…, v > ein kürzester
Weg von v nach v . Dann ist für alle 1≤i,j≤k der Weg <v ,…, v > ein kürzester Weg von v nach v .
Beweis Annahme: Es gäbe einen kürzeren Weg <v , u ,…, u ,v > von v nach v . Dann wäre < v ,…, v , u , …, u , v ,…,
v > kürzer als <v , …, v >. Widerspruch.
Graphalgorithmen
1 k 1 k
i j ji
i j
1
1 l ji
i 1 l j k k1
LS 2 / Informatik
87
Dijkstra‘s Algorithmus Graph in Adjazenzlistendarstellung Keine negativen Kantenlängen Überträgt Idee der Breitensuche auf gewichtete Graphen
Graphalgorithmen
LS 2 / Informatik
88
Dijkstra‘s Algorithmus Graph in Adjazenzlistendarstellung Keine negativen Kantenlängen Überträgt Idee der Breitensuche auf gewichtete Graphen
Graphalgorithmen
32
1
1
4
LS 2 / Informatik
89
Dijkstra‘s Algorithmus Graph in Adjazenzlistendarstellung Keine negativen Kantenlängen Überträgt Idee der Breitensuche auf gewichtete Graphen Erster Ansatz: Ersetze Kantenlängen durch mehrfache Kanten
Graphalgorithmen
3 2
1
1
4
LS 2 / Informatik
90
Dijkstra‘s Algorithmus Erste Idee: Ersetze Kantenlängen durch mehrfache Kanten Probleme: Langsam bei großen Kantenlängen; nur ganzzahlige Längen Zunächst ganzzahlige Längen. Idee: Simuliere Breitensuche effizient
Graphalgorithmen
3 2
1
1
4
LS 2 / Informatik
91
Dijkstra‘s Algorithmus Erste Idee: Ersetze Kantenlängen durch mehrfache Kanten Probleme: Langsam bei großen Kantenlängen; nur ganzzahlige Längen Zunächst ganzzahlige Längen. Idee: Simuliere Breitensuche effizient
Graphalgorithmen
3 2
1
1
4
LS 2 / Informatik
92
Dijkstra‘s Algorithmus Erste Idee: Ersetze Kantenlängen durch mehrfache Kanten Probleme: Langsam bei großen Kantenlängen; nur ganzzahlige Längen Zunächst ganzzahlige Längen. Idee: Simuliere Breitensuche effizient Aufgabe: Bestimme für jeden Knoten den Zeitpunkt, zu dem er entdeckt wird
Graphalgorithmen
3 2
1
1
4
LS 2 / Informatik
93
Dijkstra‘s Algorithmus Betrachte Breitensuche in der expandierten Version von G u,vV Wird ein Knoten u zum Zeitpunkt t (d.h. d[u]=t) entdeckt und ist Kante (u,v) mit Gewicht w(u,v) in G, so
wird v spätestens zum Zeitpunkt t+w(u,v) entdeckt Unter Umständen wird v eher über einen anderen Knoten entdeckt
Graphalgorithmen
3
11
t Wird zu Zeitpunkt ≤t+3entdecktu
v
LS 2 / Informatik
94
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4
a b
c d
LS 2 / Informatik
95
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmend[u]= für alle uVprio[u]= prio[s]=0color[u]=weiß für alle uV
d[u]= für alle uVprio[u]= prio[s]=0color[u]=weiß für alle uV
32
11
62
7
4s
a b
c d
LS 2 / Informatik
96
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s
Q: (s,0)
a b
c d
LS 2 / Informatik
97
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s
Q: (s,0)
a b
c d
LS 2 / Informatik
98
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s
Q:
u
a b
c d
LS 2 / Informatik
99
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s
Q:
u
a b
c d
LS 2 / Informatik
100
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s
Q:
u
a b
c d
LS 2 / Informatik
101
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
Q:
u
a b
c d
LS 2 / Informatik
102
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
Q:
u
a b
c d
v
LS 2 / Informatik
103
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
Q: (a,3)
u
va b
c d
LS 2 / Informatik
104
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
Q: (a,3)
u
a b
c dv
LS 2 / Informatik
105
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
Q: (a,3), (c,6)
u
a b
c dv
LS 2 / Informatik
106
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
Q: (a,3), (c,6)
u
a b
c d
LS 2 / Informatik
107
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
Q: (c,6)
u
a b
c d
LS 2 / Informatik
108
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
Q: (c,6)
u
a b
c d
LS 2 / Informatik
109
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
Q: (c,6)
u
a b
c d
LS 2 / Informatik
110
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3
Q: (c,6)
u
a b
c d
LS 2 / Informatik
111
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3
Q: (c,4), (b,5), (c,6), (d,7)
u
a b
c d
LS 2 / Informatik
112
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3
Q: (c,4), (b,5), (c,6), (d,7)
u
a b
c d
LS 2 / Informatik
113
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3
Q: (b,5), (c,6), (d,7)
u
a b
c d
LS 2 / Informatik
114
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3
4
Q: (b,5), (c,6), (d,7)
u
a b
c d
LS 2 / Informatik
115
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3
4
Q: (b,5), (a,6), (c,6), (d,7), (d,11)
u
a b
c d
LS 2 / Informatik
116
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3
4
Q: (a,6), (c,6), (d,7), (d,11)
u
a b
c d
LS 2 / Informatik
117
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3 5
4
Q: (a,6), (c,6), (d,7), (d,11)
u
a b
c d
LS 2 / Informatik
118
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3 5
4
Q: (a,6), (c,6), (d,6), (d,7), (d,11)
u
a b
c d
LS 2 / Informatik
119
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3 5
4
Q: (c,6), (d,6), (d,7), (d,11)
u
a b
c d
LS 2 / Informatik
120
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3 5
4
Q: (d,6), (d,7), (d,11)
u
a b
c d
LS 2 / Informatik
121
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3 5
4
Q: (d,7), (d,11)
u
a b
c d
LS 2 / Informatik
122
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3 5
64
Q: (d,7), (d,11)
u
a b
c d
LS 2 / Informatik
123
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3 5
64
Q: (d,11)
u
a b
c d
LS 2 / Informatik
124
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3 5
64
Q:
u
a b
c d
LS 2 / Informatik
125
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
32
11
62
7
4s0
3 5
64
u
a b
c d
LS 2 / Informatik
126
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
GraphalgorithmenBeobachtung:Sind mehrere Paare (u,p) in der Prioritätenschlange, so ist nur das mit der geringsten Priorität relevant
Beobachtung:Sind mehrere Paare (u,p) in der Prioritätenschlange, so ist nur das mit der geringsten Priorität relevant
LS 2 / Informatik
127
BreitensucheSimulation(G,w,s)
1. Initialisiere Simulation
2. Füge (s,prio[s]) mit Priorität prio[s] in Prioritätenschlange Q ein
3. while Q do
4. (u, prio[u]) ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. d[u] prio[u]
8. for each vAdj[u] do1.
9. prio[v] d[u] + w(u,v)
10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein
Graphalgorithmen
Beobachtung:d-Werte und Prioritäten fast identisch
Beobachtung:d-Werte und Prioritäten fast identisch
LS 2 / Informatik
128
Dijkstra‘s Algorithmus(G,w,s)
1. Initialisiere SSSP
2. Q V[G]
3. while Q do
4. u ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. for each vAdj[u] do1.
8. if d[u] + w(u,v)< d[v] then
9. d[v] d[u] + w(u,v)
10. DecreaseKey(v,d[v])
Graphalgorithmen
d[u]= für alle uV-{s}d[s]=0color[u]=weiß für alle uV
d[u]= für alle uV-{s}d[s]=0color[u]=weiß für alle uV
LS 2 / Informatik
129
Dijkstra‘s Algorithmus(G,w,s)
1. Initialisiere SSSP
2. Q V[G]
3. while Q do
4. u ExtractMin(Q)
5. if color[u]=weiß then
6. color[u] schwarz
7. for each vAdj[u] do1.
8. if d[u] + w(u,v)< d[v] then
9. d[v] d[u] + w(u,v)
10. DecreaseKey(v,d[v])
Graphalgorithmen
Invariante:Für alle schwarzen Knoten wurde
die Distanz korrekt berechnet.
Invariante:Für alle schwarzen Knoten wurde
die Distanz korrekt berechnet.
LS 2 / Informatik
130
Prioritätenschlangen mit DecreaseKey DecreaseKey(v,p): Erlaubt das Verringern der Priorität von Schlüssel v auf
Wert p
Einfachste Implementation Lösche v Füge v mit Priorität p in Prioritätenschlange ein
Graphalgorithmen
LS 2 / Informatik
131
Lemma 53Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV ein beliebiger Knoten. Dann gilt für jede Kante (u,v)E:
(s,v) (s,u)+w(u,v)
Beweis• (Argumentation identisch zu Lemma 48)• Ist u erreichbar von s, dann ist es auch v• Der kürzeste Weg von s nach v kann nicht länger sein, als der kürzeste Weg
von s nach u gefolgt von der Kante (u,v). Damit gilt die Ungleichung.• Ist u nicht erreichbar von s, dann ist (s,u)= und die Ungleichung gilt.
Graphalgorithmen
LS 2 / Informatik
132
Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:
d[w] (s,w).
Beweis• Zeile 9 ist die einzige Zeile, in der d-Werte geändert werden.
Graphalgorithmen
LS 2 / Informatik
133
Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:
d[w] (s,w).
Beweis• Zeile 9 ist die einzige Zeile, in der d-Werte geändert werden.• Wir zeigen per Induktion über die Ausführungen von Zeile 9, dass Lemma 54 gilt.• (I.A.) Vor der ersten Ausführung entsprechen die d-Werte den Werten direkt nach der Initialisierung. Für
diese Werte gilt das Lemma.
Graphalgorithmen
LS 2 / Informatik
134
Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:
d[w] (s,w).
Beweis• Zeile 9 ist die einzige Zeile, in der d-Werte geändert werden.• Wir zeigen per Induktion über die Ausführungen von Zeile 9, dass Lemma 54 gilt.• (I.A.) Vor der ersten Ausführung entsprechen die d-Werte den Werten direkt nach der Initialisierung. Für diese
Werte gilt das Lemma.• (I.V.) Das Lemma gilt nach m Ausführungen von Zeile 9.
Graphalgorithmen
LS 2 / Informatik
135
Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:
d[w] (s,w).
Beweis• Zeile 9 ist die einzige Zeile, in der d-Werte geändert werden.• Wir zeigen per Induktion über die Ausführungen von Zeile 9, dass Lemma 54 gilt.• (I.A.) Vor der ersten Ausführung entsprechen die d-Werte den Werten direkt nach der Initialisierung. Für diese Werte gilt das
Lemma.• (I.V.) Das Lemma gilt nach m Ausführungen von Zeile 9.• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und
d[u] (s,u). Wir setzen in Zeile 9 d[v] auf d[u]+w(u,v).
Graphalgorithmen
LS 2 / Informatik
136
Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:
d[w] (s,w).
Beweis• Zeile 9 ist die einzige Zeile, in der d-Werte geändert werden.• Wir zeigen per Induktion über die Ausführungen von Zeile 9, dass Lemma 54 gilt.• (I.A.) Vor der ersten Ausführung entsprechen die d-Werte den Werten direkt nach der Initialisierung. Für diese Werte gilt das
Lemma.• (I.V.) Das Lemma gilt nach m Ausführungen von Zeile 9.• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und
d[u] (s,u). Wir setzen in Zeile 9 d[v] auf d[u]+w(u,v).
Graphalgorithmen
LS 2 / Informatik
137
Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten u:
d[w] (s,w).
Beweis• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und
d[u] (s,u). Wir setzen in Zeile 9 d[v] auf d[u]+w(u,v).
Graphalgorithmen
LS 2 / Informatik
138
Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:
d[w] (s,w).
Beweis• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und
d[u] (s,u). Wir setzen in Zeile 9 d[v] auf d[u]+w(u,v).
Graphalgorithmen
LS 2 / Informatik
139
Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:
d[w] (s,w).
Beweis• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und
d[u] (s,u). Wir setzen in Zeile 9 d[v] auf min{d[v], d[u]+w(u,v)}. Es gilt d[v] = d[u] + w(u,v) (s,u) + w(u,v) (s,v) nach Lemma 53. Somit gilt auch hier das Lemma.
Graphalgorithmen
LS 2 / Informatik
140
Lemma 54Zu jedem Ausführungszeitpunkt von Dijkstra‘s Algorithmus gilt für jeden Knoten w:
d[w] (s,w).
Beweis• (I.S.) Betrachte (m+1)sten Ausführung. Nach (I.V.) gilt d[v] (s,v) und
d[u] (s,u). Wir setzen in Zeile 9 d[v] auf min{d[v], d[u]+w(u,v)}. Es gilt d[v] = d[u] + w(u,v) (s,u) + w(u,v) (s,v) nach Lemma 53. Somit gilt auch hier das Lemma.
Graphalgorithmen
LS 2 / Informatik
141
Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E)
mit nichtnegativen Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.
Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.
Graphalgorithmen
LS 2 / Informatik
142
Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit
nichtnegativen Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.
Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.• Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten uV zum Zeitpunkt des
Schwarzfärbens d[u] = (s,u) gilt.
Graphalgorithmen
LS 2 / Informatik
143
Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen
Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.
Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.
• Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten uV zum Zeitpunkt des Schwarzfärbens d[u] = (s,u) gilt.
• Annahme: Es gibt einen Knoten u, für den zum Zeitpunkt des Schwarzfärbens d[u] (s,u) gilt.
Graphalgorithmen
LS 2 / Informatik
144
Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen
Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.
Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.• Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten uV zum Zeitpunkt des Schwarzfärbens d[u] =
(s,u) gilt. • Annahme: Es gibt einen Knoten u, für den zum Zeitpunkt des Schwarzfärbens
d[u] (s,u) gilt. Sei u der erste solche Knoten. Betrachte die Situation zu Beginn des Durchlaufs der while-Schleife, in dem u schwarz gefärbt wird.
Graphalgorithmen
LS 2 / Informatik
145
Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen Kantengewichten
und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.
Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.
• Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten uV zum Zeitpunkt des Schwarzfärbens d[u] = (s,u) gilt.
• Annahme: Es gibt einen Knoten u, für den zum Zeitpunkt des Schwarzfärbens d[u] (s,u) gilt. Sei u der erste solche Knoten. Betrachte die Situation zu Beginn des Durchlaufs der while-Schleife, in dem u schwarz gefärbt wird. Es gilt us, da s als erster Knoten schwarz gefärbt wird und zu diesem Zeitpunkt d[s]=0=(s,s) gilt. (Widerspruch!)
Graphalgorithmen
LS 2 / Informatik
146
Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen Kantengewichten
und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.
Beweis• Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt.
• Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten uV zum Zeitpunkt des Schwarzfärbens d[u] = (s,u) gilt.
• Annahme: Es gibt einen Knoten u, für den zum Zeitpunkt des Schwarzfärbens d[u] (s,u) gilt. Sei u der erste solche Knoten. Betrachte die Situation zu Beginn des Durchlaufs der while-Schleife, in dem u schwarz gefärbt wird. Es gilt us, da s als erster Knoten schwarz gefärbt wird und zu diesem Zeitpunkt d[s]=0=(s,s) gilt. (Widerspruch!)
Graphalgorithmen
LS 2 / Informatik
147
Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen
Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.
Beweis• Es gibt Weg von s nach u, da ansonsten wegen Lemma 54 d[u]==(s,u) gilt.
(Widerspruch!)
Graphalgorithmen
LS 2 / Informatik
148
Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen
Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.
Beweis• Es gibt Weg von s nach u, da ansonsten wegen Lemma 54 d[u]==(s,u) gilt.
(Widerspruch!)• Sei nun y der erste weiße Knoten auf einem kürzesten Weg von s nach u und x sein Vorgänger.
Graphalgorithmen
32 4
s x
y 4
u
LS 2 / Informatik
149
Satz 55Wenn wir Dijkstra‘s Algorithmus auf einem gewichteten, gerichteten Graph G=(V,E) mit nichtnegativen
Kantengewichten und Startknoten s ausführen, so gilt nach Terminierung d[u] = (s,u) für alle Knoten uV.
Beweis• Es gibt Weg von s nach u, da ansonsten wegen Lemma 54 d[u]==(s,u) gilt.
(Widerspruch!)• Sei nun y der erste weiße Knoten auf einem kürzesten Weg von s nach u und x sein Vorgänger.
Graphalgorithmen
32 4
s x
y 4
u
LS 2 / Informatik
150
Beweis• Es gilt d[x]=(s,u) nach Wahl von u.
Graphalgorithmen
32 4
s x
y 4
u
LS 2 / Informatik
151
Beweis• Es gilt d[x]=(s,u) nach Wahl von u.
• In Zeile 9 wird nun d[y] auf min{d[y], d[x]+w(x,y)} gesetzt. Nach Lemma 52 ist der Weg von s nach y über x ein kürzester Weg (da er „Teilweg“ des kürzesten Weges von s nach u ist).
Graphalgorithmen
32 4
s x
y 4
u
LS 2 / Informatik
152
Beweis• Es gilt d[x]=(s,u) nach Wahl von u.• In Zeile 9 wird nun d[y] auf min{d[y], d[x]+w(x,y)} gesetzt. Nach Lemma 52 ist der Weg
von s nach y über x ein kürzester Weg (da er „Teilweg“ des kürzesten Weges von s nach u ist). Somit ist d[x]+w(x,y)=(s,y) und d[y] wird wegen Lemma 53 auf diesen Wert gesetzt.
Graphalgorithmen
32 4
s x
y 4
u
LS 2 / Informatik
153
Beweis• Es gilt d[x]=(s,u) nach Wahl von u.• In Zeile 9 wird nun d[y] auf min{d[y], d[x]+w(x,y)} gesetzt. Nach Lemma 52 ist der Weg von s
nach y über x ein kürzester Weg (da er „Teilweg“ des kürzesten Weges von s nach u ist). Somit ist d[x]+w(x,y)=(s,y) und d[y] wird wegen Lemma 53 auf diesen Wert gesetzt.
• Da die Kantengewichte nichtnegativ sind, folgt (s,y)≤ (s,u) und somit nach Lemma 53 d[y]=(s,y)≤ (s,u) ≤ d[u].
Graphalgorithmen
32 4
s x
y 4
u
LS 2 / Informatik
154
Beweis• Es gilt d[x]=(s,u) nach Wahl von u.• In Zeile 9 wird nun d[y] auf min{d[y], d[x]+w(x,y)} gesetzt. Nach Lemma 52 ist der Weg von s nach y über x
ein kürzester Weg (da er „Teilweg“ des kürzesten Weges von s nach u ist). Somit ist d[x]+w(x,y)=(s,y) und d[y] wird wegen Lemma 53 auf diesen Wert gesetzt.
• Da die Kantengewichte nichtnegativ sind, folgt (s,y)≤ (s,u) und somit nach Lemma 53 d[y]=(s,y)≤ (s,u) ≤ d[u].
• Da aber u von ExtractMin aus der Prioritätenschlange entfernt wurde, giltd[u] ≤ d[y] und somit d[y]=(s,y)= (s,u) = d[u]. Widerspruch!
Graphalgorithmen
32 4
s x
y 4
u
LS 2 / Informatik
155
Beweis• Es gilt d[x]=(s,u) nach Wahl von u.• In Zeile 9 wird nun d[y] auf min{d[y], d[x]+w(x,y)} gesetzt. Nach Lemma 52 ist der Weg von s nach y über x
ein kürzester Weg (da er „Teilweg“ des kürzesten Weges von s nach u ist). Somit ist d[x]+w(x,y)=(s,y) und d[y] wird wegen Lemma 53 auf diesen Wert gesetzt.
• Da die Kantengewichte nichtnegativ sind, folgt (s,y)≤ (s,u) und somit nach Lemma 53 d[y]=(s,y)≤ (s,u) ≤ d[u].
• Da aber u von ExtractMin aus der Prioritätenschlange entfernt wurde, giltd[u] ≤ d[y] und somit d[y]=(s,y)= (s,u) = d[u]. Widerspruch!
Graphalgorithmen
32 4
s x
y 4
u