Kapitel 2: Elementare Graphalgorithmen und - fbi.h

Werbung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Gliederung der Vorlesung
1.  Grundbegriffe
2.  Elementare Graphalgorithmen und Anwendungen
3.  Kürzeste Wege
4.  Netzplantechnik
5.  Minimal spannende Bäume
6.  Traveling Salesman Problem
7.  Flüsse in Netzwerken und Anwendungen
8.  Bipartite Graphen
2/1, Folie 1
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Gliederung des Kapitels
a)  Breitensuche
b)  Tiefensuche
c)  Anwendungen der Tiefensuche
... Anmerkung
Wir diskutieren diese Suchstrategien für gerichtete und ungerichtete
Graphen !!!
2/1, Folie 2
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Anmerkung
• 
• 
die Idee bei der Breitensuche besteht darin, beginnend mit einem
Startknoten s, alle von s aus erreichbaren Knoten zu „erforschen“
die von s erreichbaren Knoten werden „schichtweise“ erforscht
• 
• 
• 
• 
2/1, Folie 3
zunächst s selbst
dann alle Knoten u, die von s aus erreichbar sind und zwar auf
einem Pfad der Länge 1
dann alle Knoten u, die von s aus erreichbar sind und zwar auf
einem Pfad der Länge 2
...
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Hilfsbegriff: Distanz eines Knotens
2/1, Folie 4
• 
• 
• 
es sei G = (V,E) ein (ungerichteter) Graph
es seien s und u Knoten in V mit (s,u) ∈ Rerr
es sei k ≥ 0
• 
d(s,u) = k, falls es eine Pfad P von s nach u der Länge k gibt und es
keinen Pfad P‘ von s nach u einer Länge kleiner als k gibt
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Anmerkungen
• 
• 
es sei G = (V,E) ein (ungerichteter) Graph
es sei s ein Knoten in V
• 
die Teilmenge Vi ⊆ V, die alle von s aus erreichbaren Knoten u mit
d(s,u) = i enthält, kann wie wie folgt induktiv definiert werden:
• 
• 
2/1, Folie 5
V0 = { s } und
Vi+1 = { u ∈ V \ (V0 ∪ ... ∪ Vi) | es gibt eine Kante {v,u} ∈ E mit v ∈ Vi }
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Zugehörige algorithmische Fragestellung
• 
gegeben:
• 
• 
• 
ein (ungerichteter) Graph G = (V,E)
ein Knoten s ∈ V
gesucht:
• 
für jeden Knoten u ∈ V, der von s aus erreichbar ist, den
Wert d(s,u)
... der Graph G habe genau n Knoten (/* der Einfachheit
halber sei V = { 1,...,n } */) und m Kanten
2/1, Folie 6
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Zugrunde liegende Datenstrukturen
• 
• 
• 
2/1, Folie 7
die zu G gehörende Adjazenzliste A[1..n]
ein Array D[1..n] (/* in dem sich die Distanz der einzelnen Knoten zum
Knoten s „gemerkt“ wird */)
eine Liste L (/* zur Steuerung der Verarbeitung */)
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Realisierung
• 
• 
• 
setze D[j] = +∞ für alle j = 1,...,n
setze D[s] = 0 und L = { s }
while L nicht leer ist do
entferne das erste Element v aus L
for all u ∈ A[v] do
if D[u] == +∞ then
setze D[u] = D[v] + 1 und füge u ans Ende von L ein
... es sollte klar sein, dass das Gewünschte geleistet wird
... es sollte klar sein, dass der Algorithmus nur O(n+m) viele
Rechenschritte benötigt (/* bei einem ungerichteten Graphen
wird jede Kante sogar nur einmal „angefasst“ */)
2/1, Folie 8
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Beispiel
2
1
3
5
4
7
6
... wir wollen diesen Graphen, beginnend beim Knoten 1, mit Hilfe der
Breitensuche „erforschen“
... ein Knoten wird blau gefärbt, wenn er „entdeckt“ wurde, und gelb
gefärbt, wenn er „vollständig verarbeitet“ wurde
2/1, Folie 9
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Beispiel
2
2/1, Folie 10
© 2013 Prof. Steffen Lange
-
1
3
5
4
7
6
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Beispiel
2
1
3
5
4
7
6
... „vollständig verarbeitet“: 1
2/1, Folie 11
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Beispiel
2
1
3
5
4
7
6
... „vollständig verarbeitet“: 1,2
2/1, Folie 12
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Beispiel
2
1
3
5
4
7
6
... „vollständig verarbeitet“: 1,2,3
2/1, Folie 13
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Beispiel
2
1
3
5
4
7
6
... „vollständig verarbeitet“: 1,2,3
... und so weiter
2/1, Folie 14
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Beispiel
2
1
3
5
4
7
6
... „vollständig verarbeitet“: 1,2,3,4,5,6,7
2/1, Folie 15
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Anmerkungen
• 
wir betrachten im Folgenden eine geringfügige Modifikation der
Breitensuche, wobei sich „gemerkt“ wird, welcher Knoten des
Graphen dafür verantwortlich ist, dass ein Knoten „entdeckt“ wird
... wenn der Knoten u dafür verantwortlich ist, dass der Knoten v
„entdeckt“ wurde, nennen wir u Vorgänger des Knotens v
... in einem Array P[1...n] werden sich die Vorgänger der einzelnen
Knoten gemerkt
2/1, Folie 16
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Realisierung
• 
• 
• 
setze D[j] = +∞ und P[j] = ⊥ für alle j = 1,...,n
setze D[s] = 0 und L = { s }
while L nicht leer ist do
entferne das erste Element v aus L
for all u ∈ A[v] do
if D[u] == +∞ then
setze D[u] = D[v] + 1, P[u] = v und füge u ans Ende
von L ein
... das Zeichen ⊥ steht für nicht definiert
2/1, Folie 17
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Beispiel
2
1
3
5
4
7
6
... nach Abschluss der Breitensuche entsteht folgendes Array P[1,...,7]:
2/1, Folie 18
1
2
3
4
5
6
7
⊥
1
1
1
3
3
6
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Hilfsbegriff: der durch die Breitensuche induzierte Vorgängerteilgraph
• 
• 
es sei G = (V,E) der gegebene gerichtete Graph
es sei der Knoten s der Startknoten
• 
der durch die Breitensuche induzierte Vorgängerteilgraph G‘ = (V‘,E‘) ist
wie folgt definiert:
• 
• 
2/1, Folie 19
V‘ = { v ∈ V | (s,v) ∈ Rerr }
E‘ = { (P[v],v) | v ∈ V‘ und v ≠ s }
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Beispiel
2
1
3
5
4
7
6
1
... der durch die Breitensuche
induzierte Vorgängerteilgraph:
4
3
1
5
6
7
2/1, Folie 20
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Beobachtung
• 
• 
es sei G = (V,E) der gegebene gerichtete Graph
es sei der Knoten s der Startknoten
Dann gilt: Der durch die Breitensuche induzierte Vorgängerteilgraph
ist ein Baum mit der Wurzel s.
2/1, Folie 21
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Breitensuche
!  Begriff: Baum
• 
es sei G = (V,E) ein gerichteter Graph
• 
G ist ein Baum, falls folgende Bedingungen erfüllt sind:
• 
• 
2/1, Folie 22
V enthält genau einen Knoten, der nicht Endknoten einer Kante
in E ist (/* dieser Knoten heißt Wurzel */)
alle anderen Knoten von V sind Endknoten genau einer Kante in E
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Herunterladen