Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)"—  Präsentation transkript:

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

2 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

3 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

4 LS 2 / Informatik 4 Beispiel (mögl. Zustand bei einer Breitensuche) Graphalgorithmen s

5 LS 2 / Informatik 5 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen

6 LS 2 / Informatik 6 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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)

7 LS 2 / Informatik 7 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen Für jeden Knoten u: color[u] = weiß d[u] = [u] = nil Für jeden Knoten u: color[u] = weiß d[u] = [u] = nil

8 LS 2 / Informatik 8 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen Fü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

9 LS 2 / Informatik 9 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s 0 i h g f e d c b a

10 LS 2 / Informatik 10 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s 0 i h g f e d c b a u

11 LS 2 / Informatik 11 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s 0 i h g f e d c b u v=a

12 LS 2 / Informatik 12 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s 0 i h g f e d c b u v=a

13 LS 2 / Informatik 13 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s 0 i h g f e d c b u v=a

14 LS 2 / Informatik 14 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s 0 i h g f e d c b u v=a 1

15 LS 2 / Informatik 15 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s, a 0 i h g f e d c b u v=a 1

16 LS 2 / Informatik 16 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s, a 0 i h g f e d c v=b u a 1

17 LS 2 / Informatik 17 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s, a 0 i h g f e d c v=b u a 1

18 LS 2 / Informatik 18 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s, a 0 i h g f e d c v=b u a 1

19 LS 2 / Informatik 19 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s, a 0 i h g f e d c v=b u a 1 1

20 LS 2 / Informatik 20 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:s, a, b 0 i h g f e d c v=b u a 1 1

21 LS 2 / Informatik 21 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:a, b 0 i h g f e d c b u a 1 1

22 LS 2 / Informatik 22 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:a, b 0 i h g f e d c b u a 1 1

23 LS 2 / Informatik 23 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:a, b 0 i h g f e d c b u u=a 1 1

24 LS 2 / Informatik 24 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:a, b 0 i h g f e d v=c b u u=a 1 1

25 LS 2 / Informatik 25 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:a, b, c 0 i h g f e d v=c b u u=a 1 1 2

26 LS 2 / Informatik 26 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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 b u u=a 1 1 2

27 LS 2 / Informatik 27 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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 b u u=a

28 LS 2 / Informatik 28 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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 b u u=a

29 LS 2 / Informatik 29 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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=b u a

30 LS 2 / Informatik 30 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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=b u a

31 LS 2 / Informatik 31 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:c, d 0 i h g f e d c b u a

32 LS 2 / Informatik 32 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:c, d 0 i h g f e d u=c b u a

33 LS 2 / Informatik 33 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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 b u a

34 LS 2 / Informatik 34 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:d, f 0 i h g f e d c b u a

35 LS 2 / Informatik 35 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:d, f 0 i h g f e u=d c b u a

36 LS 2 / Informatik 36 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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 b u a

37 LS 2 / Informatik 37 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:f, e 0 i h g f e u=d c b u a

38 LS 2 / Informatik 38 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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 b u a

39 LS 2 / Informatik 39 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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 b u a

40 LS 2 / Informatik 40 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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 b u a

41 LS 2 / Informatik 41 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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 b u a

42 LS 2 / Informatik 42 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. 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 b u a

43 LS 2 / Informatik 43 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q:h 0 u=i h g f e u=d c b u a

44 LS 2 / Informatik 44 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s Q: 0 i u=h g f e u=d c b u a

45 LS 2 / Informatik 45 BFS(G,s) 1. initialisiere BFS 2. while Q do 3. u head[Q] 4. for each v Adj[u] do 5. if color[v]=weiß then 6. color[v] grau 7. d[v] d[u]+1; [v] u 8. enqueue(Q,v) 9. dequeue(Q) 10. color[u] schwarz Graphalgorithmen s 0 i h g f e u=d c b u a

46 LS 2 / Informatik 46 Satz 47 Sei 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

47 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

48 LS 2 / Informatik 48 Lemma 48 Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei s V 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

