Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Wilfried Wesselman Geändert vor über 10 Jahren
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|)
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.