algorithmen und datenstrukturen kapitel 8 0.2cm graphen...grundlagen breiten- und tiefensuche...
TRANSCRIPT
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Algorithmen und DatenstrukturenKapitel 8
Graphen
Frank [email protected]
2. Dezember 2015
Frank Heitmann [email protected] 1/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Einfuhrung
Graphen sind eine grundlegende Datenstruktur, die in vielenBereichen der Informatik (und auch in anderen Bereichen)Anwendung findet. Man kann ohne Einschrankung zwei Elementeeiner Mengen (den Knoten) in Beziehung setzen (durch eineKante).
Anmerkung
Erlaubt man verschiedene Kanten-’Typen’, so kann man sogar ver-schiedene Beziehungen ausdrucken.
Frank Heitmann [email protected] 2/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Definitionen
Definition
Ein Graph ist ein Tupel G = (V ,E ) bestehend aus einer Menge V(auch V (G )) von Knoten oder Ecken und einer Menge E (auchE (G )) von Kanten.Ist G ein ungerichteter Graph, so ist
E ⊆ {{v1, v2} | v1, v2 ∈ V , v1 6= v2},
ist G ein gerichteter Graph, so ist
E ⊆ V 2.
Ist |E | viel kleiner als |V |2, so nennt man den Graphen dunnbesetzt. Ist |E | nahe an |V |2, so spricht man von dicht besetztenGraphen.
Frank Heitmann [email protected] 3/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Gewichteter Graph
Definition
Bei einem gewichteten Graphen ist neben dem Graph G = (V ,E )(gerichtete oder ungerichtet) noch eine Gewichtsfunktionw : E → R+ gegeben, die jeder Kante e ∈ E ihre Kosten w(e)zuweist.
Anmerkung
Diese Definition ist in der Datenstruktur-Vorlesung nicht explizitauf den Folien gewesen, ist aber sehr wichtig. (Die meisten Graphenhaben Gewichte (oder Buchstaben o.a.) an den Kanten.)
Frank Heitmann [email protected] 4/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Definitionen
Definition
Sind je zwei Knoten von G mit einer Kante verbunden, so istG ein vollstandiger Graph. Bei n Knoten: Kn.
Eine Menge paarweise nicht benachbarter Knoten nennt manunabhangig.
Der Grad d(v) eines Knotens v ist die Anzahl mit v inzidenterKanten.
Die Menge der Nachbarn eines Knotens v bezeichnet man mitN(v) (hier gilt d(v) = |N(v)|).
δ(G ) ist der Minimalgrad von G , ∆(G ) der Maximalgrad.
Frank Heitmann [email protected] 5/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Definitionen
Definition
Ein Weg ist ein nicht leerer Graph P = (V ,E ) mitV = {x0, x1, . . . , xk}, E = {x0x1, x1x2, . . . , xk−1xk}, wobei diexi paarweise verschieden sind. x0 und xk sind die Enden vonP, sie sind durch P verbunden. Die Anzahl der Kanten einesWeges ist seine Lange.
Ist P wie oben ein Weg, so ist P + xkx0 ein Kreis (der Langek + 1).
Der Abstand zweier Knoten x und y voneinander wird mitd(x , y) bezeichnet und ist die geringste Lange einesx-y -Weges.
Frank Heitmann [email protected] 6/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Definitionen
Definition
Seien G = (V ,E ) und G ′ = (V ′,E ′) Graphen. Gilt V ′ ⊆ Vund E ′ ⊆ E , so nennt man G ′ einen Teilgraphen von G .
Ist G = (V ,E ) ein Graph und V ′ ⊆ V , so nennt man denGraphen G ′ = (V ′,E ′) mit E ′ = {{v1, v2} ∈ E | v1, v2 ∈ V ′}den von V ′ induzierten Graphen.
Frank Heitmann [email protected] 7/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen
Ein Graph G = (V ,E ) wird dargestellt indem man seine Knotenals Punkte und die Tupel oder Mengen aus E als (gerichtete)Kanten zwischen die Knoten einzeichnet.
Im Computer speichert man einen Graphen meist mittels einerAdjazenzmatrix oder einer Adjazenzliste. (Man kann die Mengen Vund E aber auch direkt speichern.)
Anmerkung
Bei Graphen schreibt man (und wir) oft O(V + E ) etc., wennO(|V |+ |E |) gemeint ist. Man beacht zudem, dass dies dieKomplexitat bzgl. der Kenngroßen V und E ausdruckt und nichtumbedingt die Große der Eingabe wiederspiegelt!
Frank Heitmann [email protected] 8/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Adjazenzmatrix
x
wv
y
vv
w
w
x
x
y
y
V = {v ,w , x , y}E = {{v ,w}, {v , x}, {v , y}, {w , x}, {x , y}}
Frank Heitmann [email protected] 9/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Adjazenzmatrix
0
x0
wv
y 00
vv
w
w
x
x
y
y
V = {v ,w , x , y}E = {{v ,w}, {v , x}, {v , y}, {w , x}, {x , y}}
Frank Heitmann [email protected] 10/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Adjazenzmatrix
0 1 1 1
x1 0
wv
y 1 01 0
vv
w
w
x
x
y
y
V = {v ,w , x , y}E = {{v ,w}, {v , x}, {v , y}, {w , x}, {x , y}}
Frank Heitmann [email protected] 11/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Adjazenzmatrix
0 1 1 1
x1 0 1 0
wv
y 1 1 0 11 0 1 0
vv
w
w
x
x
y
y
V = {v ,w , x , y}E = {{v ,w}, {v , x}, {v , y}, {w , x}, {x , y}}
Frank Heitmann [email protected] 12/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Adjazenzmatrix
0 1 1 1
x1 0 1 0
wv
y 1 1 0 11 0 1 0
vv
w
w
x
x
y
y
Bei einer Adjazenzmatrix hat man eine n × n-Matrix, bei der ander Stelle (i , j) genau dann eine 1 steht, wenn vi und vj verbundensind.
Der Speicherplatzbedarf ist in Θ(V 2) (unabhangig von derKantenzahl).
Frank Heitmann [email protected] 13/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Adjazenzlisten
x
wv
y
v
w
x
y
Frank Heitmann [email protected] 14/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Adjazenzlisten
x
wv
y
v
w
x
y
w x y
Frank Heitmann [email protected] 15/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Adjazenzlisten
x
wv
y
v
w
x
y
w x y
v x
Frank Heitmann [email protected] 16/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Adjazenzlisten
x
wv
y
v
w
x
y
w x y
x v
y v w
v x
Frank Heitmann [email protected] 17/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Adjazenzlisten
x
wv
y
v
w
x
y
w x y
x v
y v w
v x
Bei der Adjazenzlistendarstellung haben wir ein Array von |V |Listen, fur jeden Knoten eine. Die Adjazenzliste Adj [v ] zu einemKnoten v enthalt alle Knoten, die mit v adjazent sind.
Bei einem gerichteten Graphen ist die Summe aller Adjazenzlisten|E |, bei einem ungerichteten Graphen |2E |. DerSpeicherplatzbedarf ist folglich Θ(V + E ).
Frank Heitmann [email protected] 18/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Einfuhrung und DefinitionenDarstellung
Darstellung von Graphen - Zusammenfassung
Adjazenzmatrix: |V | × |V |-Matrix A = (aij) mit aij = 1 falls(i , j) ∈ E und 0 sonst. Große in Θ(V 2).
Adjazenzliste: Liste Adj [v ] fur jeden Knoten v ∈ V in der dieKnoten, die mit v adjazent sind gespeichert sind. Große inΘ(V + E ).
Bei einer Adjazenzmatrix kann man schnell herausfinden, obzwei Knoten benachbart sind oder nicht. Dafur ist eslangsamer alle Knoten zu bestimmen, die mit einem Knotenbenachbart sind. (Bei Adjazenzlisten genau andersherum.)
Beide Darstellungen sind ineinander transformierbar.
Beide Darstellungen sind leicht auf den Fall eines gewichtetenGraphen anpassbar.
Frank Heitmann [email protected] 19/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Die Struktur eines Graphen
Wir wollen nun etwas grundlegendes uber die Struktur einesgegebenen Graphen erfahren. Hierzu ist es zunachst praktischAlgorithmen zu haben, die den Graphen durchwandern, d.h. insystematischer Weise die Kanten entlangwandern und die Knotenbesuchen. Oft ist es auch nutzlich einen Spannbaum zu ermitteln.
Definition
Ein Spannbaum ist ein Teilgraph T eines Graphen G , wobei T einBaum ist und alle Knoten von G enthalt.
Frank Heitmann [email protected] 20/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breiten- und Tiefensuche
Die Breiten- und Tiefensuche in einem Graphen erreichen (imPrinzip) beide Ziele! Es wird zwar i.A. nicht der minimaleSpannbaum ermittelt, doch dazu spater mehr.
Breiten- und Tiefensuche sind oft ’Urtypen’ fur weitereGraphalgorithmen entweder
als wichtige Subroutine oder
als ’Ideengeber’
Frank Heitmann [email protected] 21/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Die Idee
Gegeben ein Graph G und ein Startknoten s ’entdeckt’ dieBreitensuche alle Knoten, die von s aus erreichbar sind. Zudemwird der Abstand (in Kanten) von s aus berechnet (tatsachlichwird sogar der kurzeste Abstand ermittelt).
Man kann auch zusatzlich einen ’Breitensuchbaum’ (mit Wurzel s)und damit die kurzesten Pfade von s zu den anderen Knotenermitteln.
Der Algorithmus entdeckt zunachst die Knoten mit Entfernung kund dann die mit Entfernung k + 1, daher der Name. Er geht erstin die Breite...
Frank Heitmann [email protected] 22/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Die Idee
Starte mit Knoten s in einer Queue Q.
Wiederhole solange Q nicht leer...
Nimm vordersten Knoten v aus Q.(Bearbeite diesen und Farbe diesen so, dass er nicht wiederbesucht wird.)Tue alle Nachbarn von v , die bisher nicht besucht wurden indie Queue.
Anmerkung
Durch die Queue wird sichergestellt, dass die Knoten ’in der Breite’besucht werden, d.h. zunachst werden die Knoten mit Entfernungk von s entdeckt und erst danach jene mit Entfernung k + 1.
Frank Heitmann [email protected] 23/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Zur Nachbereitung
Anmerkung (zur Nachbereitung)
Im nachfolgenden Beispiel ist fur einen Knoten v jeweils sein linkesKind der erste Knoten in v ’s Adjazenzliste, sein rechtes Kind derzweite Knoten in der Adjazenzliste. (Dies ist wichtig, um zuverstehen in welcher Reihenfolge die Knoten in der Queuegespeichert werden.)Fur das Beispiel ist es ferner unerheblich, ob die Kanten gerichtetoder ungerichtet sind. Bei ungerichteten Kanten ware auch stetsnoch der Vater in der Adjazenzliste eines Knotens. Dieser warejedoch bereits gefarbt und wurde nicht wieder in der Queuegespeichert werden.
Frank Heitmann [email protected] 24/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13 16
Q:
A:Frank Heitmann [email protected] 25/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
10
16
Q:
A:Frank Heitmann [email protected] 26/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13 16
Q:
A:Frank Heitmann [email protected] 27/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
6 14
16
Q:
A:Frank Heitmann [email protected] 28/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
6 14
16
10
Q:
A:Frank Heitmann [email protected] 29/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
14
16
10
Q:
A:Frank Heitmann [email protected] 30/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
14 3 8
16
10
Q:
A:Frank Heitmann [email protected] 31/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
14 3 8
16
10 6
Q:
A:Frank Heitmann [email protected] 32/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
3 8
16
10 6
Q:
A:Frank Heitmann [email protected] 33/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
3 8 12 15
16
10 6
Q:
A:Frank Heitmann [email protected] 34/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
3 8 12 15
16
10 6 14
Q:
A:Frank Heitmann [email protected] 35/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
8 12 15
16
10 6 14
Q:
A:Frank Heitmann [email protected] 36/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
8 12 15 2 5
16
10 6 14
Q:
A:Frank Heitmann [email protected] 37/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
8 12 15 2 5
16
10 6 14 3
Q:
A:Frank Heitmann [email protected] 38/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
12 15 2 5
16
10 6 14 3
Q:
A:Frank Heitmann [email protected] 39/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
12 15 2 5 7 9
16
10 6 14 3
Q:
A:Frank Heitmann [email protected] 40/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
12 15 2 5 7 9
16
10 6 14 3 8
Q:
A:Frank Heitmann [email protected] 41/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
2 5 7 9 13 16
16
10 6 14 3 8 12 15
Q:
A:Frank Heitmann [email protected] 42/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
5 7 9 13 16
16
10 6 14 3 8 12 15
Q:
A:Frank Heitmann [email protected] 43/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
5 7 9 13 16
16
10 6 14 3 8 12 15 2
Q:
A:Frank Heitmann [email protected] 44/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13 16
10 6 14 3 8 12 15 2 5 7 9 13 16
Q:
A:Frank Heitmann [email protected] 45/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Kernidee als Algorithmus
Algorithmus 1 BFS(G , s)
1: farbe[s] = pink2: Q = ∅, enqueue(Q, s)3: while Q 6= ∅ do4: u = dequeue(Q)5: for each v ∈ Adj [u] do6: if farbe[v ] == weiss then7: farbe[v ] = pink8: enqueue(Q, v)9: end if
10: end for11: farbe[u] = schwarz12: end while
Frank Heitmann [email protected] 46/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Zur Nachbereitung
Anmerkung (zur Nachbereitung)
Wir verzichten fur das nachste Beispiel auf die Angabe dereinzelnen Adjazenzlisten. Man kann sie aus dem Beispiel ablesen.Man beachte noch, dass je nachdem wie die Knoten in derAdjazenzliste angeordnet sind, der Algorithmus verschiedeneErgebnisse liefern kann. Waren die Knoten 7 und 9 bspw. in derAdjazenzliste der 8 in umgekehrter Reihenfolge, so wurde zuerstdie 9 abgearbeitet werden, bevor man bei 7 und 5 weiter im Baumhinabsteigt. (Bei der Tiefensuche spater ist dieser Unterschiednoch merklicher.)
Frank Heitmann [email protected] 47/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Graphen
3
102
5
6
87
9
A:
s
Q:Frank Heitmann [email protected] 48/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Graphen
3
102
5
6
87
9
6A:
s
2 3 8Q:Frank Heitmann [email protected] 49/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Graphen
3
102
5
6
87
9
6A:
s
3 8Q:Frank Heitmann [email protected] 50/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Graphen
3
102
5
6
87
9
6 2A:
s
3 8 10Q:Frank Heitmann [email protected] 51/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Graphen
3
102
5
6
87
9
6 2 3A:
s
8 10Q:Frank Heitmann [email protected] 52/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Graphen
3
102
5
6
87
9
6 2 3 8 10A:
s
7 9Q:Frank Heitmann [email protected] 53/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Graphen
3
102
5
6
87
9
6 2 3 8 10 7A:
s
9 5Q:Frank Heitmann [email protected] 54/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - im Graphen
3
102
5
6
87
9
6 2 3 8 10 7 9 5A:
s
Q:Frank Heitmann [email protected] 55/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - mehr Informationen
Reichern wir die Breitensuche etwas an, so konnen wir mehrInformationen gewinnen, z.B. den Abstand der einzelnen Knotenvon s und den Breitensuchbaum.
Der folgende Algorithmus ist wie im [Cormen].
Frank Heitmann [email protected] 56/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Initialisierung
Algorithmus 2 BFS(G , s) - Teil 1, Initphase
1: for each u ∈ V (G ) \ {s} do2: farbe[u] = weiss, d [u] =∞, π[u] = nil
3: end for4: farbe[s] = grau5: d [s] = 0, π[s] = nil
6: Q = ∅, enqueue(Q, s)
Anmerkung
Farben: weiss heißt ’noch nicht besucht’, grau ’besucht, aber nochunbesuchte Nachbarn’, schwarz ’besucht, alle Nachbarn entdeckt’.d [u] ist die Anzahl der Schritt von s zu u, π[u] der Vorganger vonu auf diesem Pfad.
Frank Heitmann [email protected] 57/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Hauptschleife
Algorithmus 3 BFS(G , s) - Teil 2, Hauptteil
1: while Q 6= ∅ do2: u = dequeue(Q)3: for each v ∈ Adj [u] do4: if farbe[v ] == weiss then5: farbe[v ] = grau6: d [v ] = d [u] + 1, π[v ] = u7: enqueue(Q, v)8: end if9: end for
10: farbe[u] = schwarz11: end while
Frank Heitmann [email protected] 58/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Zur Nachbereitung
Anmerkung (zur Nachbereitung)
Fur das nachfolgende Beispiel verzichten wir erneut auf die Angabeder Adjazenzlisten.Die Zahl in einem Knoten v ist nun nicht mehr der Schlussel o.a.,sondern der Wert von d [v ]. Die Farbe ’grun’ in den Bildernentspricht der Farbe ’schwarz’ im Quellcode (d.h. ein grunerKnoten ist vollstandig abgearbeitet und alle seine Kinder sind’entdeckt’ (also mindestens ’grau’)).Die dicken Kanten stellen die Baumkanten dar, die mittels der πFunktion gewonnen werden konnen, die jeden Knoten auf seinenVorganger im Baum abbildet.
Frank Heitmann [email protected] 59/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Beispiel
Q:
sa
b
c
fe
g
d
Frank Heitmann [email protected] 60/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Beispiel
0
sQ:
sa
b
c
fe
g
d
Frank Heitmann [email protected] 61/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Beispiel
01
1
a cQ:
sa
b
c
fe
g
d
Frank Heitmann [email protected] 62/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Beispiel
01
2
12
c b eQ:
sa
b
c
fe
g
d
Frank Heitmann [email protected] 63/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Beispiel
01
2
1
2
2
b e fQ:
sa
b
c
fe
g
d
Frank Heitmann [email protected] 64/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Beispiel
01
2
1
2
2
e fQ:
sa
b
c
fe
g
d
Frank Heitmann [email protected] 65/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Beispiel
01
2
31
2
2
f dQ:
sa
b
c
fe
g
d
Frank Heitmann [email protected] 66/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Beispiel
01
2
31
2
2
3
d gQ:
sa
b
c
fe
g
d
Frank Heitmann [email protected] 67/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Beispiel
01
2
31
2
2
3
gQ:
sa
b
c
fe
g
d
Frank Heitmann [email protected] 68/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Beispiel
01
2
31
2
2
3
Q:
sa
b
c
fe
g
d
Frank Heitmann [email protected] 69/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Analyse (Laufzeit)
Zu Anfang ist jeder Knoten weiß. Der Test in der Schleifestellt daher sicher, dass jeder Knoten nur einmal in die Queueeingefugt und aus ihr entnommen wird.Fur die Warteschlangenoperationen brauchen wir also O(V ).Die Adjazenzliste jedes Knotens wird nur einmal gepruft(wenn der Knoten aus der Queue entnommen wird).Die Summe aller Adjazenzlisten ist in Θ(E ), folglich benotigtdas Prufen der Adjazenzlisten O(E ).Initialisierung geht auch in O(V ).Insgesamt ergibt sich so: O(V + E ), was linear in der Großeder Adjazenzliste ist.
Anmerkung
Diese Laufzeitanalyse stimmt nur, wenn der Graph durchAdjazenzlisten gegeben ist!
Frank Heitmann [email protected] 70/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Analyse (Korrektheit)
Die Korrektheit kann man mittels einer Schleifeninvarianten zeigen,die besagt, dass die Queue aus der Menge der grauen Knotenbesteht.
Alternativ kann man mit mehreren Lemmata zeigen, dass dieermittelten Abstande tatsachlich die kurzesten sind und ein Baumentsteht. Man erhalt so (siehe [Cormen], dort ca. 3 Seiten):
Satz
Gegeben G = (V ,E ) (gerichtet oder ungerichtet) und s ∈ V . BFSermittelt jeden von s aus erreichbaren Knoten v. Bei Terminierunggilt d [v ] = δ(s, v) fur alle v . Zudem ist fur jeden von s auserreichbaren Knoten v (v 6= s) einer der kurzesten Pfade von snach v ein kurzester Pfad von s nach π[v ] gefolgt von der Kante(π[v ], v).
Frank Heitmann [email protected] 71/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breitensuche - Ergebnis
Zur Betonung:
Satz
In einem ungewichteten Graphen (bzw. einem Graph in dem jedeKante das Gewicht 1 hat) ermittelt der BFS-Algorithmus fur jedenKnoten v den kurzesten Abstand zu s sowie einen kurzesten Pfadvon s zu v (den man erhalt indem man den π[v ] ruckwarts folgt).Der Algorithmus lauft in O(V + E ), wenn der Graph alsAdjazenzliste gegeben ist.
Wichtige Anmerkung
Beweis umbedingt mal im [Cormen] nachlesen!
Frank Heitmann [email protected] 72/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Die Idee
Bei der Tiefensuche geht man einfach immer weiter nochungeprufte Kanten entlang, so lange dies moglich ist. Man folgtalso ’einem Pfad’ so lange es moglich ist. Erst wenn man einenKnoten erreicht von dem aus man nur bereits besuchte Knotenerreichen kann, geht man einen Schritt zuruck.
Bleiben unentdeckte Knoten ubrig wahlt man diese als neueStartknoten. So kann sich (bei einem unzusammenhangendenGraphen) ein Tiefensuchwald ergeben. (Die Breitensuche kann manauch so anpassen, aber typischerweise werden die Algorithmen sobenutzt.)
Frank Heitmann [email protected] 73/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Die Idee
Starte mit Knoten s in einem Stack S .
Wiederhole solange S nicht leer...
Nimm obersten Knoten v aus S .(Bearbeite diesen und Farbe diesen so, dass er nicht wiederbesucht wird.)Tue alle Nachbarn von v , die bisher nicht besucht wurden aufden Stack.
Anmerkung
Durch den Stack wird sichergestellt, dass die Knoten ’in der Tiefe’besucht werden, d.h. dass man zunachst von einem Knoten ausimmer weiter ’in die Tiefe’ geht, bevor man zuruck geht und eineandere ’Abzweigung’ nimmt.
Frank Heitmann [email protected] 74/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Zur Nachbereitung
Anmerkung (zur Nachbereitung)
Wie bei der Breitensuche ist im nachfolgenden Beispiel fur einenKnoten v jeweils sein linkes Kind der erste Knoten in v ’sAdjazenzliste, sein rechtes Kind der zweite Knoten in derAdjazenzliste. Mit einer Ausnahme: Beim Knoten 10 ist diesgenau umgekehrt. Darum ist der Stack im vierten Bild mit 6, 14gefullt.Fur das Beispiel ist es wieder unerheblich, ob die Kanten gerichtetoder ungerichtet sind. Bei ungerichteten Kanten ware auch stetsnoch der Vater in der Adjazenzliste eines Knotens. Dieser warejedoch bereits gefarbt und wurde nicht wieder im Stackgespeichert werden.
Frank Heitmann [email protected] 75/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13 16
S:
A:Frank Heitmann [email protected] 76/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
10
16
S:
A:Frank Heitmann [email protected] 77/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13 16
S:
A:Frank Heitmann [email protected] 78/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
6 14
16
S:
A:Frank Heitmann [email protected] 79/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
6 14
16
10
S:
A:Frank Heitmann [email protected] 80/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
14
16
10
S:
A:Frank Heitmann [email protected] 81/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
8 3 14
16
10
S:
A:Frank Heitmann [email protected] 82/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
8 3 14
16
10 6
S:
A:Frank Heitmann [email protected] 83/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
3 14
16
10 6
S:
A:Frank Heitmann [email protected] 84/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
9 7 3 14
16
10 6
S:
A:Frank Heitmann [email protected] 85/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
9 7 3 14
16
10 6 8
S:
A:Frank Heitmann [email protected] 86/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
7 3 14
16
10 6 8
S:
A:Frank Heitmann [email protected] 87/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
7 3 14
16
10 6 8 9
S:
A:Frank Heitmann [email protected] 88/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
3 14
16
10 6 8 9
S:
A:Frank Heitmann [email protected] 89/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
3 14
16
10 6 8 9 7
S:
A:Frank Heitmann [email protected] 90/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
14
16
10 6 8 9 7
S:
A:Frank Heitmann [email protected] 91/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
5 2 14
16
10 6 8 9 7
S:
A:Frank Heitmann [email protected] 92/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
5 2 14
16
10 6 8 9 7 3
S:
A:Frank Heitmann [email protected] 93/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
14
16
10 6 8 9 7 3 5 2
S:
A:Frank Heitmann [email protected] 94/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13 16
10 6 8 9 7 3 5 2
S:
A:Frank Heitmann [email protected] 95/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
15 12
16
10 6 8 9 7 3 5 2
S:
A:Frank Heitmann [email protected] 96/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13
15 12
16
10 6 8 9 7 3 5 2 14
S:
A:Frank Heitmann [email protected] 97/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Baum
3
10
2 5
6 14
8
7 9
1512
13 16
10 6 8 9 7 3 5 2 14 15 16 12 13
S:
A:Frank Heitmann [email protected] 98/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Idee
Algorithmus 4 DFS(G , s)
1: farbe[s] = pink2: S = ∅, push(S , s)3: while S 6= ∅ do4: u = pop(S)5: for each v ∈ Adj [u] do6: if farbe[v ] == weiss then7: farbe[v ] = pink8: push(S , v)9: end if
10: end for11: farbe[u] = schwarz12: end while
Frank Heitmann [email protected] 99/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefen- vs. Breitensuche
Beobachtung
Der einzige Unterschied zur Breitensuche ist die Benutzung einesStacks statt einer Queue!
Frank Heitmann [email protected] 100/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Zur Nachbereitung
Anmerkung (zur Nachbereitung)
Wie bei der Breitensuche verzichten wir auch im nachfolgendenBeispiel auf die Angabe der Adjazenzlisten.
Frank Heitmann [email protected] 101/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Graphen
3
102
5
6
87
9
A:
s
S:Frank Heitmann [email protected] 102/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Graphen
3
102
5
6
87
9
6A:
s
3 2S:Frank Heitmann [email protected] 103/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Graphen
3
102
5
6
87
9
6 8A:
s
9 7 3 2S:Frank Heitmann [email protected] 104/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Graphen
3
102
5
6
87
9
6 8 9A:
s
3 2S:Frank Heitmann [email protected] 105/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Graphen
3
102
5
6
87
9
6 8 9 7 5A:
s
3 2S:Frank Heitmann [email protected] 106/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Graphen
3
102
5
6
87
9
6 8 9 7 5A:
s
2S:Frank Heitmann [email protected] 107/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - im Graphen
3
102
5
6
87
9
6 8 9 7 5 3 10 2A:
s
S:Frank Heitmann [email protected] 108/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - mehr Informationen
Reichern wir nun die Tiefensuche etwas an, so konnen wir mehrInformationen gewinnen, was insb. spater nutzlich wird. (Derfolgende Algorithmus ist wieder wie im [Cormen].)
Anmerkung
Farben: weiss heißt ’noch nicht besucht’, grau ’besucht, abernoch unbesuchte Nachbarn’, schwarz ’besucht, alle Nachbarnverarbeitet’.
d [u] ist ’discovery’ Zeit, f [u] ist ’finished’ Zeit. (Beachte:Immer wenn d [u] oder f [u] gesetzt werden, wird vorher dieZeit erhoht!)
π[u] ist der Vorganger von u in diesem Tiefensuchbaum.
Frank Heitmann [email protected] 109/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefenensuche - Initialisierung
Algorithmus 5 DFS(G ) - Initphase und Aufruf
1: for each u ∈ V (G ) do2: farbe[u] = weiss, π[u] = nil
3: end for4: zeit = 05: for each u ∈ V (G ) do6: if farbe[u] == weiss then7: DFS VISIT(u)8: end if9: end for
Frank Heitmann [email protected] 110/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Hauptroutine
Algorithmus 6 DFS VISIT(u) - Teil 2, Hauptteil
1: farbe[u] = grau2: zeit = zeit + 13: d [u] = zeit4: for each v ∈ Adj [u] do5: if farbe[v ] == weiss then6: π[v ] = u7: DFS VISIT(v)8: end if9: end for
10: farbe[u] = schwarz11: zeit = zeit + 112: f [u] = zeit
Frank Heitmann [email protected] 111/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Zur Nachbereitung
Anmerkung (zur Nachbereitung)
Fur das nachfolgende Beispiel verzichten wir erneut auf die Angabeder Adjazenzlisten.Die Zahlen x/y in einem Knoten v sind die Werte d [v ](= x) undf [v ](= y). Die Farbe ’grun’ in den Bildern entspricht wieder derFarbe ’schwarz’ im Quellcode, dicke Kanten stellen wiederBaumkanten dar. Die gestrichelten Kanten, sind entdecke Kanten,die als Ruckwartskanten (B) oder Querkanten (C) klassifiziertworden. Ferner gibt es Vorwartskanten, die im Beispiel aber nichtauftreten. Eine Kante von s zu b ware bei ansonsten gleichenAblauf (d.h. wenn zuerst die Kante (s, a) gewahlt wird) eineVorwartskante.
Frank Heitmann [email protected] 112/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
sa
b
c
ed
Frank Heitmann [email protected] 113/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/sa
b
c
ed
Frank Heitmann [email protected] 114/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/2/sa
b
c
ed
Frank Heitmann [email protected] 115/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/2/
3/
sa
b
c
ed
Frank Heitmann [email protected] 116/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/2/
3/
sa
b
c
ed
B
Frank Heitmann [email protected] 117/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/2/
3/4
sa
b
c
ed
B
Frank Heitmann [email protected] 118/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/2/5
3/4
sa
b
c
ed
B
Frank Heitmann [email protected] 119/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/2/5
3/4
6/sa
b
c
ed
B
Frank Heitmann [email protected] 120/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/2/5
3/4
6/sa
b
c
ed
B C
Frank Heitmann [email protected] 121/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/2/5
3/4
6/7sa
b
c
ed
B C
Frank Heitmann [email protected] 122/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/82/5
3/4
6/7sa
b
c
ed
B C
Frank Heitmann [email protected] 123/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/82/5
3/4
6/7
9/
sa
b
c
ed
B C
Frank Heitmann [email protected] 124/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/82/5
3/4
10/
6/7
9/
sa
b
c
ed
B C
Frank Heitmann [email protected] 125/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/82/5
3/4
10/11
6/7
9/
sa
b
c
ed
B C
Frank Heitmann [email protected] 126/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/82/5
3/4
10/11
6/7
9/
sa
b
c
ed
B C
C
Frank Heitmann [email protected] 127/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Beispiel
1/82/5
3/4
10/11
6/7
9/12
sa
b
c
ed
B C
C
Frank Heitmann [email protected] 128/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Besondere Kanten
Man kann bei der Tiefensuche die Kanten klassifizieren jenachdem, welche Farbe der Knoten v bei einer Kanten (u, v) hat(u ist der Knoten der gerade bearbeitet wird, v ist in Adj [u]):
farbe[v ] = weiss: Baumkante.
farbe[v ] = grau: Ruckwartskante.
farbe[v ] = schwarz: Vorwarts- oder Querkante.
Vorwartskante, falls d [u] < d [v ].Querkante, falls d [u] > d [v ].
Anmerkung (zur Nachbereitung)
Im Beispiel eben ist dies bereits geschehen!
Frank Heitmann [email protected] 129/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Tiefensuche - Besondere Kanten
Dabei ist
Baumkante. Kanten, die zum Baum gehoren. v wurde bei derSondierung der Kante (u, v) entdeckt (erstmalig besucht).Ruckwartskante. Kante (u, v), die u mit einem Vorfahren vim Tiefensuchbaum verbindet.Vorwartskante. (Nicht-Baum-)Kante (u, v), die u mit einemNachfahre in v im Tiefensuchbaum verbindet.Querkanten. Die ubrigen Kanten. Im gleichenTiefensuchbaum, wenn der eine Knoten nicht Vorfahre desanderen ist oder zwischen zwei Knoten verschiedenerTiefensuchbaume (im Wald).
Anmerkung
Bei einem ungerichteten Graphen gibt es nur Baum- undRuckwartskanten.
Frank Heitmann [email protected] 130/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Analyse
Satz
Die Tiefensuche ist korrekt und ihre Laufzeit ist wieder inO(V + E ).
Frank Heitmann [email protected] 131/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
BreitensucheTiefensucheZusammenfassung
Breiten- und Tiefensuche - Zusammenfassung
Zusammenfassung
Breitensuche nutzt eine Queue, Tiefensuche einen Stack. (DieTiefensuche wie im [Cormen] kommt ohne Stack aus, arbeitetdafur aber rekursiv und mit Zeitstempeln.)
Beide Operationen laufen in Θ(V + E ), wenn der Graphmittels Adjazenzlisten gegeben ist.
Die Breitensuche hat (meist) nur einen Startknoten. Sie wirdoft verwendet, um kurzeste Abstande und denVorgangerteilgraphen zu ermitteln.
Die Tiefensuche ermittelt einen Tiefensuchwald (mehrereStartknoten). Sie wird oft als Unterroutine in anderenAlgorithmen verwendet.
Frank Heitmann [email protected] 132/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Problemstellung
Die Tiefensuche wird z.B. beim topologischen Sortieren benutzt...
Frank Heitmann [email protected] 133/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Problemstellung
... oder beim Ermitteln der Zusammenhangskomponenten einesGraphen.
Frank Heitmann [email protected] 134/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Problemstellung
Zu beidem gleich mehr...
Frank Heitmann [email protected] 135/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Darstellung von Graphen - Zusammenfassung
Adjazenzmatrix: |V | × |V |-Matrix A = (aij) mit aij = 1 falls(i , j) ∈ E und 0 sonst. Große in Θ(V 2).
Adjazenzliste: Liste Adj [v ] fur jeden Knoten v ∈ V in der dieKnoten, die mit v adjazent sind gespeichert sind. Große inΘ(V + E ).
Bei einer Adjazenzmatrix kann man schnell herausfinden, obzwei Knoten benachbart sind oder nicht. Dafur ist eslangsamer alle Knoten zu bestimmen, die mit einem Knotenbenachbart sind. (Bei Adjazenzlisten genau andersherum.)
Beide Darstellungen sind ineinander transformierbar.
Beide Darstellungen sind leicht auf den Fall eines gewichtetenGraphen anpassbar.
Frank Heitmann [email protected] 136/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Darstellung von Graphen - Adjazenzmatrix
0 1 1 1
x1 0 1 0
wv
y 1 1 0 11 0 1 0
vv
w
w
x
x
y
y
Bei einer Adjazenzmatrix hat man eine n × n-Matrix, bei der ander Stelle (i , j) genau dann eine 1 steht, wenn vi und vj verbundensind.
Der Speicherplatzbedarf ist in Θ(V 2) (unabhangig von derKantenzahl).
Frank Heitmann [email protected] 137/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Darstellung von Graphen - Adjazenzlisten
x
wv
y
v
w
x
y
w x y
x v
y v w
v x
Bei der Adjazenzlistendarstellung haben wir ein Array von |V |Listen, fur jeden Knoten eine. Die Adjazenzliste Adj [v ] zu einemKnoten v enthalt alle Knoten, die mit v adjazent sind.
Bei einem gerichteten Graphen ist die Summe aller Adjazenzlisten|E |, bei einem ungerichteten Graphen |2E |. DerSpeicherplatzbedarf ist folglich Θ(V + E ).
Frank Heitmann [email protected] 138/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Breitensuche - Die Idee
Gegeben ein Graph G und ein Startknoten s ’entdeckt’ dieBreitensuche alle Knoten, die von s aus erreichbar sind. Zudemwird der Abstand (in Kanten) von s aus berechnet (tatsachlichwird sogar der kurzeste Abstand ermittelt).
Man kann auch zusatzlich einen ’Breitensuchbaum’ (mit Wurzel s)und damit die kurzesten Pfade von s zu den anderen Knotenermitteln.
Der Algorithmus entdeckt zunachst die Knoten mit Entfernung kund dann die mit Entfernung k + 1, daher der Name. Er geht erstin die Breite...
Frank Heitmann [email protected] 139/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Breitensuche - Die Idee
Starte mit Knoten s in einer Queue Q.
Wiederhole solange Q nicht leer...
Nimm vordersten Knoten v aus Q.(Bearbeite diesen und Farbe diesen so, dass er nicht wiederbesucht wird.)Tue alle Nachbarn von v , die bisher nicht besucht wurden indie Queue.
Anmerkung
Durch die Queue wird sichergestellt, dass die Knoten ’in der Breite’besucht werden.
Frank Heitmann [email protected] 140/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Tiefensuche - Die Idee
Bei der Tiefensuche geht man einfach immer weiter nochungeprufte Kanten entlang, so lange dies moglich ist. Mein folgtalso ’einem Pfad’ so lange es moglich ist. Erst wenn man einenKonten erreicht von dem aus man nur bereits besuchte Knotenerreichen kann, geht man einen Schritt zuruck.
Bleiben unentdeckte Knoten ubrig wahlt man diese als neueStartknoten. So kann sich (bei einem unzusammenhangendenGraphen) ein Tiefensuchwald ergeben. (Die Breitensuche kann manauch so anpassen, aber typischerweise werden die Algorithmen sobenutzt.)
Frank Heitmann [email protected] 141/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Tiefensuche - Die Idee
Starte mit Knoten s in einem Stack S .
Wiederhole solange S nicht leer...
Nimm obersten Knoten v aus S .(Bearbeite diesen und Farbe diesen so, dass er nicht wiederbesucht wird.)Tue alle Nachbarn von v , die bisher nicht besucht wurden aufden Stack.
Anmerkung
Durch den Stack wird sichergestellt, dass die Knoten ’in der Tiefe’besucht werden.
Frank Heitmann [email protected] 142/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Breiten- und Tiefensuche - Erweiterungen
Die Breitensuche kann mit ’distance’-Stempeln angereichertwerden, um so die kurzesten Abstande von s zu ermitteln.
Die Tiefensuche kann mit ’discovery’ und ’finished’ Zeitangereichert werden. So konnen die Kanten klassifiziertwerden und man kann z.B. Kreise finden und noch andereDinge tun. Wie oben kann man mit dem Vorganger einenTiefensuchbaum konstruieren.
Frank Heitmann [email protected] 143/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Breiten- und Tiefensuche - Zusammenfassung
Zusammenfassung
Breitensuche nutzt eine Queue, Tiefensuche einen Stack. (DieTiefensuche wie im [Cormen] kommt ohne Stack aus, arbeitetdafur aber rekursiv und mit Zeitstempeln.)
Beide Operationen laufen in Θ(V + E ), wenn der Graphmittels Adjazenzlisten gegeben ist.
Die Breitensuche hat (meist) nur einen Startknoten. Sie wirdoft verwendet, um kurzeste Abstande und denVorgangerteilgraphen zu ermitteln.
Die Tiefensuche ermittelt einen Tiefensuchwald (mehrereStartknoten). Sie wird oft als Unterroutine in anderenAlgorithmen verwendet.
Frank Heitmann [email protected] 144/145
GrundlagenBreiten- und Tiefensuche
Anwendung der Tiefensuche
Topologisches SortierenZusammenhangskomponentenWiederholung
Auf einen Blick...
Graphen
Grundlagen, Adjazenzmatrix, AdjazenzlisteBreiten- & TiefensucheAusblick: Anwendung der TiefensucheAusblick: Minimale Spannbaume
Frank Heitmann [email protected] 145/145