49 LS 2 / Informatik 49 Lemma 49 Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem Startknoten s V. 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 v V-{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

50 LS 2 / Informatik 50 Lemma 49 Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem Startknoten s V. 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

51 LS 2 / Informatik 51 Lemma 50 Sei 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 entweder eine enqueue oder dequeue Operation Graphalgorithmen 1 r 1r 1 r ii+1

52 LS 2 / Informatik 52 Lemma 50 Sei 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 1r 1 r ii r

53 LS 2 / Informatik 53 Lemma 50 Sei 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 1r 1 r ii+1 r+1 1 r1 1

54 LS 2 / Informatik 54 Satz 51 Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei s V Startknoten der Breitensuche. Dann entdeckt die Breitensuche alle Knoten v V, die von s aus erreichbar sind und nach Terminierung gilt d[v]= (s,v) für alle v V. Außerdem gilt für jeden von s erreichbaren Knoten v s, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ( [v],v) ein kürzester s-v-Weg ist. Graphalgorithmen

55 LS 2 / Informatik 55 Satz 51 Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei s V Startknoten der Breitensuche. Dann entdeckt die Breitensuche alle Knoten v V, die von s aus erreichbar sind und nach Terminierung gilt d[v]= (s,v) für alle v V. Außerdem gilt für jeden von s erreichbaren Knoten v s, 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

56 LS 2 / Informatik 56 Satz 51 Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei s V Startknoten der Breitensuche. Dann entdeckt die Breitensuche alle Knoten v V, die von s aus erreichbar sind und nach Terminierung gilt d[v]= (s,v) für alle v V. Außerdem gilt für jeden von s erreichbaren Knoten v s, 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

57 LS 2 / Informatik 57 Satz 51 Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei s V Startknoten der Breitensuche. Dann entdeckt die Breitensuche alle Knoten v V, die von s aus erreichbar sind und nach Terminierung gilt d[v]= (s,v) für alle v V. Außerdem gilt für jeden von s erreichbaren Knoten v s, 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

58 LS 2 / Informatik 58 Satz 51 Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei s V Startknoten der Breitensuche. Dann entdeckt die Breitensuche alle Knoten v V, die von s aus erreichbar sind und nach Terminierung gilt d[v]= (s,v) für alle v V. Außerdem gilt für jeden von s erreichbaren Knoten v s, 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

59 LS 2 / Informatik 59 Satz 51 Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei s V Startknoten der Breitensuche. Dann entdeckt die Breitensuche alle Knoten v V, die von s aus erreichbar sind und nach Terminierung gilt d[v]= (s,v) für alle v V. Außerdem gilt für jeden von s erreichbaren Knoten v s, 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

60 LS 2 / Informatik 60 Beweis Fall 2 (v erreichbar von s): Graphalgorithmen

61 LS 2 / Informatik 61 Beweis Fall 2 (v erreichbar von s): Sei V = {v V : (s,v) = k} Graphalgorithmen k

62 LS 2 / Informatik 62 Beweis Fall 2 (v erreichbar von s): Sei V = {v V : (s,v) = k} Wir zeigen per Induktion über k: Es gibt genau einen Zeitpunkt, zu dem jeder Knoten v V (a) grau gefärbt wird (b) d[v]=k gesetzt wird (c) wenn v s, dann [v] auf u gesetzt wird für ein u V (d) v in Schlange Q eingefügt wird Graphalgorithmen k k k-1

63 LS 2 / Informatik 63 Beweis Fall 2 (v erreichbar von s): Sei V = {v V : (s,v) = k} Wir zeigen per Induktion über k: Es gibt genau einen Zeitpunkt, zu dem jeder Knoten v V (a) grau gefärbt wird (b) d[v]=k gesetzt wird (c) wenn v s, dann [v] auf u gesetzt wird für ein u V (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

64 LS 2 / Informatik 64 Beweis Fall 2 (v erreichbar von s): Sei V = {v V : (s,v) = k} Wir zeigen per Induktion über k: Es gibt genau einen Zeitpunkt, zu dem jeder Knoten v V (a) grau gefärbt wird (b) d[v]=k gesetzt wird (c) wenn v s, dann [v] auf u gesetzt wird für ein u V (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

65 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

66 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

67 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

68 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

69 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

70 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 v V, 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

71 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 v V, 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

72 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 u V Graphalgorithmen k-1 v u

73 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 u V ObdA. Sei u der erste solche Knoten, der grau gefärbt wird (existiert wegen I.V.) Graphalgorithmen k-1 v u

74 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 u V 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 Schlange auftauchen Graphalgorithmen k-1 v u

75 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 u V 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 Schlange auftauchen Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufen und v in Zeile 4 entdeckt Graphalgorithmen k-1 v u

76 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 u V 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 Schlange auftauchen Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufen und 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-1 v u

77 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 u V 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 Schlange auftauchen Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufen und 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-1 v u

78 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 u V 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 Schlange auftauchen Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufen und 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-1 v u k

79 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 u V 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 Schlange auftauchen Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufen und 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-1 v u k

80 LS 2 / Informatik 80 Beweis Abschließend beobachten wir, dass wenn v V ist, dann ist [v] in V Graphalgorithmen k-1 k

81 LS 2 / Informatik 81 Beweis Abschließend beobachten wir, dass wenn v V 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-1 k

82 LS 2 / Informatik 82 Beweis Abschließend beobachten wir, dass wenn v V 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-1 k

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

84 LS 2 / Informatik 84 Kürzeste Wege in gewichteten Graphen G=(V,E) w: E R ; w(e) ist Länge der Kante e; w(u,v) ist Länge der Kante (u,v) Für Pfad 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 Pfade p von u nach v

85 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

86 LS 2 / Informatik 86 Lemma 52 Sei G=(V,E) ein gewichteter, gerichteter Graph mit Kantengewichten w(e) und sei ein kürzester Weg von v nach v. Dann ist für alle 1i,jk der Weg ein kürzester Weg von v nach v. Beweis Annahme: Es gäbe einen kürzeren Weg von v nach v. Dann wäre kürzer als. Widerspruch. Graphalgorithmen 1k 1k i j j i i j 1 1 l j i i 1 lj kk 1

87 LS 2 / Informatik 87 Dijkstras Algorithmus Graph in Adjazenzlistendarstellung Keine negativen Kantenlängen Überträgt Idee der Breitensuche auf gewichtete Graphen Graphalgorithmen

88 LS 2 / Informatik 88 Dijkstras Algorithmus Graph in Adjazenzlistendarstellung Keine negativen Kantenlängen Überträgt Idee der Breitensuche auf gewichtete Graphen Graphalgorithmen

89 LS 2 / Informatik 89 Dijkstras 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

90 LS 2 / Informatik 90 Dijkstras 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

91 LS 2 / Informatik 91 Dijkstras 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

92 LS 2 / Informatik 92 Dijkstras 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

93 LS 2 / Informatik 93 Dijkstras Algorithmus Betrachte Breitensuche in der expandierten Version von G u,v V 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 t Wird zu Zeitpunkt t+3 entdeckt u v

94 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen a b c d

95 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen d[u]= für alle u V prio[u]= prio[s]=0 color[u]=weiß für alle u V d[u]= für alle u V prio[u]= prio[s]=0 color[u]=weiß für alle u V s a b c d

96 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (s,0) a b c d

97 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (s,0) a b c d

98 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: u a b c d

99 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: u a b c d

100 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: u a b c d

101 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 Q: u a b c d

102 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 Q: u a b c d v

103 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 Q: (a,3) u v a b c d

104 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 Q: (a,3) u a b c d v

105 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 Q: (a,3), (c,6) u a b c d v

106 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 Q: (a,3), (c,6) u a b c d

107 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 Q: (c,6) u a b c d

108 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 Q: (c,6) u a b c d

109 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 Q: (c,6) u a b c d

110 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 3 Q: (c,6) u a b c d

111 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 3 Q: (c,4), (b,5), (c,6), (d,7) u a b c d

112 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 3 Q: (c,4), (b,5), (c,6), (d,7) u a b c d

113 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s 0 3 Q: (b,5), (c,6), (d,7) u a b c d

114 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (b,5), (c,6), (d,7) u a b c d

115 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (b,5), (a,6), (c,6), (d,7), (d,11) u a b c d

116 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (a,6), (c,6), (d,7), (d,11) u a b c d

117 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (a,6), (c,6), (d,7), (d,11) u a b c d

118 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (a,6), (c,6), (d,6), (d,7), (d,11) u a b c d

119 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (c,6), (d,6), (d,7), (d,11) u a b c d

120 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (d,6), (d,7), (d,11) u a b c d

121 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (d,7), (d,11) u a b c d

122 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (d,7), (d,11) u a b c d

123 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: (d,11) u a b c d

124 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s Q: u a b c d

125 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen s u a b c d

126 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 v Adj[u] do prio[v] d[u] + w(u,v) 10. Füge (v,prio[v]) mit Priorität prio[v] in Q ein Graphalgorithmen Beobachtung: 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

127 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 v Adj[u] do 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

128 LS 2 / Informatik 128 Dijkstras 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 v Adj[u] do 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 u V-{s} d[s]=0 color[u]=weiß für alle u V d[u]= für alle u V-{s} d[s]=0 color[u]=weiß für alle u V

129 LS 2 / Informatik 129 Dijkstras 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 v Adj[u] do 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.

130 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

131 LS 2 / Informatik 131 Lemma 53 Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei s V 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

132 LS 2 / Informatik 132 Lemma 54 Zu jedem Ausführungszeitpunkt von Dijkstras 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

133 LS 2 / Informatik 133 Lemma 54 Zu jedem Ausführungszeitpunkt von Dijkstras 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

134 LS 2 / Informatik 134 Lemma 54 Zu jedem Ausführungszeitpunkt von Dijkstras 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

135 LS 2 / Informatik 135 Lemma 54 Zu jedem Ausführungszeitpunkt von Dijkstras 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

136 LS 2 / Informatik 136 Lemma 54 Zu jedem Ausführungszeitpunkt von Dijkstras 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

137 LS 2 / Informatik 137 Lemma 54 Zu jedem Ausführungszeitpunkt von Dijkstras 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

138 LS 2 / Informatik 138 Lemma 54 Zu jedem Ausführungszeitpunkt von Dijkstras 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

139 LS 2 / Informatik 139 Lemma 54 Zu jedem Ausführungszeitpunkt von Dijkstras 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

140 LS 2 / Informatik 140 Lemma 54 Zu jedem Ausführungszeitpunkt von Dijkstras 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

141 LS 2 / Informatik 141 Satz 55 Wenn wir Dijkstras 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 u V. Beweis Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt. Graphalgorithmen

142 LS 2 / Informatik 142 Satz 55 Wenn wir Dijkstras 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 u V. Beweis Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt. Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten u V zum Zeitpunkt des Schwarzfärbens d[u] = (s,u) gilt. Graphalgorithmen

143 LS 2 / Informatik 143 Satz 55 Wenn wir Dijkstras 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 u V. Beweis Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt. Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten u V 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

144 LS 2 / Informatik 144 Satz 55 Wenn wir Dijkstras 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 u V. Beweis Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt. Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten u V 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

145 LS 2 / Informatik 145 Satz 55 Wenn wir Dijkstras 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 u V. Beweis Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt. Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten u V 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 u s, da s als erster Knoten schwarz gefärbt wird und zu diesem Zeitpunkt d[s]=0= (s,s) gilt. (Widerspruch!) Graphalgorithmen

146 LS 2 / Informatik 146 Satz 55 Wenn wir Dijkstras 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 u V. Beweis Jeder Knoten wird im Verlauf des Algorithmus schwarz gefärbt. Wir zeigen per Widerspruchsbeweis, dass für jeden Knoten u V 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 u s, da s als erster Knoten schwarz gefärbt wird und zu diesem Zeitpunkt d[s]=0= (s,s) gilt. (Widerspruch!) Graphalgorithmen

147 LS 2 / Informatik 147 Satz 55 Wenn wir Dijkstras 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 u V. Beweis Es gibt Weg von s nach u, da ansonsten wegen Lemma 54 d[u]= = (s,u) gilt. (Widerspruch!) Graphalgorithmen

148 LS 2 / Informatik 148 Satz 55 Wenn wir Dijkstras 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 u V. 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 s x y 4 u

149 LS 2 / Informatik 149 Satz 55 Wenn wir Dijkstras 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 u V. 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 s x y 4 u

150 LS 2 / Informatik 150 Beweis Es gilt d[x]= (s,u) nach Wahl von u. Graphalgorithmen s x y 4 u

151 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 s x y 4 u

152 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 s x y 4 u

153 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 s x y 4 u

154 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, gilt d[u] d[y] und somit d[y]= (s,y) = (s,u) = d[u]. Widerspruch! Graphalgorithmen s x y 4 u

155 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, gilt d[u] d[y] und somit d[y]= (s,y) = (s,u) = d[u]. Widerspruch! Graphalgorithmen s x y 4 u


Herunterladen ppt "LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)"

Ähnliche Präsentationen


Google-Anzeigen