datenstrukturen, algorithmen und programmierung 2 (dap2)

Post on 19-Jan-2016

30 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Datenstrukturen, Algorithmen und Programmierung 2 (DAP2). Datenstrukturen. 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). 3. 2. 6. 5. 4. 1. 1. 11. 3. 2. 7. 10. - PowerPoint PPT Presentation

TRANSCRIPT

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

top related