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 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 11 7 10 3 2 4 11 7 10 3 2 1 2 3 4 5 1 2 3 4 5 6 4 6

3 LS 2 / Informatik 3 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 11 7 10 3 2 4 11 7 10 3 2 1 2 3 4 5 1 2 3 4 5 6 4 6

4 LS 2 / Informatik 4 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 11 7 10 3 2 4 11 7 10 3 2 1 2 3 4 5 1 2 3 4 5 6 4 6 i

5 LS 2 / Informatik 5 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 4 7 10 3 2 11 4 7 10 3 2 1 2 3 4 5 1 2 3 4 5 6 11 6 i

6 LS 2 / Informatik 6 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 4 7 10 3 2 11 4 7 10 3 2 1 2 3 4 5 1 2 3 4 5 6 i

7 LS 2 / Informatik 7 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 10 7 4 3 2 11 10 7 4 3 2 1 2 3 4 5 1 2 3 4 5 6 i

8 LS 2 / Informatik 8 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 10 7 4 3 2 11 10 7 4 3 2 1 2 3 4 5 1 2 3 4 5 6 i

9 LS 2 / Informatik 9 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 2 7 4 3 10 11 2 7 4 3 10 1 2 3 4 5 1 2 3 4 5 6 i

10 LS 2 / Informatik 10 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 2 7 4 3 10 11 2 7 4 3 1 2 3 4 1 2 3 4 5 6 i

11 LS 2 / Informatik 11 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 7 3 4 2 10 11 7 3 4 2 1 2 3 4 1 2 3 4 5 6 i

12 LS 2 / Informatik 12 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 7 3 4 2 10 11 7 3 4 2 1 2 3 4 1 2 3 4 5 6 i

13 LS 2 / Informatik 13 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 2 3 4 7 10 11 2 3 4 7 1 2 3 4 1 2 3 4 5 6 i

14 LS 2 / Informatik 14 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 2 3 4 7 10 11 2 3 4 1 2 3 1 2 3 4 5 6 i

15 LS 2 / Informatik 15 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 4 3 2 7 10 11 4 3 2 1 2 3 1 2 3 4 5 6 i

16 LS 2 / Informatik 16 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 4 3 2 7 10 11 4 3 2 1 2 3 1 2 3 4 5 6 i

17 LS 2 / Informatik 17 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 2 34 7 10 11 2 3 4 1 2 3 1 2 3 4 5 6 i

18 LS 2 / Informatik 18 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 2 34 7 10 11 2 3 1 2 1 2 3 4 5 6 i

19 LS 2 / Informatik 19 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 3 24 7 10 11 3 2 1 2 1 2 3 4 5 6 i

20 LS 2 / Informatik 20 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 3 24 7 10 11 3 2 1 2 1 2 3 4 5 6 i

21 LS 2 / Informatik 21 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 2 34 7 10 11 2 3 1 2 1 2 3 4 5 6 i

22 LS 2 / Informatik 22 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 2 34 7 10 11 2 1 1 2 3 4 5 6 i

23 LS 2 / Informatik 23 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 2 34 7 10 11 2 1 1 2 3 4 5 6 i

24 LS 2 / Informatik 24 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Datenstrukturen 2 34 7 10 11 1 2 3 4 5 6

25 LS 2 / Informatik 25 Heapsort(A) 1. Build-Heap(A) 2. for i length[A] downto 2 do 3. A[1] A[i] 4. heap-size[A] heap-size[A]-1 5. Heapify(A,1) Laufzeit O(n log n) Datenstrukturen 2 34 7 10 11 1 2 3 4 5 6

26 LS 2 / Informatik 26 Zusammenfassung (Halden) Einfügen, Löschen, Maximum extrahieren in O(log n) Zeit Sortieren mit Hilfe von Halden in O(n log n) Heapsort braucht keinen zusätzlichen Speicherplatz Einfache Implementierung Datenstrukturen

27 LS 2 / Informatik 27 Definition Ein Graph G ist ein Paar (V,E). V heißt Knotenmenge und E V V Kantenmenge des Graphen. Darstellung von Graphen Adjazenzlisten (dünne Graphen, |E|<<|V|²) Adjazenzmatrix (dichte Graphen, |E| nah an |V|²) Arten von Graphen Ungerichtet, gerichtet Ungewichtet, gewichtet Graphalgorithmen

