Breitensuche – Überblick (1)

Werbung
Breitensuche – Überblick (1)
Die Breitensuche ist ein Algorithmus, der die
Grundlage vieler Graphenalgorithmen bildet.
Ziel der Breitensuche ist es, bei einem Graphen
G=(V,E) und einer Quelle s ∈ V alle Knoten v ∈ V
zu finden, die von s aus erreichbar sind. Dabei ist
ein Knoten v von s aus erreichbar, wenn es in G
einen Pfad von s nach v gibt.
Die Breitensuche berechnet auch für alle Knoten v
den Abstand δ(s, v ) von s zu v. Dabei ist der Abstand
von s zu v die minimale Anzahl von Kanten auf einem
Pfad von s nach v.
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
1
Breitensuche - Überblick (2)
Die Breitensuche bestimmt alle Knoten mit Abstand
< k vor den Knoten mit Abstand k. Daher der Name
Breitensuche.
Breitensuche funktioniert in gleicher Weise bei
gerichteten und ungerichteten Graphen.
Nehmen an, dass Eingabegraph in AdjazenzlistenDarstellung gegeben ist.
Sagen, dass ein Knoten entdeckt wird, wenn er das
erste Mal bei der Breitensuche angetroffen wird.
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
2
Breitensuche - Überblick (3)
Wird v entdeckt, während Adj[u] nach neuen Knoten
durchsucht wird, so heißt u Vorgänger von v.
Knoten sind entweder weiß, grau oder schwarz.
Weiß sind alle noch nicht entdeckten Knoten.
Grau sind alle entdeckten Knoten, deren
Adjazenzliste noch nicht vollständig nach neuen
Knoten durchsucht wurde.
Schwarz sind alle anderen Knoten, d.h., schwarze
Knoten wurden bereits entdeckt und ihre Adjazenzliste wurde vollständig durchsucht.
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
3
Pseudocode für Breitensuche
BFS(G, s )
1 for jeden Knoten u in V \ {s}
BFS benutzt Queue für graue Knoten.
2
do color [u] ← WHITE
3
d[u] ← ∞
color [u] := Feld für Farbe von v. Initial
4
π[u] ← NIL
WHITE.
5 color [s] ← GRAY
6 d[s] ← 0
d[u] := Feld für bislang berechneten
7 π[s] ← NIL
Abstand zu s. Initial ∞ .
8 Q←{ }
9 Enqueue (Q, s )
π[u] := Feld für Vorgänger. Initial NIL.
10 while Q ≠ { }
11
do u ← Dequeue (Q )
12
for v ∈ Adj[u]
13
do if color [v ] = WHITE
14
then color [v ] ← GRAY
15
d[v ] ← d[u] + 1
16
π[v ] ← u
17
Enqueue (Q, v )
18
color [u] ← BLACK
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
4
Pseudocode für Breitensuche
BFS(G, s )
1 for jeden Knoten u in V \ {s}
BFS benutzt Queue für graue Knoten.
do color [u] ← WHITE
2
3
d[u] ← ∞
color [u] := Feld für Farbe von v. Initial
4
π[u] ← NIL
WHITE.
5 color [s] ← GRAY
6 d[s] ← 0
d[u] := Feld für bislang berechneten
7 π[s] ← NIL
Abstand zu s. Initial ∞ .
8 Q←{ }
9 Enqueue (Q, s )
π[u] := Feld für Vorgänger. Initial NIL.
10 while Q ≠ { }
11
do u ← Dequeue (Q )
12
for v ∈ Adj[u]
13
do if color [v ] = WHITE
14
then color [v ] ← GRAY
initialisiere BFS
15
d[v ] ← d[u] + 1
16
π[v ] ← u
17
Enqueue (Q, v )
18
color [u] ← BLACK
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
5
Breitensuche - Beispiel
d
a
BFS(G,s)
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: s
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
6
Breitensuche - Beispiel
d
a
BFS(G,s)
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: s
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
7
Breitensuche - Beispiel
d
a
BFS(G,s)
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q:
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
8
Breitensuche - Beispiel
d
v=a
BFS(G,s)
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q:
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
9
Breitensuche - Beispiel
d
v=a
BFS(G,s)
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q:
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
10
Breitensuche - Beispiel
d
v=a
BFS(G,s)
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q:
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
11
Breitensuche - Beispiel
d
v=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q:
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
12
Breitensuche - Beispiel
v=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: a
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
13
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u v=b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: a
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
14
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u v=b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: a
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
15
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u v=b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: a
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
16
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u v=b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: a
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
17
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u v=b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: a, b
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
18
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: a, b
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
19
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: a, b
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
20
Breitensuche - Beispiel
d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
c
h
g
f
i
Q: b
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
21
Breitensuche - Beispiel
v=d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
c
e
h
g
f
i
Q: b
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
22
Breitensuche - Beispiel
v=d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
c
e
h
g
f
i
Q: b
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
23
Breitensuche - Beispiel
v=d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
c
e
h
g
f
i
Q: b
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
24
Breitensuche - Beispiel
v=d
2
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
c
e
h
g
f
i
Q: b
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
25
Breitensuche - Beispiel
v=d
2
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
c
e
h
g
f
i
Q: b, d
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
26
Breitensuche - Beispiel
d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
f
i
Q: b, d
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
27
Breitensuche - Beispiel
d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
f
i
Q: b, d
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
28
Breitensuche - Beispiel
d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
f
i
Q: b, d
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
29
Breitensuche - Beispiel
d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
2
f
i
Q: b, d
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
30
Breitensuche - Beispiel
d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
2
f
i
Q: b, d, c
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
31
Breitensuche - Beispiel
d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
2
f
i
Q: b, d, c
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
32
Breitensuche - Beispiel
d
u=a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
2
f
i
Q: b, d, c
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
33
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u=b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
2
f
i
Q: d, c
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
34
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u=b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
2
f
i
Q: d, c
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
35
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u=b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
2
f
i
Q: d, c
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
36
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
u=b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
v=c
e
h
g
2
f
i
Q: d, c
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
37
Breitensuche - Beispiel
u=d
2
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
v=c
e
h
g
2
f
i
Q: c
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
38
Breitensuche - Beispiel
u=d
2
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
c
v=e
h
g
2
f
i
Q: c
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
39
Breitensuche - Beispiel
u=d
2
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
v=e
h
3
c
g
2
f
i
Q: c, e
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
40
Breitensuche - Beispiel
u=d
2
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
h
3
c
g
2
v=f
i
Q: c, e
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
41
Breitensuche - Beispiel
u=d
2
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
s
0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
h
3
c
g
2
v=f
i
3
Q: c, e, f
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
42
Breitensuche - Beispiel
u=d
2
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
h
3
c
g
2
f
i
3
Q: c, e, f
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
43
Breitensuche - Beispiel
u=d
2
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
h
3
c
g
2
f
i
3
Q: c, e, f
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
44
Breitensuche - Beispiel
u=d
2
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
e
h
3
c
g
2
f
i
3
Q: c, e, f
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
45
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
u=c
g
2
f
i
3
Q: e, f
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
46
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
u=c
g
2
f
i
3
Q: e, f
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
47
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
u=c
g
2
f
i
3
Q: e, f
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
48
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
u=e
h
3
c
g
2
f
i
3
Q: f
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
49
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
u=e
h
3
c
g
2
f
4
i
3
Q: f, g
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
50
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
u=e
h
3
c
g
2
f
4
i
3
Q: f, g
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
51
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
c
g
2
u=f
4
i
3
Q: g
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
52
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
c
g
2
u=f
4
i
4
3
Q: g, i
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
53
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
c
g
2
u=f
4
i
4
3
Q: g, i
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
54
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
c
u=g
2
f
4
i
4
3
Q: i
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
55
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
c
u=g
2
f
4
5
i
4
3
Q: i, h
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
56
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
c
u=g
2
f
4
5
i
4
3
Q: i, h
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
57
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
c
g
2
f
4
5
u=i
4
3
Q: h
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
58
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
c
g
2
f
4
5
u=i
4
3
Q: h
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
59
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
h
3
c
g
2
f
4
5
u=i
4
3
Q: h
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
60
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
u=h
3
c
g
2
f
4
5
i
4
3
Q:
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
61
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
u=h
3
c
g
2
f
4
5
i
4
3
Q:
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
62
Breitensuche - Beispiel
d
a
BFS(G,s)
1
1. „initialisiere BFS“
2. while Q≠∅ do
v=s 0
3.
u ← Dequeue(Q)
b
4.
for v∈Adj[u] do
5.
if color[v]=WHITE then 1
6.
color[v] ← GRAY
7.
d[v] ← d[u]+1; π[v] ← u
8.
Enqueue(Q,v)
9.
color[u] ← BLACK
SS 2008
2
e
u=h
3
c
g
2
f
4
5
i
4
3
Q:
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
63
Breitensuche – Laufzeitanalyse (1)
Zeilen 2-4 jeweils konstante Zeit. Werden V − 1 mal
durchlaufen. Damit Zeit O ( V ).
Zeilen 5-9 insgesamt konstante Zeit.
Jeder Knoten wird nur einmal in Queue eingefügt
und gelöscht.
Schleife in Zeilen 12 -17 wird für jeden Eintrag v in
Adjazenzlisten nur einmal durchlaufen.
Zeilen 12-17 pro Durchlauf Zeit O (1).
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
64
Breitensuche – Laufzeitanalyse (3)
Gesamtzeit für Durchläufe der Schleife in
Zeilen 11-18 insgesamt O (E ). Denn Gesamtgröße
aller Adjazenzlisten Θ(E ).
Satz 14.1: Bei Eingabe von Graph G=(V,E) und
Quelle s besitzt Algorithmus BFS Laufzeit
O (V + E )
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
65
Pseudocode für Breitensuche
BFS(G, s )
1 for jeden Knoten u in V \ {s}
do color [u] ← WHITE
2
3
d[u] ← ∞
4
π[u] ← NIL
5 color [s] ← GRAY
6 d[s] ← 0
7 π[s] ← NIL
8 Q←{ }
9 Enqueue (Q, s )
10 while Q ≠ { }
11
do u ← Dequeue (Q )
12
for v ∈ Adj[u]
13
do if color [v ] = WHITE
14
then color [v ] ← GRAY
15
d[v ] ← d[u] + 1
16
π[v ] ← u
17
Enqueue (Q, v )
18
color [u] ← BLACK
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
66
Breitensuche – Erreichbarkeit, Kürzeste Pfade (1)
Lemma 14.2: Sei G= (V,E) ein gerichteter oder
ungerichteter Graph. Sei s ∈ V beliebig. Für
jede Kante (u, v ) ∈ E gilt
δ(s, v ) ≤ δ(s, u) + 1.
Lemma 14.3: Sei G=(V,E) ein gerichteter oder
ungerichteter Graph. Sei s ∈ V beliebig und s,G
Eingabe für BFS. Nach Beendigung von BFS gilt
für jeden Knoten v ∈ V
d[v ] ≥ δ(s, v ).
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
67
Breitensuche – Erreichbarkeit, Kürzeste Pfade (2)
Lemma 14.4: Die Queue Q enthalte zu einem beliebigen
Zeitpunkt des Ablaufs von BFS die Knoten (v1,K, v r ),
wobei v1 der Kopf head[Q] und v r das Ende tail[Q]
sei. Dann gilt
d[v r ] ≤ d[v1 ] + 1 und d[v i ] ≤ d[v i+1 ], i = 1,K, r - 1.
Korollar 14.5: Knoten v i werde während des Ablaufs
von BFS vor Knoten v j in die Queue Q eingefügt.
Zum Zeitpunkt, an dem v j in die Queue Q eingefügt
wird, gilt
d[v i ] ≤ d[v j ].
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
68
Breitensuche – Erreichbarkeit, Kürzeste Pfade (3)
Satz 14.6: Sei G=(V,E) ein gerichteter oder
ungerichteter Graph. Sei s ∈ V beliebig und s,G
Eingabe für BFS. Nach Beendigung von BFS gilt
für jeden Knoten v ∈ V
d[v ] = δ(s, v ).
Insbesondere sind die von s aus erreichbaren
Knoten v die Knoten mit d[v ] < ∞ .
Weiter ist für jeden von s aus erreichbaren Knoten
v ≠ s ein kürzester Pfad von s zu v gegeben durch
einen kürzesten Pfad von s zum Vorgänger π[v ]
von v erweitert um die Kante (π[v ], v ).
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
69
Breitensuche
Betrachten nach BFS mit Eingabe G,s den Graphen
Gπ = (Vπ ,E π ) mit
Vπ = {v ∈ V | π[v ] ≠ NIL} ∪ {s}.
und
E π := {(π[v ], v ) | v ∈ Vπ \ {s}}.
Dann gilt
Satz 14.7: Gπ = (Vπ ,E π ) ist ein Baum. Vπ enthält genau
die von s aus erreichbaren Knoten in G. Für jeden
Knoten v ∈ Vπ ist der eindeutige Pfad von s zu v in
Gπ ein kürzester Pfad von s zu v in G.
SS 2008
Datenstrukturen und Algorithmen
14. Elementare Graphalgorithmen
70
Herunterladen