Kapitel 2: Elementare Graphalgorithmen und Anwendungen

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/3, 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
... wir konzentrieren uns auf Anwendungen für gerichtete Graphen
... es geht um die folgenden Anwendungen:
• 
• 
• 
2/3, Folie 2
Test auf Kreisfreiheit
Bestimmen einer topologischen Sortierung
Bestimmen der Zusammenhangskomponenten
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Begriff: Kreisfreiheit
• 
es sei G = (V,E) ein gerichteter Graph
• 
G ist ein kreisfreier Graph, wenn G keinen Kreis enthält
... nicht kreisfrei
2/3, Folie 3
... kreisfrei
1
2
6
7
3
4
8
4
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Zugehörige algorithmische Fragestellung
• 
gegeben:
• 
• 
ein gerichteter Graph G = (V,E)
gesucht:
• 
eine Antwort auf die Frage, ob G kreisfrei ist
... der Graph G habe genau n Knoten (/* der Einfachheit
halber sei V = { 1,...,n } */) und m Kanten
2/3, Folie 4
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Algorithmische Idee
• 
• 
starte eine Tiefensuche im Graphen G
bei der Tiefensuche wird überprüft, ob folgendes Ereignis eintritt:
• 
• 
beim „Erkunden“ einer Kante stellt sich heraus, dass sie zu einem
Knoten führt, der bereits „entdeckt“ und noch nicht „vollständig
verarbeitet“ ist
falls dieses Ereignis wenigstens einmal eintritt, wird „G ist nicht kreisfrei“
ausgegeben; andernfalls, wird „G ist kreisfrei“ ausgegeben
... solche Kanten nennen wir Rückwärtskanten
2/3, Folie 5
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Illustration
(10/15)
(11/14)
(0/9)
(7/8)
6
7
1
3
8
4
2
5
(12/13)
(2/3)
(1/6)
(4/5)
1
... der durch die Tiefensuche
induzierte Vorgängergraph mit
allen Rückwärtskanten
2
4
2/3, Folie 6
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
6
3
5
Graphen und Optimierung
7
8
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Realisierung
• 
• 
• 
• 
2/3, Folie 7
setze C[j] = 0 und P[j] = 0 für alle j = 1,...,n
setze time = 0 und flag = false
for j = 1,...,n do
if F[j] == 0 then
rufe visit‘(j) auf
if flag = true then gib „G ist nicht kreisfrei“ aus
else gib „G ist kreisfrei“ aus
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Realisierung
(/* Prozedur visit‘(j) */)
• 
setze C[j] = 1, D[j] = time und time = time + 1
• 
for all v ∈ A[j] do
if C[v] == 1 then
setze flag = true
if C[v] == 0 then
setze P[v] = j und rufe visit‘(v) auf
setze C[j] = 2, F[j] = time und time = time + 1
... offenbar benötigt eine Tiefensuche mit dieser Variante der
Prozedur visit(.) auch nur O(n+m) viele Rechenschritte
2/3, Folie 8
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Anmerkungen zur Korrektheit (/* der offensichtliche Teil */)
... wenn die Ausgabe „G ist nicht kreisfrei“ erzeugt wird, so gibt es
einen Kreis in G
• 
• 
• 
man kann sich leicht überlegen, dass zum Zeitpunkt D[v] alle Knoten, die
„entdeckt“ und noch nicht „vollständig verarbeitet“ sind, einen Pfad P in G
vom Knoten u zum Knoten v bilden (/* gemäß der Reihenfolge der aktiven
Aufrufe der Prozedur visit(.) */)
• 
da der Knoten v‘ zu P gehört, gibt es in G auch einen Pfad P‘ vom
Knoten v‘ zum Knoten v
wenn man P‘ um die Kante (v,v‘) erweitert, erhält man einen Kreis in G
• 
2/3, Folie 9
es seien (v,v‘) die Kante, die dazu führt, dass „flag = true“ gesetzt wird,
und u die Wurzel des Tiefensuchbaums mit den Knoten v und v‘
es sei D[v] der Zeitpunkt, zu dem v „entdeckt“ wird
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Anmerkungen zur Korrektheit (/* der nicht ganz so offensichtliche Teil */)
... wenn es einen Kreis in G gibt, so wird die Ausgabe „G ist nicht
kreisfrei“ erzeugt
• 
es seien P = (v0,v1,...,vk) ein Kreis im Graphen G und vi der Knoten im
Pfad P, der zuerst „entdeckt“ wurde
• 
offenbar ist der Pfad P‘ = (vi,vi+1,...,vk,v0,v1,...,vi-1,vi) auch ein Kreis in G
und zum Zeitpunkt D[vi] sind alle anderen Knoten in P‘ noch „unentdeckt“
• 
also gibt es im Tiefensuchbaum mit dem Knoten vi einen Pfad von vi zum
Knoten vi-1 (/* siehe Beobachtung 3 im Foliensatz 2.2 */)
• 
nachdem vi-1 „entdeckt“ wurde, wird irgendwann die Kante (vi-1,vi)
angefasst
da zu diesem Zeitpunkt der Knoten vi immer noch nicht „vollständig
verarbeitet“ ist, wird „flag = true“ gesetzt
• 
2/3, Folie 10
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Topologisches Sortieren
• 
es sei G = (V,E) ein gerichteter Graph
• 
das Ziel besteht darin, alle Knoten des Graphen „linear“ anzuordnen,
d.h. es soll gelten:
• 
1
wenn es in G eine Kante (u,v) gibt, so liegt der Knoten u links
vom Knoten v in der betrachteten Anordnung der Knoten von G
2
3
2
4
2/3, Folie 11
5
© 2013 Prof. Steffen Lange
3
6
-
HDa/FbI
-
Graphen und Optimierung
6
5
1
4
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Zugrunde liegende Motivation
• 
es sei G = (V,E) ein gerichteter Graph
• 
im Graphen G wird Wissen über ein Produktionsprozess abgebildet
• 
• 
jeder Knoten steht für ein Produkt
wenn ein Produkt u benötigt wird, um ein Produkt v herzustellen,
so gibt es in G eine Kante (u,v)
... eine „lineare“ Anordnung der Knoten in G beschreibt, in welcher
Reihenfolge die Produkte produziert werden können
2
2/3, Folie 12
© 2013 Prof. Steffen Lange
3
-
HDa/FbI
6
5
-
1
4
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Begriff: Topologische Sortierung
• 
• 
es sei G = (V,E) ein gerichteter Graph mit n Knoten
es sei f(.) eine Funktion, die die Menge V auf die Menge { 1,...,n }
abbildet
• 
f(.) ist eine topologische Sortierung von G, falls gilt:
a) 
b) 
1
zu jedem i = 1,...,n gibt es ein u ∈ V mit f(u) = i
für alle Knoten u,v ∈ V gilt: wenn (u,v) ∈ E gilt, so ist f(u) < f(v)
2
3
2
4
5
3
6
5
1
6
... f(2) = 1, f(3) = 2, f(6) = 3, f(5) = 4,f(1) = 5, f(4) = 6
2/3, Folie 13
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
4
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Ein grundlegender Zusammenhang
• 
es sei G = (V,E) ein gerichteter Graph
Dann sind die folgenden Aussagen äquivalent:
1) 
2) 
G ist kreisfrei.
Es gibt eine topologische Sortierung von G.
... klar dürfte sein, dass gilt: „wenn G nicht kreisfrei ist, so gibt
es keine topologische Sortierung von G“
... also gilt: „wenn es eine topologische Sortierung von G gibt,
so ist G kreisfrei“
... es genügt zu zeigen, dass gilt: „wenn G kreisfrei ist, so gibt
es eine topologische Sortierung von G“
2/3, Folie 14
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Abgeleitete algorithmische Fragestellung
• 
gegeben:
• 
• 
ein gerichteter kreisfreier Graph G = (V,E)
gesucht:
• 
eine topologische Sortierung von G
... der Graph G habe genau n Knoten (/* der Einfachheit
halber sei V = { 1,...,n } */) und m Kanten
2/3, Folie 15
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Realisierung
• 
• 
setze i = n
starte eine Tiefensuche für G, bei der sukzessive die Werte F[u] für jeden
Knoten u berechnet werden
• 
sobald für einen Knoten u der Wert C[u] = 2 gesetzt wird (/* d.h. u
ist „vollständig verarbeitet“ und der Wert F[u] wird festgelegt */),
setze f(u) = i und i = i - 1
... offenbar gilt für alle Knoten u,v der folgende Zusammenhang (/* den
wir beim Beweis der Korrektheit ausnutzen */):
• 
„wenn F[u] > F[v] ist, so gilt f(u) < f(v)“
... es sollte klar sein, dass dieser Algorithmus auch nur O(n+m) viele
Rechenschritte benötigt
2/3, Folie 16
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Kapitel 2: Elementare Graphalgorithmen und Anwendungen
Anwendungen der Tiefensuche
!  Anmerkung zur Korrektheit
• 
es sei (u,v) eine Kante in G
• 
es genügt zu zeigen, dass F[u] > F[v] gilt (/* damit gilt auch - wie gefordert f(u) < f(v) */)
• 
zum Zeitpunkt D[u] kann nur C[v] = 0, C[v] = 1 oder C[v] = 2 gelten
• 
falls C[v] = 1 gilt, kann G nicht kreisfrei sein (/* der Fall ist nicht möglich */)
• 
falls C[v] = 0 gilt, so gilt wie gewünscht F[u] > F[v] (/* siehe Beobachtung 3
im Foliensatz 2.2 */)
• 
falls C[v] = 2 gilt, so muss F[v] < D[u] gelten
• 
2/3, Folie 17
also muss wegen D[u] < F[u] auch wie gewünscht F[u] > F[v] gelten
© 2013 Prof. Steffen Lange
-
HDa/FbI
-
Graphen und Optimierung
Herunterladen