28 LS 2 / Informatik 28 Adjazenzmatrixdarstellung Knoten sind nummeriert von 1 bis |V| |V| |V| Matrix A = (a ) mit Bei ungerichteten Graphen gilt A = A Graphalgorithmen ij a = ij 1, if (i,j) E 0, sonst T

29 LS 2 / Informatik 29 Beispiel Graphalgorithmen 1 5 4 3 2 01001 10111 01010 01101 11010 1 1 2 2 3 3 4 4 5 5

30 LS 2 / Informatik 30 Adjazenzlistendarstellung Feld Adj mit |V| Listen (eine pro Knoten) Für Knoten v enthält Adj[v] eine Liste aller Knoten u mit (v,u) E Die Knoten in Adj[u] heißen zu u adjazent Ist G ungerichtet, so gilt: v Adj[u] u Adj[v] Gewichtete Graphen Kanten haben Gewicht gegeben durch Funktion w: E R Gewicht w(u,v) von Kante (u,v) wird mit Knoten v in us Adjazenzliste gespeichert Graphalgorithmen

31 LS 2 / Informatik 31 Beispiel Graphalgorithmen 1 5 4 3 2 / / / / 1 2 3 4 5 1 1 2 / 5 2 5 5 3 3 2 2 4 4 4

32 LS 2 / Informatik 32 Kürzeste Wege in Graphen Gegeben (möglicherweise gewichteter) Graph G=(V,E) Frage: Was ist der kürzeste Weg Knoten v nach Knoten u? Länge des Weges: Summe der Kantengewichte (bzw. Anzahl Kanten, wenn ungewichtet) Graphalgorithmen v 12 2 4 1 4 8 3 5 10 6 4 5 2 u

33 LS 2 / Informatik 33 Kürzeste Wege in Graphen Gegeben (möglicherweise gewichteter) Graph G=(V,E) Frage: Was ist der kürzeste Weg Knoten v nach Knoten u? Länge des Weges: Summe der Kantengewichte (bzw. Anzahl Kanten, wenn ungewichtet) Graphalgorithmen v 12 2 4 1 4 8 3 5 10 6 4 5 2 u

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

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

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

37 LS 2 / Informatik 37 Breitensuche Baut Breitensuche Baum (BFS Baum) Zu Beginn enthält der Baum nur die Wurzel, nämlich s Wenn weißer Knoten beim Durchsuchen der Adjazenzliste eines entdeckten Knotens entdeckt wird, dann werden v und (u,v) dem Baum hinzugefügt u ist dann Vaterknoten von v Graphalgorithmen u s

38 LS 2 / Informatik 38 Breitensuche Baut Breitensuche Baum (BFS Baum) Zu Beginn enthält der Baum nur die Wurzel, nämlich s Wenn weißer Knoten beim Durchsuchen der Adjazenzliste eines entdeckten Knotens entdeckt wird, dann werden v und (u,v) dem Baum hinzugefügt u ist dann Vaterknoten von v Graphalgorithmen u v Knoten v wird von Knoten u aus entdeckt s

39 LS 2 / Informatik 39 Datenstruktur Schlange Operationen: head, enqueue, dequeue head: Gibt Referenz auf das erste in der Schlange gespeicherte Element zurück enqueue: Fügt neues Element ans Ende der Schlage dequeue: Entfernt Kopf der Schlange Wir verwenden Doppelt verkettete Liste Zusätzlich halten wir Zeiger auf das letzte Element aufrecht Alle Operationen in O(1) Zeit Graphalgorithmen

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

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

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 Für jeden Knoten u: color[u] = weiß d[u] = [u] = nil Für jeden Knoten u: color[u] = weiß d[u] = [u] = nil

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

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:s 0 i h g f e d c b 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 Q:s 0 i h g f e d c b a u

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

62 LS 2 / Informatik 62 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 1 1 2 2

63 LS 2 / Informatik 63 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 1 1 2 2

