Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
description
Transcript of Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
LS 2 / Informatik
2
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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 3 4 7 10 11
2
3 4
1
2 3
1 2 3 4 5 6
i
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 3 4 7 10 11
2
3
1
2
1 2 3 4 5 6
i
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 2 4 7 10 11
3
2
1
2
1 2 3 4 5 6
i
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 2 4 7 10 11
3
2
1
2
1 2 3 4 5 6
i
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 3 4 7 10 11
2
3
1
2
1 2 3 4 5 6
i
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 3 4 7 10 11
2
1
1 2 3 4 5 6
i
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 3 4 7 10 11
2
1
1 2 3 4 5 6
i
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 3 4 7 10 11
1 2 3 4 5 6
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 3 4 7 10 11
1 2 3 4 5 6
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
LS 2 / Informatik
27
Definition Ein Graph G ist ein Paar (V,E). V heißt Knotenmenge und EVV 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
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
LS 2 / Informatik
29
Beispiel
Graphalgorithmen
1
5 4
3
20 1 0 0 1
1 0 1 1 1
0 1 0 1 0
0 1 1 0 1
1 1 0 1 0
1
1
2
2
3
3
4
4
5
5
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: vAdj[u] uAdj[v]
Gewichtete Graphen Kanten haben Gewicht gegeben durch Funktion w: ER Gewicht w(u,v) von Kante (u,v) wird mit Knoten v in u‘s Adjazenzliste gespeichert
Graphalgorithmen
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
24
4
4
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
241
4
8
35
10
64 5
2
u
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
241
4
8
35
10
64 5
2
u
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
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
LS 2 / Informatik
36
Beispiel (mögl. Zustand bei einer Breitensuche)
Graphalgorithmen
s
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
us
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 entdeckts
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
LS 2 / Informatik
40
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
LS 2 / Informatik
41
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
d[u]: Abstand zu s (zu Beginn )[u]: Vaterknoten von u (zu Beginn nil)d[u]: Abstand zu s (zu Beginn )[u]: Vaterknoten von u (zu Beginn nil)
LS 2 / Informatik
42
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
GraphalgorithmenFür jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil
Für jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil
LS 2 / Informatik
43
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
GraphalgorithmenFür jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil
Für jeden Knoten u:• color[u] = weiß• d[u] = • [u] = nil
Für Knoten s:• color[s] = grau• d[s]=0• [s]=nil• s wird in Schlange Q eingefügt
Für Knoten s:• color[s] = grau• d[s]=0• [s]=nil• s wird in Schlange Q eingefügt
LS 2 / Informatik
44
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
b
a
LS 2 / Informatik
45
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
b
a
u
LS 2 / Informatik
46
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
bu
v=a
LS 2 / Informatik
47
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
bu
v=a
LS 2 / Informatik
48
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
bu
v=a
LS 2 / Informatik
49
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s
0
i
h
g
f
ed
c
bu
v=a
1
LS 2 / Informatik
50
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a
0
i
h
g
f
ed
c
bu
v=a
1
LS 2 / Informatik
51
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a
0
i
h
g
f
ed
c
v=bu
a
1
LS 2 / Informatik
52
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a
0
i
h
g
f
ed
c
v=bu
a
1
LS 2 / Informatik
53
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a
0
i
h
g
f
ed
c
v=bu
a
1
LS 2 / Informatik
54
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a
0
i
h
g
f
ed
c
v=bu
a
1
1
LS 2 / Informatik
55
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: s, a, b
0
i
h
g
f
ed
c
v=bu
a
1
1
LS 2 / Informatik
56
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b
0
i
h
g
f
ed
c
bu
a
1
1
LS 2 / Informatik
57
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b
0
i
h
g
f
ed
c
bu
a
1
1
LS 2 / Informatik
58
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b
0
i
h
g
f
ed
c
bu
u=a
1
1
LS 2 / Informatik
59
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b
0
i
h
g
f
ed
v=c
bu
u=a
1
1
LS 2 / Informatik
60
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b, c
0
i
h
g
f
ed
v=c
bu
u=a
1
1
2
LS 2 / Informatik
61
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b, c
0
i
h
g
f
e
v=d
c
bu
u=a
1
1
2
LS 2 / Informatik
62
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: a, b, c, d
0
i
h
g
f
e
v=d
c
bu
u=a
1
1
2
2
LS 2 / Informatik
63
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: b, c, d
0
i
h
g
f
e
v=d
c
bu
u=a
1
1
2
2
LS 2 / Informatik
64
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: b, c, d
0
i
h
g
f
e
d
c
u=bu
a
1
1
2
2
LS 2 / Informatik
65
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: b, c, d
0
i
h
g
f
e
d
c
u=bu
a
1
1
2
2
LS 2 / Informatik
66
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: c, d
0
i
h
g
f
e
d
c
bu
a
1
1
2
2
LS 2 / Informatik
67
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: c, d
0
i
h
g
f
e
d
u=c
bu
a
1
1
2
2
LS 2 / Informatik
68
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: c, d, f
0
i
h
g
f
e
d
u=c
bu
a
1
1
2
2
3
LS 2 / Informatik
69
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: d, f
0
i
h
g
f
e
d
c
bu
a
1
1
2
2
3
LS 2 / Informatik
70
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: d, f
0
i
h
g
f
e
u=d
c
bu
a
1
1
2
2
3
LS 2 / Informatik
71
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: d, f, e
0
i
h
g
f
e
u=d
c
bu
a
1
1
2
2
3
3
LS 2 / Informatik
72
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: f, e
0
i
h
g
f
e
u=d
c
bu
a
1
1
2
2
3
3
LS 2 / Informatik
73
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: f, e
0
i
h
g
u=f
e
u=d
c
bu
a
1
1
2
2
3
3
LS 2 / Informatik
74
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: f, e, g, i
0
i
h
g
u=f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
LS 2 / Informatik
75
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: e, g, i
0
i
h
g
u=f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
LS 2 / Informatik
76
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: g, i
0
i
h
g
f
u=e
u=d
c
bu
a
1
1
2
2
3
3
4
4
LS 2 / Informatik
77
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: i, h
0
i
h
u=g
f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
5
LS 2 / Informatik
78
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q: h
0
u=i
h
g
f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
5
LS 2 / Informatik
79
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s
Q:
0
i
u=h
g
f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
5
LS 2 / Informatik
80
BFS(G,s)1. „initialisiere BFS“2. while Q do 3. u head[Q]4. for each vAdj[u] do 5. if color[v]=weiß then 6. color[v] grau7. d[v] d[u]+1; [v] u8. enqueue(Q,v)9. dequeue(Q)10. color[u] schwarz
Graphalgorithmen
s 0
i
h
g
f
e
u=d
c
bu
a
1
1
2
2
3
3
4
4
5
LS 2 / Informatik
81
Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).
Graphalgorithmen
LS 2 / Informatik
82
Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).
Beweis• Laufzeit Initialisierung: O(|V|)
Graphalgorithmen
LS 2 / Informatik
83
Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).
Beweis• Laufzeit Initialisierung: O(|V|)• Nach der Initialisierung wird kein Knoten weiß gefärbt
Graphalgorithmen
LS 2 / Informatik
84
Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).
Beweis• Laufzeit Initialisierung: O(|V|)• Nach der Initialisierung wird kein Knoten weiß gefärbt• Daher ist jeder Knoten nur einmal in der Schlange
Graphalgorithmen
LS 2 / Informatik
85
Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).
Beweis• Laufzeit Initialisierung: O(|V|)• Nach der Initialisierung wird kein Knoten weiß gefärbt• Daher ist jeder Knoten nur einmal in der Schlange• Zeit für Schlangenoperationen ist O(|V|)
Graphalgorithmen
LS 2 / Informatik
86
Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).
Beweis• Laufzeit Initialisierung: O(|V|)
• Nach der Initialisierung wird kein Knoten weiß gefärbt
• Daher ist jeder Knoten nur einmal in der Schlange
• Zeit für Schlangenoperationen ist O(|V|)
• Adjazenzliste jedes Knotens wird nur durchlaufen, wenn er aus der Schlange entfernt wird
Graphalgorithmen
LS 2 / Informatik
87
Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).
Beweis• Laufzeit Initialisierung: O(|V|)• Nach der Initialisierung wird kein Knoten weiß gefärbt• Daher ist jeder Knoten nur einmal in der Schlange• Zeit für Schlangenoperationen ist O(|V|) • Adjazenzliste jedes Knotens wird nur durchlaufen, wenn er aus der Schlange entfernt wird• Damit wird jede Adjazenzliste maximal einmal durchlaufen (d.h. jede Kante maximal zweimal) Laufzeit für Liste: O(|E|)
Graphalgorithmen
LS 2 / Informatik
88
Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).
Beweis• Laufzeit Initialisierung: O(|V|)• Nach der Initialisierung wird kein Knoten weiß gefärbt• Daher ist jeder Knoten nur einmal in der Schlange• Zeit für Schlangenoperationen ist O(|V|) • Adjazenzliste jedes Knotens wird nur durchlaufen, wenn er aus der Schlange entfernt wird• Damit wird jede Adjazenzliste maximal einmal durchlaufen (d.h. jede Kante maximal zweimal) Laufzeit für Liste: O(|E|)• Gesamtlaufzeit: O(|V|+|E|)
Graphalgorithmen
LS 2 / Informatik
89
Satz 47Sei G=(V,E) ein Graph. Die Laufzeit des Algorithmus BFS beträgt O(|V|+|E|).
Beweis• Laufzeit Initialisierung: O(|V|)• Nach der Initialisierung wird kein Knoten weiß gefärbt• Daher ist jeder Knoten nur einmal in der Schlange• Zeit für Schlangenoperationen ist O(|V|) • Adjazenzliste jedes Knotens wird nur durchlaufen, wenn er aus der Schlange entfernt wird• Damit wird jede Adjazenzliste maximal einmal durchlaufen (d.h. jede Kante maximal zweimal) Laufzeit für Liste: O(|E|)• Gesamtlaufzeit: O(|V|+|E|)
Graphalgorithmen
LS 2 / Informatik
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
LS 2 / Informatik
91
Lemma 48Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV ein beliebiger
Knoten. Dann gilt für jede Kante (u,v)E:
(s,v) (s,u)+1
Graphalgorithmen
LS 2 / Informatik
92
Lemma 48Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV ein beliebiger Knoten. Dann gilt für
jede Kante (u,v)E:
(s,v) (s,u)+1
Beweis• Ist u erreichbar von s, dann ist es auch v
Graphalgorithmen
LS 2 / Informatik
93
Lemma 48Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV ein beliebiger Knoten. Dann gilt für jede Kante
(u,v)E:
(s,v) (s,u)+1
Beweis• Ist u erreichbar von s, dann ist es auch v• Der kürzeste Weg von s nach v kann nicht länger sein, als der kürzeste Weg
von s nach u gefolgt von der Kante (u,v). Damit gilt die Ungleichung.
Graphalgorithmen
LS 2 / Informatik
94
Lemma 48Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV ein beliebiger Knoten. Dann gilt für jede Kante
(u,v)E:
(s,v) (s,u)+1
Beweis• Ist u erreichbar von s, dann ist es auch v• Der kürzeste Weg von s nach v kann nicht länger sein, als der kürzeste Weg
von s nach u gefolgt von der Kante (u,v). Damit gilt die Ungleichung.• Ist u nicht erreichbar von s, dann ist (s,u)= und die Ungleichung gilt.
Graphalgorithmen
LS 2 / Informatik
95
Lemma 48Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV ein beliebiger Knoten. Dann gilt für jede Kante
(u,v)E:
(s,v) (s,u)+1
Beweis• Ist u erreichbar von s, dann ist es auch v• Der kürzeste Weg von s nach v kann nicht länger sein, als der kürzeste Weg
von s nach u gefolgt von der Kante (u,v). Damit gilt die Ungleichung.• Ist u nicht erreichbar von s, dann ist (s,u)= und die Ungleichung gilt.
Graphalgorithmen
LS 2 / Informatik
96
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von
einem Startknoten sV. Nach Abschluss der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Induktion über Anzahl von Zeitpunkten, an denen ein Knoten in Q eingefügt wird
Graphalgorithmen
LS 2 / Informatik
97
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem
Startknoten sV. Nach Abschluss der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Induktion über Anzahl von Zeitpunkten, an denen ein Knoten in Q eingefügt wird• (I.A.) Nach Initialisierung gilt d[s]=0=(s,s) und d[v]=≥(s,v) für alle vV-{s}
Graphalgorithmen
LS 2 / Informatik
98
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem
Startknoten sV. Nach Abschluss der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Induktion über Anzahl von Zeitpunkten, an denen ein Knoten in Q eingefügt wird• (I.A.) Nach Initialisierung gilt d[s]=0=(s,s) und d[v]=≥(s,v) für alle vV-{s}• (I.V.) Aussage gilt nach m Einfügeoperationen
Graphalgorithmen
LS 2 / Informatik
99
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem Startknoten sV.
Nach Abschluss der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Induktion über Anzahl von Zeitpunkten, an denen ein Knoten in Q eingefügt wird• (I.A.) Nach Initialisierung gilt d[s]=0=(s,s) und d[v]=≥(s,v) für alle vV-{s}• (I.V.) Aussage gilt nach m Einfügeoperationen• (I.S.) Betrachte nach m Einfügeoperationen einen weißen Knoten v, der während einer Suche von u entdeckt
wird. Nach (I.V.) gilt d[u]≥(s,u).
Graphalgorithmen
LS 2 / Informatik
100
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem Startknoten sV. Nach
Abschluss der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Induktion über Anzahl von Zeitpunkten, an denen ein Knoten in Q eingefügt wird• (I.A.) Nach Initialisierung gilt d[s]=0=(s,s) und d[v]=≥(s,v) für alle vV-{s}• (I.V.) Aussage gilt nach m Einfügeoperationen• (I.S.) Betrachte nach m Einfügeoperationen einen weißen Knoten v, der während einer Suche von u entdeckt wird.
Nach (I.V.) gilt d[u]≥(s,u).• Zeile 7: d[v] wird auf d[u]+1 gesetzt
Graphalgorithmen
LS 2 / Informatik
101
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem Startknoten sV. Nach Abschluss
der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Induktion über Anzahl von Zeitpunkten, an denen ein Knoten in Q eingefügt wird• (I.A.) Nach Initialisierung gilt d[s]=0=(s,s) und d[v]=≥(s,v) für alle vV-{s}• (I.V.) Aussage gilt nach m Einfügeoperationen• (I.S.) Betrachte nach m Einfügeoperationen einen weißen Knoten v, der während einer Suche von u entdeckt wird. Nach (I.V.)
gilt d[u]≥(s,u).• Zeile 7: d[v] wird auf d[u]+1 gesetzt• Es gilt: d[v] = d[u]+1 ≥ (s,u)+1 ≥ (s,v) nach Lemma 48
Graphalgorithmen
LS 2 / Informatik
102
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem Startknoten sV. Nach Abschluss
der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Induktion über Anzahl von Zeitpunkten, an denen ein Knoten in Q eingefügt wird• (I.A.) Nach Initialisierung gilt d[s]=0=(s,s) und d[v]=≥(s,v) für alle vV-{s}• (I.V.) Aussage gilt nach m Einfügeoperationen• (I.S.) Betrachte nach m Einfügeoperationen einen weißen Knoten v, der während einer Suche von u entdeckt wird. Nach (I.V.)
gilt d[u]≥(s,u).• Zeile 7: d[v] wird auf d[u]+1 gesetzt• Es gilt: d[v] = d[u]+1 ≥ (s,u)+1 ≥ (s,v) nach Lemma 48
Graphalgorithmen
LS 2 / Informatik
103
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von
einem Startknoten sV. Nach Abschluss der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Knoten v wird dann in die Schlange eingefügt und grau gefärbt
Graphalgorithmen
LS 2 / Informatik
104
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem
Startknoten sV. Nach Abschluss der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Knoten v wird dann in die Schlange eingefügt und grau gefärbt• Damit ändert sich d[v] im Laufe des Algorithmus nicht mehr und die Aussage des Lemmas bleibt
erhalten
Graphalgorithmen
LS 2 / Informatik
105
Lemma 49Sei G=(V,E) ein gerichteter oder ungerichteter Graph und es laufe die Breitensuche von einem
Startknoten sV. Nach Abschluss der Breitensuche gilt für jeden Knoten v, dass d[v] (s,v) ist.
Beweis• Knoten v wird dann in die Schlange eingefügt und grau gefärbt• Damit ändert sich d[v] im Laufe des Algorithmus nicht mehr und die Aussage des Lemmas bleibt
erhalten
Graphalgorithmen
LS 2 / Informatik
106
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche
auf einem Graph G=(V,E), wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Graphalgorithmen
1 r
1 r
1r i i+1
LS 2 / Informatik
107
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf
einem Graph G=(V,E), wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Induktion über die Anzahl Schlangenoperationen
Graphalgorithmen
1 r
1 r
1r i i+1
LS 2 / Informatik
108
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem
Graph G=(V,E), wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Induktion über die Anzahl Schlangenoperationen• (I.A.) Die Schlange enthält nur s, damit gilt das Lemma
Graphalgorithmen
1 r
1 r
1r i i+1
LS 2 / Informatik
109
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph
G=(V,E), wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Induktion über die Anzahl Schlangenoperationen• (I.A.) Die Schlange enthält nur s, damit gilt das Lemma• (I.V.) Das Lemma gilt nach m Schlangenoperationen
Graphalgorithmen
1 r
1 r
1r i i+1
LS 2 / Informatik
110
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E), wobei v Kopf
und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Induktion über die Anzahl Schlangenoperationen• (I.A.) Die Schlange enthält nur s, damit gilt das Lemma• (I.V.) Das Lemma gilt nach m Schlangenoperationen• (I.S.) Wir müssen zeigen, dass das Lemma immer noch nach m+1 Schlangenoperationen gilt. Die (m+1)ste
Schlangenoperation ist entwedereine enqueue oder dequeue Operation
Graphalgorithmen
1 r
1 r
1r i i+1
LS 2 / Informatik
111
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E), wobei v Kopf
und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Induktion über die Anzahl Schlangenoperationen• (I.A.) Die Schlange enthält nur s, damit gilt das Lemma• (I.V.) Das Lemma gilt nach m Schlangenoperationen• (I.S.) Wir müssen zeigen, dass das Lemma immer noch nach m+1 Schlangenoperationen gilt. Die (m+1)ste
Schlangenoperation ist entwedereine enqueue oder dequeue Operation
Graphalgorithmen
1 r
1 r
1r i i+1
LS 2 / Informatik
112
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem
Graph G=(V,E), wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Dequeue: • Wird v aus der Schlange entfernt, so wird v der neue Kopf
Graphalgorithmen
1 r
1 r
1r i i+1
1 2
LS 2 / Informatik
113
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph
G=(V,E), wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Dequeue: • Wird v aus der Schlange entfernt, so wird v der neue Kopf• Dann gilt aber sicherlich d[v ] d[v ]+1 d[v ]+1
Graphalgorithmen
1 r
1 r
1r i i+1
1
1
2
2r
LS 2 / Informatik
114
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E),
wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Dequeue: • Wird v aus der Schlange entfernt, so wird v der neue Kopf• Dann gilt aber sicherlich d[v ] d[v ]+1 d[v ]+1• Alle anderen Ungleichungen sind nicht betroffen, also gilt das Lemma
Graphalgorithmen
1 r
1 r
1r i i+1
1
1
2
2r
LS 2 / Informatik
115
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E),
wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Dequeue: • Wird v aus der Schlange entfernt, so wird v der neue Kopf• Dann gilt aber sicherlich d[v ] d[v ]+1 d[v ]+1• Alle anderen Ungleichungen sind nicht betroffen, also gilt das Lemma
Graphalgorithmen
1 r
1 r
1r i i+1
1
1
2
2r
LS 2 / Informatik
116
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem
Graph G=(V,E), wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Enqueue:
• Wird in Zeile 8 ein Knoten v eingefügt (und damit zu v ), so ist v der Knoten u,von dem aus v entdeckt wurde
Graphalgorithmen
1 r
1 r
1r i i+1
r+1 1
LS 2 / Informatik
117
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph
G=(V,E), wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Enqueue: • Wird in Zeile 8 ein Knoten v eingefügt (und damit zu v ), so ist v der Knoten u,
von dem aus v entdeckt wurde• Es gilt: d[v ] = d[v] = d[u]+1 = d[v ]+1
Graphalgorithmen
1 r
1 r
1r i i+1
r+1 1
r+1 1
LS 2 / Informatik
118
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E),
wobei v Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Enqueue:
• Wird in Zeile 8 ein Knoten v eingefügt (und damit zu v ), so ist v der Knoten u,von dem aus v entdeckt wurde
• Es gilt: d[v ] = d[v] = d[u]+1 = d[v ]+1
• Außerdem: d[v ] d[v ]+1 = d[u]+1 = d[v] = d[v ]
Graphalgorithmen
1 r
1 r
1r i i+1
r+1 1
r 1
r+1 1
r+1
LS 2 / Informatik
119
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E), wobei v
Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Enqueue: • Wird in Zeile 8 ein Knoten v eingefügt (und damit zu v ), so ist v der Knoten u,
von dem aus v entdeckt wurde• Es gilt: d[v ] = d[v] = d[u]+1 = d[v ]+1• Außerdem: d[v ] d[v ]+1 = d[u]+1 = d[v] = d[v ]• Die anderen Ungleichungen bleiben erhalten; Also gilt das Lemma
Graphalgorithmen
1 r
1 r
1r i i+1
r+1 1
r 1
r+1 1
r+1
LS 2 / Informatik
120
Lemma 50Sei <v ,…, v > der Inhalt der Schlange Q während eines Durchlaufs der Breitensuche auf einem Graph G=(V,E), wobei v
Kopf und v Ende der Schlange ist. Dann gilt d[v ]d[v ]+1 und d[v ]d[v ] für i=1,2,…,r-1.
Beweis• Enqueue: • Wird in Zeile 8 ein Knoten v eingefügt (und damit zu v ), so ist v der Knoten u,
von dem aus v entdeckt wurde• Es gilt: d[v ] = d[v] = d[u]+1 = d[v ]+1• Außerdem: d[v ] d[v ]+1 = d[u]+1 = d[v] = d[v ]• Die anderen Ungleichungen bleiben erhalten; Also gilt das Lemma
Graphalgorithmen
1 r
1 r
1r i i+1
r+1 1
r 1
r+1 1
r+1
LS 2 / Informatik
121
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der
Breitensuche. Dann entdeckt die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Graphalgorithmen
LS 2 / Informatik
122
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann
entdeckt die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Beweis• Fall 1 (v nicht erreichbar von s):
Graphalgorithmen
LS 2 / Informatik
123
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann
entdeckt die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) =
Graphalgorithmen
LS 2 / Informatik
124
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann entdeckt
die Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) = • Es kann keinen ersten Knoten geben, dessen d-Wert in Zeile 7 auf gesetzt wird
Graphalgorithmen
LS 2 / Informatik
125
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann entdeckt die
Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) = • Es kann keinen ersten Knoten geben, dessen d-Wert in Zeile 7 auf gesetzt wird• Somit wird v nie entdeckt
Graphalgorithmen
LS 2 / Informatik
126
Satz 51Sei G=(V,E) ein gerichteter oder ungerichteter Graph und sei sV Startknoten der Breitensuche. Dann entdeckt die
Breitensuche alle Knoten vV, die von s aus erreichbar sind und nach Terminierung gilt d[v]=(s,v) für alle vV. Außerdem gilt für jeden von s erreichbaren Knoten vs, dass ein kürzester Weg von s nach [v] gefolgt von der Kante ([v],v) ein kürzester s-v-Weg ist.
Beweis• Fall 1 (v nicht erreichbar von s):• Nach Lemma 49 gilt d[v] (s,v) = • Es kann keinen ersten Knoten geben, dessen d-Wert in Zeile 7 auf gesetzt wird• Somit wird v nie entdeckt
Graphalgorithmen
LS 2 / Informatik
127
Beweis• Fall 2 (v erreichbar von s):
Graphalgorithmen
LS 2 / Informatik
128
Beweis• Fall 2 (v erreichbar von s):
• Sei V = {vV : (s,v) = k}
Graphalgorithmen
k
LS 2 / Informatik
129
Beweis• Fall 2 (v erreichbar von s):• Sei V = {vV : (s,v) = k}• Wir zeigen per Induktion über k:• Es gibt genau einen Zeitpunkt, zu dem jeder Knoten vV
(a) grau gefärbt wird(b) d[v]=k gesetzt wird(c) wenn vs, dann [v] auf u gesetzt wird für ein uV(d) v in Schlange Q eingefügt wird
Graphalgorithmen
k
k
k-1
LS 2 / Informatik
130
Beweis• Fall 2 (v erreichbar von s):• Sei V = {vV : (s,v) = k}• Wir zeigen per Induktion über k:• Es gibt genau einen Zeitpunkt, zu dem jeder Knoten vV
(a) grau gefärbt wird(b) d[v]=k gesetzt wird(c) wenn vs, dann [v] auf u gesetzt wird für ein uV(d) v in Schlange Q eingefügt wird
• Da nur zur Initialisierung Knoten weiß gefärbt werden, gibt es maximal einen solchen Zeitpunkt
Graphalgorithmen
k
k
k-1
LS 2 / Informatik
131
Beweis• Fall 2 (v erreichbar von s):• Sei V = {vV : (s,v) = k}• Wir zeigen per Induktion über k:• Es gibt genau einen Zeitpunkt, zu dem jeder Knoten vV
(a) grau gefärbt wird(b) d[v]=k gesetzt wird(c) wenn vs, dann [v] auf u gesetzt wird für ein uV(d) v in Schlange Q eingefügt wird
• Da nur zur Initialisierung Knoten weiß gefärbt werden, gibt es maximal einen solchen Zeitpunkt
Graphalgorithmen
k
k
k-1
LS 2 / Informatik
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
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
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
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
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
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 vV , 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
k-1
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 vV , 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
k-1
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 uV
Graphalgorithmen
k-1v
u
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 uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.)
Graphalgorithmen
k-1v
u
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 uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Graphalgorithmen
k-1v
u
LS 2 / Informatik
142
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt
Graphalgorithmen
k-1v
u
LS 2 / Informatik
143
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt
Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u.
Graphalgorithmen
k-1v
u
LS 2 / Informatik
144
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt
Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u. Zeile 8 fügt v in die Schlange ein
Graphalgorithmen
k-1v
u
LS 2 / Informatik
145
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt
Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u. Zeile 8 fügt v in die Schlange ein Damit folgt unsere Aussage per Induktion für alle V
Graphalgorithmen
k-1v
u
k
LS 2 / Informatik
146
Beweis Da (s,v)=k gibt es Pfad mit k Kanten von s nach v und Knoten u mit (u,v)E und uV ObdA. Sei u der erste solche Knoten, der grau gefärbt wird
(existiert wegen I.V.) Wird Knoten grau gefärbt, so wird er auch in Schlange
eingefügt und muss irgendwann als Kopf der Schlangeauftauchen
Ist u Kopf der Schlange, so wird seine Adjazenzliste durchlaufenund v in Zeile 4 entdeckt
Dann wird v in Zeile 6 grau gefärbt und Zeile 7 setzt d[v]=k und [v]=u. Zeile 8 fügt v in die Schlange ein Damit folgt unsere Aussage per Induktion für alle V
Graphalgorithmen
k-1v
u
k
LS 2 / Informatik
147
Beweis Abschließend beobachten wir, dass wenn vV ist, dann ist [v] in V
Graphalgorithmen
k-1k
LS 2 / Informatik
148
Beweis Abschließend beobachten wir, dass wenn vV ist, dann ist [v] in V Damit können wir einen kürzesten Weg von s nach v bekommen, indem wir
einen kürzesten Weg von s nach [v] nehmen und der Kante ([v],v) folgen
Graphalgorithmen
k-1k
LS 2 / Informatik
149
Beweis Abschließend beobachten wir, dass wenn vV ist, dann ist [v] in V Damit können wir einen kürzesten Weg von s nach v bekommen, indem wir
einen kürzesten Weg von s nach [v] nehmen und der Kante ([v],v) folgen
Graphalgorithmen
k-1k
LS 2 / Informatik
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|)