V14 - TU Ilmenau

Werbung
Graphentheorie: Grundbegriffe – 1
Graphen (ungerichtet)
Algorithmen und Datenstrukturen
14. Vorlesung
1
2
6
3
Karl-Heinz Niggl
5
4. Juli 2006
4
Digraph / gerichteter Graph:
1
2
6
3
5
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
FG KTuEA, TU Ilmenau
Graphentheorie: Grundbegriffe – 2
Städte und Verbindungswege
Gatter und Leitungen auf einem Chip
Systemkomponenten und Verbindungen
Zustände eines Systems und Übergänge
(Daten-)Flussdiagramme für Programmentwurf(-analyse)
Vorgänge mit Unverträglichkeitsbeziehungen
Transportsysteme: Stationen, Verbindungskapazitäten
Soziale Beziehungen . . .
AuD – 07.4.2006
1
Def. Ein gerichteter Graph (englisch: directed graph), kurz
Digraph, ist ein Paar G := (V, E), wobei gilt:
• V ist eine endliche Menge,
• E ⊆ V × V = {(u, v) | u, v ∈ V }.
Die Elemente von V heißen Knoten (node oder vertex).
Die Elemente von E heißen Kanten (edge oder arc).
v
Darstellung von Knoten v:
Darstellung von Kanten e = (u, v):
Hier: Nur Algorithmen zum Umgang mit den Strukturen.
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
Graphentheorie: Grundbegriffe – 3
Graphen und Digraphen sind eine in der Informatik grundlegende (Daten-)Struktur. Graphen modellieren z.B.
•
•
•
•
•
•
•
•
4
2
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
u
v
e
3
Graphentheorie: Grundbegriffe – 4
Graphentheorie: Grundbegriffe – 5
Def. Sei G = (V, E) ein Digraph, e = (u, v) ∈ E eine Kante.
Def. Sei G = (V, E) ein Graph. Der Ingrad (indegree) eines
Knotens v ∈ V ist die Anzahl in v eingehenden Kanten:
u
v
e
• u bzw. v heißen inzident zu e (u, v liegen auf e).
v
indeg(v) := |pred(v)|
...
...
• u und v heißen adjazent (benachbart).
• v heißt Nachfolger von u, suc(u) := {v ∈ V | (u, v) ∈ E}
die Menge der Nachfolger von u.
• u heißt Vorgänger von v, pred(v) := {u ∈ V | (u, v) ∈ E}
die Menge der Vorgänger von u.
Der Ausgrad (outdegree) von v ist #(ausgehenden Kanten):
v
outdeg(v) := |suc(v)|
...
...
• Eine Kante (v, v) heißt Schleife (loop).
v
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
4
Graphentheorie: Grundbegriffe – 6
Äquivalent: Kantenfolge (v0, v1), (v1, v2), . . . , (vk−1, vk )
v∈V
1
4
6
1
2
3
6
7
2
5
3
9
8
Wiederholungen sind nicht verboten!
Bsp. (9, 9), (1, 3, 1, 2, 3, 4, 6, 9, 9, 9), (5).
9
8
• Die Länge eines Weges (v0, v1, . . . , vk ) ist k, die Kantenzahl. Insbesondere hat ein Weg (v) die Länge 0.
Summe der Ingrade: 1 + 1 + 2 + 2 + 1 + 1 + 1 + 2 + 2 = 13
AuD – 07.4.2006
4
Bsp. (1, 3, 5, 4, 6)
7
Bsp. |E| = 13
5
5
Def. Sei G = (V, E) ein Digraph.
• Ein Weg (auch Pfad) in G ist eine Folge (v0, v1, . . . , vk )
von Knoten in G mit (vi−1, vi) ∈ E für 1 ≤ i ≤ k.
Beweis. : In beiden Summen wird jede Kante genau einmal
gezählt. FG KTuEA, TU Ilmenau
AuD – 07.4.2006
Graphentheorie: Grundbegriffe – 7
Lemma (Ingrade/Ausgrade und Kantenzahl).
Für einen Graphen G = (V, E) gilt:
X
X
indeg(v) =
outdeg(v) = |E|
v∈V
FG KTuEA, TU Ilmenau
6
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
7
Graphentheorie: Grundbegriffe – 8
Graphentheorie: Grundbegriffe – 9
Def. Ein Weg (v0, v1, . . . , vk ) aus paarweise verschiedenen
Knoten in einem Digraphen G heißt einfach (simple).
Lemma (Partielle Ordnung, Einfachheit: Digraph G).
1. Die Relation G ist reflexiv und transitiv, d.h. stets gilt:
v G v und
u G v ∧ v G w =⇒ u G w.
2. Ist G azyklisch, so ist G eine partielle Ordnung auf V ,
d.h. neben 1. ist G auch antisymmetrisch, d.h. es gilt:
u G v und v G u =⇒ u = v.
3. Wenn v G w gilt, dann existiert in G auch ein einfacher
Weg von v nach w.
4
1
Bsp. (1, 3, 5, 4, 6)
6
5
2
3
7
9
8
Def. Sei G = (V, E) ein Digraph. Knoten v, w ∈ V heißen
wegverbunden in G, in Zeichen v G w, falls in G ein Weg
(v, v1, . . . , vk−1, w) existiert.
Bsp. 1
G
1, 1
G
6, 1
G
9
G heißt dag (directed acyclic graph), falls G azyklisch ist, d.h.
G besitzt keinen Kreis, d.h. einen Weg (v0, v1, . . . , vk−1, v0).
Beweis. Zu 1. Offenbar ist (v) ein Weg von v nach v.
Sind (v0, . . . , vk ) und (vk , w1, . . . , wl) Wege in G, so auch
(v0, . . . , vk , w1, . . . , wl).
FG KTuEA, TU Ilmenau
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
8
Graphentheorie: Grundbegriffe – 10
AuD – 07.4.2006
9
Graphentheorie: Grundbegriffe – 11
3
1
5
Zu 2. Folgt aus 1. und der Kreisfreiheit von G.
7
Bsp.
Zu 3. Idee: Entferne alle vorhandenen Kreise.
1:
2:
3:
2
procedure delete-circles-in-path( p := (v0, . . . , vk ))
while p enthält vi = vj mit 0 ≤ i < j < Länge(p) do
p := (v0, . . . , vi, vj+1, . . . , vk )
6
4
(2, 1, 3, 2, 2, 3, 5, 4, 1, 3, 4 , 6, 2, 3, 4, 3, 5)
→
(2, 1, 3, 2, 2,3,5,4,6,2 , 3, 4, 3, 5)
→
(2, 1, 3, 2,2 , 3, 4, 3, 5)
Korrektheit: Kommt in p = (v0, . . . , vk ) ein Knoten vi = vj ,
0 ≤ i < j ≤ k zweimal vor, so ist (v0, . . . , vi, vj+1, . . . , vk )
immer noch ein Weg in G von v0 nach vk .
→
(2, 1, 3,2,3,4,3 , 5)
→
(2, 1, 3, 5)
FG KTuEA, TU Ilmenau
FG KTuEA, TU Ilmenau
4:
return p
AuD – 07.4.2006
10
Bem. Andere Auswahlfolge liefert den einfachen Weg (2, 3, 5).
AuD – 07.4.2006
11
Graphentheorie: Grundbegriffe – 12
Graphentheorie: Grundbegriffe – 13
Def. Ein Kreis (v0, v1, . . . , vk−1, v0) in einem Digraphen G
heißt einfach, falls v1, . . . , vk−1 paarweise verschieden sind.
Beweis. Wie bei der Konstruktion von einfachen Wegen, nur
mit verschärfter Suchbedingung: vi = vj mit 0 ≤ i < j < k.
Bsp. (1, 3, 5, 4, 1), (6, 7, 4, 6), (2, 2) sind einfache Kreise.
5
2
2
6
6
4
4
Bem. Kreise, die sich nur im Anfangspunkt unterscheiden,
werden oft identifiziert.
Lemma (Existenz einfacher Kreise bei Digraphen G).
In einem Digraph G besitzt jeder Kreis (v0, v1, . . . , vk−1, v0)
auch einen einfachen Kreis (v0, vi1 , . . . , vil , v0).
FG KTuEA, TU Ilmenau
7
Bsp.
7
5
3
1
3
1
AuD – 07.4.2006
12
Graphentheorie: Grundbegriffe – 14
(3, 4, 6, 2, 2, 3, 5, 4,1,3,5,4 , 6, 7, 4, 3)
→ 3,4,6,2,2,3 , 5, 4, 6, 7, 4, 3)
→ (3, 5, 4,6,7,4 , 3)
→ (3, 5, 4, 3)
Alternative: (3, 4,6,2,2,3,5,4,1,3,5,4,6,7,4 , 3) → (3, 4, 3)
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
13
Graphentheorie: Grundbegriffe – 15
Def. Ein Graph (ungerichtet) ist ein Paar G := (V, E) mit:
• V ist eine endliche Menge,
• E ⊆ [V ]2 := {{u, v} | u, v ∈ V, u 6= v}.
Bsp.
Die Elemente von V heißen Knoten (node oder vertex).
Die Elemente von E heißen Kanten (edge).
Darstellung von Kanten e = (u, v):
Def. Sei G = (V, E) ein Graph und e = (u, v) ∈ E eine Kante.
v
Darstellung von Knoten v:
u
u
v
e
Konvention: Kanten {u, v} = {v, u} werden als Paare (u, v)
geschrieben. Nur: Bei Kanten von (ungerichteten) Graphen
gilt: (u, v) = (v, u)
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
v
e
14
• u bzw. v heißen inzident zu e (u, v liegen auf e).
• u und v heißen adjazent (benachbart).
• u heißt Nachbar von v und v heißt Nachbar von u.
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
15
Graphentheorie: Grundbegriffe – 16
Graphentheorie: Grundbegriffe – 17
Def. Sei G ein Graph. Der Grad (degree) eines Knoten v, in
Zeichen deg(v), ist die Anzahl seiner Nachbarn:
1
5
7
10
11
Bsp. Im Graphen
deg(v) := |{u ∈ V | (u, v) ∈ E}|
2
4
6
8
9
ist die Anzahl der Kanten 12 und die Summe der Grade ergibt:
1 + 2 + 4 + 4 + 2 + 3 + 2 + 2 + 2 + 2 + 0 = 24
Knoten v mit Grad 0, d.h. ohne Nachbarn, heißen isoliert.
Bsp.
3
Def. Sei G = (V, E) ein Graph.
• Die Begriffe Weg (Pfad) in G, Länge und Einfachheit
eines Weges in G sind wie bei Digraphen definiert.
v
deg(v) = 6
Lemma (Handshaking). Für Graphen G = (V, E) gilt:
P
v∈V deg(v) = 2·|E|
Neu. Ist (v0, v1 . . . , vk ) ein Weg, so auch (vk , vk−1, . . . , v0).
Beweis. Kante (u, v) trägt 1 zu deg(u) und 1 zu deg(v) bei.
• Sind u, v ∈ V durch einen Weg in G verbunden, so schreiben
wir u ∼G v (oder u ∼ v, falls G im Kontext bekannt ist).
FG KTuEA, TU Ilmenau
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
16
Graphentheorie: Grundbegriffe – 18
Bem. Es gilt: u ∈ [v]∼G =⇒ [u]∼G = [v]∼G
Mittels Äquivalenzklassen werden diejenigen Elemente einer
Menge identifiziert, die dasgleiche tun (
Repräsentant“).
”
In [v]∼G ist jedes u mit jedem anderen w wegverbunden.
[v]∼G heißt auch Zusammenhangskomponente von G. Liest
man u ∼G v als u mag v, so ist [v]∼G eine Clique.
Lemma (Äquivalenzrelation).
Die Relation ∼G ist eine Äquivalenzrelation, d.h. es gilt:
Reflexivität: v ∼G v
Symmetrie: u ∼G v =⇒ v ∼G u
Transitivität: u ∼G v ∧ v ∼G w =⇒ u ∼G w
Bew. Symmetrie folgt aus Neu, Rest wie bei Digraphen.
Def. Die Menge [v]∼G := {u | u ∼G v} heißt Äquivalenzklasse von G mit Repräsentant v.
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
17
Graphentheorie: Grundbegriffe – 19
Lemma (Existenz einfacher Wege).
u ∼G v =⇒ ∃ einfacher Weg von u nach v.
Bew. Wie bei Digraphen.
AuD – 07.4.2006
18
Bem. Die Menge der Zusammenhangskomponenten bildet
eine Partition von V , d.h. es gilt:
• [v]∼G 6= ∅
• [u]∼G ∩ [v]∼G 6= ∅ =⇒ [u]∼G = [v]∼G
S
[v]∼G
• V=
v∈V
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
19
Graphentheorie: Grundbegriffe – 20
Bsp. Graph mit 4 ZHKn
2
3
4
6
5
7
Graphentheorie: Grundbegriffe – 21
8
Def. Ein Weg (v0, v1, . . . , vk ) in einem Graphen G heißt Kreis,
falls gilt: k ≥ 3, v0 = vk und (∀i ∈ {1, . . . , k −1} : vi−1 6= vi+1)
sowie vk−1 6= v1.
1
10
1
9
9
7
6
2
3
5
8
4
10
v
Kreis: (6,7,8,5,6,1,2,9,10,3,2,1,6)
Bsp. Graph mit 7 ZHKn
D.h., ein Hin und her“ (. . . , u, v, u, . . . ) über dieselbe Kante
”
(u, v) = (v, u) ist nicht erlaubt. Daher muß vk−1 6= v1 gelten.
Sonstige Knoten- oder Kantenwiederholungen sind erlaubt.
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
20
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
Graphentheorie: Grundbegriffe – 22
Graphentheorie: Grundbegriffe – 23
Def. Ein Weg (v0, v1, . . . , vk ) in einem Graphen G heißt
einfacher Kreis, falls gilt: k ≥ 3, v0 = vk und v0, v1, . . . , vk−1
sind paarweise verschieden.
Def. Sei G = (V, E) ein Graph.
• G heißt azyklisch (kreisfrei), falls er keinen Kreis besitzt.
1
7
6
21
Bsp.
9
2
Bsp.
3
5
8
4
• G heißt freier Baum, kurz Baum, falls er kreisfrei und
zusammenhängend ist.
10
Einfache Kreise: (6,1,2,9,10,3,4,5,6)
und (1,6,5,4,3,10,9,2,1)
Lemma (Existenz einfacher Kreise).
Besitzt ein Graph einen Kreis, so auch einen einfachen Kreis.
Bsp.
Beweis. Übung!
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
22
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
23
Graphentheorie: Grundbegriffe – 24
Datenstrukturen für Digraphen/Graphen – 1
Lemma (Charakterisierung freier Bäume).
Für Graph G = (V, E) sind folgende Aussagen äquivalent:
1. G ist ein freier Baum.
2. G ist kreisfrei und |E| ≥ |V |−1.
3. G ist zusammenhängend und |E| ≤ |V |−1.
4. Je zwei Knoten u, v sind durch genau einen einfachen Weg
verbunden.
5. G ist maximal kreisfrei, d.h. G ist kreisfrei und jede neue
Kante erzeugt einen Kreis.
6. G ist minimal zusammenhängend (analog definiert).
Beweis. Wird für Interessierte auf die Webseite gelegt.
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
24
Datenstrukturen für Digraphen/Graphen – 2
MG = (aij )1≤i,j≤n mit
(
1, falls (i, j) ∈ E
aij :=
0, sonst.
In den meisten Programmiersprachen:
Matrizen sind als 2-dimensionale Arrays A[1 . . n][1 . . n]
realisierbar, mit Einträgen aus {0, 1} oder vom Typ boolean.
B
1
2
5
4
E
3
D
C
2) Dann stelle V z.B. durch ein Array dar:
nodes[1..n] of nodetype
wobei sich vi in nodes[i] befindet und i.a. noch mehr: Attribute
der Knoten wie Markierungen oder Beschriftungen.
Also: Knoten sind i.a. mit 1, 2, . . . , n numeriert und ein nodesArray ist vorhanden. Dann ist (i, j) Kante ⇐⇒ (vi, vj ) ∈ E.
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
25
Beispiel-Digraph:
1 2 3 4
1 0 1 0 1
2 0 0 1 0
3 1 0 1 0
4 1 1 0 0
5 1 0 0 0
6 1 0 0 1
5
0
1
1
0
0
0
6
0
1
1
0
1
0
1
=
b
2
6
3
5
4
Dann gilt:
Anzahl der 1en in Zeile i = Ausgrad von Knoten i
Anzahl der 1en in Spalte j = Ingrad von Knoten j
Fazit: Zugriff (Lesen, Schreiben) auf aij geht in Zeit O(1).
AuD – 07.4.2006
A
Bsp.
nodes:
1: A
2: B
3: E
4: D
5: C
Datenstrukturen für Digraphen/Graphen – 3
Def. Sei G = (V, E) ein Graph/Digraph mit V = {1, . . . , n}.
Die Adjazenzmatrix von G die n × n-Matrix
FG KTuEA, TU Ilmenau
Sei G = (V, E) beliebiger Graph oder Digraph.
1) Ordne die n = |V | Knoten beliebig an: V = {v1, . . . , vn}
26
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
27
Datenstrukturen für Digraphen/Graphen – 4
Beispiel-Graph:
1 2 3 4
1 0 1 1 1
2 1 0 1 0
3 1 1 0 0
4 1 0 0 0
5 0 1 1 1
6 0 1 1 0
5
0
1
1
1
0
1
6
0
1
1
0
1
0
1
Datenstrukturen für Digraphen/Graphen – 5
Bem. Stellt man Graphen/Digraphen mit n Knoten als Adjazenzmatrix dar, so gilt:
2
1. Speicherplatzbedarf ist Θ(n2).
=
b
6
2. Zugriff (Lesen/Schreiben) auf aij geht in Zeit O(1).
3
5
3. Die Ermittlung aller Nachfolger, Vorgänger oder Nachbarn
eines Knotens erfordert Zeit Θ(n).
4
(Zeilen/Spaltendurchlauf; Reihenfolge: 1, . . . , n)
4. Der Speicherplatzbedarf ist im Vergleich zur vorhandenen
Information relativ hoch, falls |E| ≪ n2 (dünn besetzte
Graphen).
Bem. Die Adjazenzmatrix eines Graphen ist symmetrisch!
Bem. #(1en in Zeile/Spalte i) = Grad von Knoten i.
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
28
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
29
Datenstrukturen für Digraphen/Graphen – 6
Datenstrukturen für Digraphen/Graphen – 7
Erweiterung: Sind die Kanten mit Objekten aus einer
(Markierungs-)Menge M beschriftet, benutzt manstatt des
Booleschen Arrays ein Array mit Einträgen aus M ∪ {−} ( −“
”
bedeutet nicht vorhanden“):
”
2
1
1 2 3 4 5 6
a
1 − a − c − −
f
h
a
2 − − f − a d
d
c
3
b 6
3 a − d − b c =
f c b
a
d
e a
4 e a − − − −
d
c
5 f − − − − c
4
6 h − − d − −
5
Bem. Bei Zahleneinträgen wird für − oft 0 oder ∞ verwendet,
je nach Anwendungsart.
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
30
Bsp. für mögliche Beschriftungen: anwendungsabhängig.
Kantenlängen l(i, j) ∈ R
Kantengewicht w(i, j) ∈ R
(Transport-)Kapazitäten c(i, j) ∈ R+
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
31
Datenstrukturen für Digraphen/Graphen – 8
Datenstrukturen für Digraphen/Graphen – 9
Def. Bei der Adjazenzlistendarstellung von Digraphen oder
Graphen existiert für jeden Knoten i eine Liste Li der
Bem. 1) Die Länge der Liste Li ist outdeg(i) bei Digraphen
und deg(i) bei Graphen.
• Nachfolger von i im Fall von Digraphen
• Nachbarn von i im Fall von Graphen.
2) Bei Graphen gilt: Eintrag i kommt in Lj vor ⇐⇒ Eintrag
j kommt in Li vor.
nodes:
Bsp.
FG KTuEA, TU Ilmenau
1:
2
4
2:
5
6
3
3:
5
3
1
4:
1
2
5:
4
1
6:
1
4
3) Durch die Reihenfolge der Einträge in Liste Li sind die
Nachbarn/Nachfolger von Knoten i immer implizit angeordnet.
6
Erweiterungen:
a) Knotenbeschriftungen befinden sich im nodes-Array.
6
AuD – 07.4.2006
b) Kantenbeschriftungen speichert man in zusätzlichen Attributen in den Listenelementen der Adjazenzlisten.
32
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
33
Breitensuche in Digraphen – 1
Datenstrukturen für Digraphen/Graphen – 10
2. Das Durchlaufen aller Kanten benötigt Zeit O(|V |+|E|).
1. Breitensuche von einem Knoten v0 aus:
Finde alle Knoten v, die von v0 aus erreichbar sind. Numeriere
die entdeckten Knoten durch. Bestimme für jeden von v0 aus
erreichbaren Knoten v einen kürzesten Weg von v0 nach v,
Abstand von v0 zu v.
3. Das Durchlaufen der Adjazenzliste zu Knoten i benötigt Zeit
O(deg(i)) bei Graphen bzw. O(outdeg(i)) bei Digraphen.
Bsp. Die von v0 = 1 aus erreichbaren Knoten,
mit kürzesten Wegen von v0 = 1 aus, und Nummern:
Bem. Werden Graphen/Digraphen G = (V, E) mittels Adjazenzlisten dargestellt, dann gilt:
1. Der Speicherplatzbedarf ist O(|V |+|E|).
1
1
4
1
1
2
2
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
34
1
3
1
2
3
2
6
1
2
1
7
FG KTuEA, TU Ilmenau
1
2
8
1
4
2
5
3
2
1
AuD – 07.4.2006
9
10
2
3
2
7→
4
6
5
3
6
8
7
35
Breitensuche in Digraphen – 2
Breitensuche in Digraphen – 3
Ansatz: Knoten werden entdeckt (numeriert und als ent”
deckt“ markiert) und später bearbeitet (die Menge der Nachfolger wird durchgegangen, um neue Knoten zu entdecken).
Die Reihenfolge der Bearbeitung wird über eine anfänglich
leere Queue Q organisiert.
Information an Knoten v (gespeichert im nodes-Array):
Nummer bfs num(v)
Level level(v) (Abstand von v0 nach v)
Vorgänger pred(v) (von v auf kürzestem Weg v0
v)
Globale Information: Zähler bfs count
Initialisierung: bfs count ← 0; alle bfs num(v) ← 0.
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
36
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure bfs(v0)
⊲ Breitensuche von v0 aus
bfs count ← bfs count+1
bfs num(v0) ← bfs count
level(v0) ← 0
pred(v0) ← v0
⊲ Weg der Länge 0
enqueue(Q, v)
⊲ erstes Element in Warteschlange
while Q 6= NIL do
v ← first(Q)
dequeue(Q)
⊲ nun bearbeite v
foreach w ∈ suc(v) (Adjazenzliste!) do
if bfs num(w) = 0 then
⊲ w wird entdeckt!
bfs count ← bfs count+1
bfs num(w) ← bfs count
level(w) ← level(v)+1
pred(w) ← v
⊲ w von v aus erreicht
enqueue(Q, w)
FG KTuEA, TU Ilmenau
Breitensuche in Digraphen – 4
4
1
1
Bsp.
1
7
2
7→
1
1
3
1
2
2
2
10
9
1
6
1
2
8
1
3
1
2
3
1
5
2
3
2
1
1
4
2
2
5
10
9
in Bearbeitung
3
4
2
6
1
4
2
1
7
1
1
3
2
3
in Queue
2
2
4
5
2
37
Breitensuche in Digraphen – 5
2
8
4
1
1
1
4
2
1
1
1
3
2
3
2
6
1
2
2
AuD – 07.4.2006
1
7
1
2
8
1
1
1
2
9
10
7→
1
3
1
2
8
1
4
2
1
7
1
1
2
3
2
6
in Queue
2
2
2
5
3
2
1
9
10
in Queue
in Bearbeitung
fertig
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
38
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
39
Breitensuche in Digraphen – 6
4
1
1
1
2
2
3
6
1
7
1
4
1
1
3
10
9
6
7
in Queue
in Bearbeitung
in Bearbeitung
1
1
2
2
2
1
4
1
7
2
1
3
7→
2
8
10
9
1
7
1
in Bearbeitung
fertig
AuD – 07.4.2006
40
1
2
3
2
1
1
10
9
1
in Bearbeitung
4
2
1
2
3
1
2
8
1
4
2
1
7
1
1
2
3
3
2
1
9
10
AuD – 07.4.2006
41
2) Knoten v wird von pred(v) aus entdeckt.
fertig
1
8
5
(Für Weg (v0, v1, . . . , vk ) mit v = vk zeigt man induktiv, daß
jedes vi auf dem Weg entdeckt wird.)
in Queue
2
2
2
Feststellungen: 1) Jeder von v0 aus erreichbare Knoten v wird
irgendwann entdeckt, erhält eine Nummer und Levelnummer.
3
2
8
2
1
1
4
Breitensuche in Digraphen – 9
5
2
2
7
1
4
2
3
1
1
FG KTuEA, TU Ilmenau
1
2
1
fertig
2
6
2
3
2
in Queue
4
7→
1
3
in Bearbeitung
1
1
2
2
6
Breitensuche in Digraphen – 8
6
1
in Queue
FG KTuEA, TU Ilmenau
1
10
9
1
4
5
2
2
1
1
1
3
2
3
6
3
fertig
4
7→
5
2
2
8
2
in Queue
fertig
1
1
1
4
2
1
1
1
3
2
3
2
1
1
2
2
2
8
2
Breitensuche in Digraphen – 7
5
2
2
1
1
4
2
3
2
1
2
3) Alle entdeckten Knoten mit den Kanten (pred(v), v), v 6= v0
bilden einen Baum:
1
5
3
1
2
1
9
10
2
Breitensuch-Baum
3
2
6
in Queue
4
. . . und so weiter.
fertig
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
5
3
in Bearbeitung
6
8
7
4) level(v) = Länge eines kürzesten Weges von v0 nach v.
42
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
43
Breitensuche in Digraphen – 10
Breitensuche in Digraphen – 11
Um einen solchen Weg zu finden, starte in v und verfolge
wiederholt die Kanten (pred(w), w).
5) Die Laufzeit eines Aufrufs bfs(v0) ist proportional zur
Anzahl der von v0 aus erreichbaren Knoten und Kanten.
6) Der Speicherplatzbedarf ist proportional zur Anzahl der von
v0 aus erreichbaren Knoten.
′
′
Bew. 5)+6) Sei V bzw. E die Menge der erreichten Knoten
P
bzw. durchlaufenen Kanten. Klar: |E ′| = v′∈V ′ outdeg(v ′)
Kosten für Einfügen und Entnehmen aus der Queue: O(1)
und O(outdeg(v)) für das Durchlaufen der Adjazenzliste.
Insgesamt: O(|V ′|+|E ′|), nur V ′-Knoten gelangen in Q. FG KTuEA, TU Ilmenau
AuD – 07.4.2006
44
Breitensuche in Digraphen – 12
4
1
1
2
2
Bsp.
1
3
2
6
1
4
2
2
1
2
1
3
BFS-Bäume mit BFS-Nummern und Levels:
1
3
2
4
6
0
8
8
7
9
10
1
AuD – 07.4.2006
AuD – 07.4.2006
45
Verläuft analog zu bfs.
Beachte: Bei der Bearbeitung von v wird der Knoten
pred(v), obwohl er in der Adjazenzliste von v vorkommt,
nie berücksichtigt (hat schon eine Nummer).
level(v) entspricht dabei dem Abstand von v zu v0.
2
Wenn man in allen noch nicht entdeckten Knoten eine Breitensuche startet (analog global-bfs(G)), so findet man alle
Zusammenhangskomponenten von G.
Bei bfs-Aufruf auf neuen Knoten zählt bfs count weiter!
FG KTuEA, TU Ilmenau
FG KTuEA, TU Ilmenau
Wenn man in v0 startet, werden alle Knoten in der Zusammenhangskomponente von v0 entdeckt.
10
6
5
3
5
4
2
Bem. bfs-Aufrufe verändern die bfs num-Werte. Durch bfsAufrufe auf den noch unerreichten Knoten werden insgesamt
alle Knoten in G erreicht!
9
7
1
⊲ v noch nicht erreicht!
⊲ Starte bfs von v aus
3. Breitensuche in (ungerichteten) Graphen
10
9
7:
for v ← 1 to n do
if bfs num(v) = 0 then
bfs(v)
5
2
8
5:
6:
Breitensuche in Digraphen – 13
Entstehende
1
7
1
1
3
2
2. Globale Breitensuche in G:
1: procedure global-bfs(G)
2:
bfs count ← 0
3:
for v ← 1 to n do
4:
bfs num(v) ← 0
46
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
47
Breitensuche in Digraphen – 14
1
1
2
2
3
1
3 2
Bsp.
1
6
2
1
7
3
1 3
2
2
4 2
2
2
1 8
1
9
11
5
1
1
1
1
1
2
12
10
3
2
1 14
1
13
1
7→
2
8
7
3
4
6
9
11
5
10
12
14
13
Kosten für global-bfs bei Graphen: O(|V |+|E|).
Speicherplatz für die Queue: O(|V |)
FG KTuEA, TU Ilmenau
AuD – 07.4.2006
48
Herunterladen