64 LS 2 / Informatik 64 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 1 1 2 2

65 LS 2 / Informatik 65 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 1 1 2 2

66 LS 2 / Informatik 66 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 1 1 2 2

67 LS 2 / Informatik 67 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 1 1 2 2

68 LS 2 / Informatik 68 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 1 1 2 2 3

69 LS 2 / Informatik 69 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 1 1 2 2 3

70 LS 2 / Informatik 70 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 1 1 2 2 3

71 LS 2 / Informatik 71 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 1 1 2 2 3 3

72 LS 2 / Informatik 72 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 1 1 2 2 3 3

73 LS 2 / Informatik 73 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 1 1 2 2 3 3

74 LS 2 / Informatik 74 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 1 1 2 2 3 3 4 4

75 LS 2 / Informatik 75 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 1 1 2 2 3 3 4 4

76 LS 2 / Informatik 76 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 1 1 2 2 3 3 4 4

77 LS 2 / Informatik 77 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 1 1 2 2 3 3 4 4 5

78 LS 2 / Informatik 78 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 1 1 2 2 3 3 4 4 5

79 LS 2 / Informatik 79 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 1 1 2 2 3 3 4 4 5

80 LS 2 / Informatik 80 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 1 1 2 2 3 3 4 4 5

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

82 LS 2 / Informatik 82 Satz 47 Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|). Beweis Laufzeit Initialisierung: O(|V|) Graphalgorithmen

83 LS 2 / Informatik 83 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 Graphalgorithmen

84 LS 2 / Informatik 84 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 Graphalgorithmen

85 LS 2 / Informatik 85 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|) Graphalgorithmen

86 LS 2 / Informatik 86 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 Graphalgorithmen

87 LS 2 / Informatik 87 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|) Graphalgorithmen

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

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

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

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

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

93 LS 2 / Informatik 93 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. Graphalgorithmen

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

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

96 LS 2 / Informatik 96 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 Graphalgorithmen

97 LS 2 / Informatik 97 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} Graphalgorithmen

98 LS 2 / Informatik 98 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 Graphalgorithmen

99 LS 2 / Informatik 99 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). Graphalgorithmen

100 LS 2 / Informatik 100 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 Graphalgorithmen

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

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

103 LS 2 / Informatik 103 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 Graphalgorithmen

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

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

106 LS 2 / Informatik 106 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. Graphalgorithmen 1 r 1r 1 r ii+1

107 LS 2 / Informatik 107 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 Graphalgorithmen 1 r 1r 1 r ii+1

108 LS 2 / Informatik 108 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 Graphalgorithmen 1 r 1r 1 r ii+1

109 LS 2 / Informatik 109 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 Graphalgorithmen 1 r 1r 1 r ii+1

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

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

112 LS 2 / Informatik 112 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 Graphalgorithmen 1 r 1r 1 r ii+1 1 2

113 LS 2 / Informatik 113 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 Graphalgorithmen 1 r 1r 1 r ii+1 1 1 2 2r

114 LS 2 / Informatik 114 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+1 1 1 2 2r

115 LS 2 / Informatik 115 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+1 1 1 2 2r

116 LS 2 / Informatik 116 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 Graphalgorithmen 1 r 1r 1 r ii+1 r+1 1

117 LS 2 / Informatik 117 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 Graphalgorithmen 1 r 1r 1 r ii+1 r+1 1 1

118 LS 2 / Informatik 118 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 ] Graphalgorithmen 1 r 1r 1 r ii+1 r+1 1 r1 1

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

136 LS 2 / Informatik 136 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 Schlage eingefügt werden Graphalgorithmen 0 k-1

137 LS 2 / Informatik 137 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 Schlage eingefügt werden Betrachte nun v V, k>0. Monotonie mit d[v]k (Lemma 49) 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

138 LS 2 / Informatik 138 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 Schlage eingefügt werden Betrachte nun v V, k>0. Monotonie mit d[v]k (Lemma 49) 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

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

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

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

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

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

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

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

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

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

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

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

150 LS 2 / Informatik 150 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|)


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

Ähnliche Präsentationen


Google-Anzeigen