Handout Version (1 Folie pro Seite)

Werbung
Wiederholung
Anwendung der Tiefensuche
Algorithmen und Datenstrukturen
Kapitel 8 (Teil 2)
Graphen
Anwendung der Tiefensuche
Frank Heitmann
[email protected]
2. Dezember 2015
Frank Heitmann [email protected]
1/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Graphen - Definitionen
Definition
Graph, Knoten, Kante, ungerichteter Graph, gerichteter Graph,
gewichteter Graph, dünn/dicht besetzt, vollständig, unabhängig,
Grad, Nachbarn, Minimalgrad, Maximalgrad, Weg, Kreis, Länge
(eines Weges/Kreises), Abstand, Teilgraph, induzierter
(Teil-)graph, K n , Baum, ...
Adjazenzmatrix, Adjazenzliste
Breitensuche, Tiefensuche
Frank Heitmann [email protected]
2/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
a
d
s
c
e
Frank Heitmann [email protected]
3/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
a
1/
d
s
c
e
Frank Heitmann [email protected]
4/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
a
2/
d
1/
s
c
e
Frank Heitmann [email protected]
5/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/
a
2/
d
1/
s
c
e
Frank Heitmann [email protected]
6/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/
B
a
2/
d
1/
s
c
e
Frank Heitmann [email protected]
7/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
B
a
2/
d
1/
s
c
e
Frank Heitmann [email protected]
8/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
B
a
2/5
d
1/
s
c
e
Frank Heitmann [email protected]
9/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
B
a
2/5
d
1/
s
6/
c
e
Frank Heitmann [email protected]
10/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
2/5
d
C
B
a
1/
s
6/
c
e
Frank Heitmann [email protected]
11/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
2/5
d
C
B
a
1/
s
6/7
c
e
Frank Heitmann [email protected]
12/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
2/5
d
C
B
a
1/8
s
6/7
c
e
Frank Heitmann [email protected]
13/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
2/5
d
C
B
a
1/8
s
6/7
c
e
9/
Frank Heitmann [email protected]
14/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
2/5
d
10/
C
B
a
1/8
s
6/7
c
e
9/
Frank Heitmann [email protected]
15/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
2/5
d
10/11
C
B
a
1/8
s
6/7
c
e
9/
Frank Heitmann [email protected]
16/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
C
B
a
2/5
1/8
s
6/7
c
C
d
10/11
e
9/
Frank Heitmann [email protected]
17/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Beispiel
b
3/4
C
B
a
2/5
1/8
s
6/7
c
C
d
10/11
e
9/12
Frank Heitmann [email protected]
18/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Besondere Kanten
Man kann bei der Tiefensuche die Kanten klassifizieren je
nachdem, 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: Rückwärtskante.
farbe[v ] = schwarz: Vorwärts- oder Querkante.
Vorwärtskante, falls d[u] < d[v ].
Querkante, falls d[u] > d[v ].
Frank Heitmann [email protected]
19/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Besondere Kanten
Dabei ist
Baumkante. Kanten, die zum Baum gehören. v wurde bei der
Sondierung der Kante (u, v ) entdeckt (erstmalig besucht).
Rückwärtskante. Kante (u, v ), die u mit einem Vorfahren v
im Tiefensuchbaum verbindet.
Vorwärtskante. (Nicht-Baum-)Kante (u, v ), die u mit einem
Nachfahre in v im Tiefensuchbaum verbindet.
Querkanten. Die übrigen Kanten. Im gleichen
Tiefensuchbaum, wenn der eine Knoten nicht Vorfahre des
anderen ist oder zwischen zwei Knoten verschiedener
Tiefensuchbäume (im Wald).
Anmerkung
Bei einem ungerichteten Graphen gibt es nur Baum- und
Rückwärtskanten.
Frank Heitmann [email protected]
20/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Wichtige Eigenschaften
Es folgen einige wichtige - und nützliche - Eigenschaften der
Tiefensuche...
(Beweise kann man im [Cormen] nachlesen. Nur ca. eine Seite)
Frank Heitmann [email protected]
21/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Klammerungstheorem (1/2)
b
3/4
C
B
a
2/5
1/8
s
6/7
c
C
d
10/11
e
9/12
Satz
Bei der Tiefensuche erfüllt jedes Paar u, v von Knoten genau eine
der folgenden Bedingungen:
1. Die Intervalle [d[u], f [u]] und [d[v ], f [v ]] sind paarweise
disjunkt und keiner der Knoten u und v ist im Tiefensuchwald
ein Nachfahre des anderen.
Frank Heitmann [email protected]
22/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Klammerungstheorem (2/2)
b
3/4
C
B
a
2/5
1/8
s
6/7
c
C
d
10/11
e
9/12
Satz
Bei der Tiefensuche erfüllt jedes Paar u, v von Knoten genau eine
der folgenden Bedingungen:
2. Das Intervall [d[u], f [u]] ist vollständig im Intervall [d[v ], f [v ]]
enthalten und u ist im Tiefensuchwald ein Nachfahre von v .
3. Wie 2. nur mit u und v vertauscht.
Frank Heitmann [email protected]
23/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Intervalle der Nachfahren
b
3/4
C
B
a
2/5
1/8
s
6/7
c
C
d
10/11
e
9/12
Satz
Im Tiefensuchwald von G ist v genau dann ein echter Nachfahre
von u, wenn d[u] < d[v ] < f [v ] < f [u] gilt.
Frank Heitmann [email protected]
24/70
Wiederholung
Anwendung der Tiefensuche
Grundlagen
Tiefensuche
Tiefensuche - Theorem der weißen Pfade
b
a
2/
d
1/
s
c
e
Satz
Im Tiefensuchwald von G ist v genau dann ein Nachfahre von u,
wenn v zur Zeit d[u] (u wird entdeckt) von u aus entlang eines nur
aus weißen Knoten bestehenden Pfades erreichbar ist.
Frank Heitmann [email protected]
25/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Problemstellung
Definition (Topologisches Sortieren)
Eingabe: Gegeben ein gerichteter azyklischer Graph G = (V , E ).
Gesucht: Eine topologischer Sortierung, d.h. eine lineare
Anordnung der Knoten mit der Eigenschaft, dass u in der
Anordnung vor v liegt, falls es in G eine Kante (u, v ) gibt.
Anmerkung
Dieses Problem tritt häufig bei der Modellierung von Ereignissen
auf, die mit einer Priorität (bzw. Abhängigkeiten) versehen sind (und
entsprechend bearbeitet werden sollen).
Frank Heitmann [email protected]
26/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Ein Beispiel
b
a
d
s
c
e
Frank Heitmann [email protected]
27/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Ein Beispiel
b
a
s
d
s
c
e
e
d
Frank Heitmann [email protected]
a
c
b
28/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
TopoSort - Algorithmus und Idee
Algorithmus 1 TopoSort(G )
1: Berechne die Endzeiten f [v ] für alle v ∈ V durch Aufruf von
DFS(G ).
2: Füge jeden abgearbeiteten Knoten an den Kopf einer verketteten
Liste ein.
3: Liefere die verkettete Liste zurück.
Anmerkung
Die Kernidee ist es die Knoten in umgekehrter Reihenfolge ihrer
Abarbeitungszeiten auszugeben (d.h. der Knoten, der zuletzt
abgearbeitet wurde, wird zuerst ausgegeben usw.).
Frank Heitmann [email protected]
29/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
TopoSort - Beispiel
b
a
d
s
c
e
Frank Heitmann [email protected]
30/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
TopoSort - Beispiel
b
3/4
C
a
2/5
d
10/11
1/8
C
s
6/7
c
e
9/12
e, d, s, c, a, b
Frank Heitmann [email protected]
31/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
TopoSort - Beispiel
b
4/5
C
a
3/6
d
9/10
C
C
s
C
7/8
c
e
1/2
11/12
C
e, s, c, a, b, d
Frank Heitmann [email protected]
32/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Zur Nachbereitung: Beweise
Zur Nachbereitung
Gleich kommt ein Beweis, den wir in der Vorlesung zum Anlass genommen haben, um Widerspruchsbeweise zu wiederholen. Wir haben dabei ganz generell über Widerspruchsbeweise geredet. Bei den
Erklärungen war aber die Kontraposition recht zentral, was sich dann
ein bisschen unglücklich vermischte. Hier daher noch ein paar Folien,
um das exakt zu behandeln.
Frank Heitmann [email protected]
33/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Zur Nachbereitung: Beweise
Zur Nachbereitung
Will man eine Aussage X beweisen, so nimmt man in einem Widerspruchsbeweis (auch: indirekter Beweis) das Gegenteil von X an
(also ¬X ) und zeigt, dass dies zu einem Widerspruch führt (d.h. zu
einer falschen Aussage, die nicht sein kann wie z.B. 0 = 1 oder “der
Kreis C aus 4 Knoten besteht aus 5 Knoten”).
Da ¬X dann nicht sein kann (da daraus Unsinn folgt), darf man dann
schlussfolgern, dass X gelten muss. (Wichtig hierfür ist noch, dass
die Aussage X tatsächlich wahr oder falsch sein muss. Mit anderen
mathematischen Formalismen haben wir es hier aber i.A. nicht zu
tun.)
Frank Heitmann [email protected]
34/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Zur Nachbereitung: Beweise
Zur Nachbereitung
Will man eine Aussage X = A ⇒ B beweisen, also eine “Wenn A,
dann B”-Aussage, dann nimmt man im direkten Beweis die Gültigkeit von A an und zeigt, dass (unter dieser Annahme) B gilt. Dies
zeigt dann A ⇒ B.
Man kann aber auch die Kontraposition von X = A ⇒ B zeigen. Dies ist die Aussage ¬B ⇒ ¬A, d.h. man zeigt, dass aus der
Annahme ¬B die Aussage ¬A folgt.
Dass dies auch X zeigt, kann man sich wie folgt klarmachen: Gilt
¬B ⇒ ¬A, dann kann aus A nun nicht ¬B folgen, denn aus ¬B
folgt ja ¬A und damit hätten wir dann gezeigt, dass ¬A aus A folgt,
was ein Widerspruch ist. Aus A muss also B folgen, d.h. A ⇒ B
muss gelten. (Eine andere Möglichkeit sich dies klarzumachen ist, zu
bemerken, dass A ⇒ B und ¬B ⇒ ¬A äquivalente aussagenlogische
Formeln sind.)
Frank Heitmann [email protected]
35/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Zur Nachbereitung: Beweise
Zur Nachbereitung
Zeigt man nun X = A ⇒ B per Widerspruchsbeweis, dann geht
man wegen ¬X ≡ ¬(A ⇒ B) ≡ ¬(¬A ∨ B) ≡ A ∧ ¬B von A ∧ ¬B
aus und führt dies zu einem Widerspruch.
Im gleich folgenden Beispiel kommt man (um A ⇒ B zu zeigen)
von ¬B zu ¬A (und wäre damit schon fertig, wenn es einem einfach
um die Kontraposition geht). Nun steht in den Folien aber Widerspruchsbeweis (was also eigentlich gar nicht nötig wäre). Man hat
damit aber auch einen Widerspruchsbeweis geführt, denn bei diesem
wäre man ja von A ∧ ¬B ausgegangen. Mit dem ¬B kommt man
nun zu ¬A und dann hat man mit dem A von dem man ja auch
ausging nun aber einen Widerspruch.
Frank Heitmann [email protected]
36/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Zur Nachbereitung: Beweise
Zur Nachbereitung
Das zuletzt beschriebene Vorgehen ist dann nützlich, wenn man im Beweis
die Aussage A an einer Stelle benötigt (und sei es nur zur Illustration). Im
nachfolgenden Beweis wird sie aber gar nicht benutzt und daher wäre es
besser dort statt Widerspruchsbeweis einfach zu schreiben “wir zeigen die
Kontraposition”.
Zur Nachbereitung
Noch ein Exkurs: Will man C ⇒ D zeigen, so hatten wir gesagt man
nimmt C an und versucht zu D zu kommen. Nimmt man nun C an, so
kann man gleich als nächstes noch ¬D annehmen, gelangt man damit zu
einem Widerspruch, so weiß man wie ganz oben beim Widerspruchsbeweis
erwähnt, dass ¬D nicht gelten darf und also D gelten muss und schon
ist man von C zu D gekommen. Auch hier ist es also möglich weitere
Annahmen einzufügen und so mit mehr Dingen arbeiten zu können. (Man
kann sich so klar machen, dass die beiden eben vorgestellten Vorgehen im
Grunde identisch sind.)
Frank Heitmann [email protected]
37/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
TopoSort - Analyse (Korrektheit)
Satz
Ein gerichteter Graph G ist genau dann azyklisch, wenn eine
Tiefensuche auf G keine Rückwärtskanten liefert.
Beweis.
Richtung von links nach rechts durch Widerspruchsbeweis:
Angenommen die Tiefensuche liefert eine Rückwärtskante (u, v ),
dann ist v ein Vorfahre von u im Tiefensuchbaum(/wald), d.h. es
gibt in G einen Pfad von v nach u und dann mittels der Kante
(u, v ) einen Kreis. (Widerspruch!)
Frank Heitmann [email protected]
38/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
TopoSort - Analyse (Korrektheit)
Satz
Ein gerichteter Graph G ist genau dann azyklisch, wenn eine
Tiefensuche auf G keine Rückwärtskanten liefert.
Beweis.
Richtung von rechts nach links durch Widerspruchsbeweis:
Angenommen der Graph enthält einen gerichteten Kreis C . Sei v
der erste Knoten, der auf C entdeckt wird und sei (u, v ) die
vorherige Kante auf C . Da die Knoten auf C einen weißen Pfad
von v nach u bilden, wird wegen des Theorems der weißen Pfade
u ein Nachfolger von v im Tiefensuchwald. Die Kante (u, v ) wird
dann eine Rückwärtskante. (Widerspruch!)
Frank Heitmann [email protected]
39/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
TopoSort - Analyse (Korrektheit)
Satz
TopoSort(G ) erzeugt für einen gerichteten azyklischen Graphen G
eine topologische Sortierung.
Beweis.
Es genügt f [v ] < f [u] zu zeigen, wenn es in G eine Kante (u, v )
gibt. Sei (u, v ) also eine von DFS(G ) sondierte Kante. v kann nicht
grau sein, da dies sonst eine Rückwärtskante wäre (im Widerspruch
zum vorherigen Satz). v muss also weiß oder schwarz sein. Ist v
schwarz, so ist er bereits abgearbeitet und es gilt f [v ] < f [u]. Ist v
weiß, so wird er ein echter Nachfahre von u und es gilt (Intervalle
der Nachfahren) d[u] < d[v ] < f [v ] < f [u].
Frank Heitmann [email protected]
40/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
TopoSort - Analyse (Laufzeit)
Die Kernidee von TopoSort:
Bestimme die Abarbeitungszeit f [v ] für jeden Knoten v durch
Tiefensuche.
Speichere jeden abgearbeiteten Knoten am Kopf einer Liste.
Gebe die Knoten nach fallenden Werten von f [v ] aus,
beginnnend mit dem größten Wert (d.h. gib obige Liste aus).
Satz
TopoSort(G ) ist korrekt und arbeitet in Θ(V + E ).
Frank Heitmann [email protected]
41/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Problemstellung
Definition (Bestimmung starker Zusammenhangskomponenten)
Eingabe: Gegeben ein gerichteter Graph G = (V , E ).
Gesucht: Die starken Zusammenhangskomponenten (SCCs) des
Graphen, d.h. maximale Menge C ⊆ V derart, dass für jedes Paar
u, v ∈ C sowohl u ⇒ v als auch v ⇒ u gilt (es gibt einen Pfad von
u nach v und andersherum).
Anmerkung
Dieses Problem tritt oft bei gerichteten Graphen auf. Zunächst wird
der Graph in seine starken Zusammenhangskomponenten zerlegt und
dann werden diese separat betrachtet. (Oft werden die Lösungen anschließend noch entsprechend der Verbindungen zwischen den einzelnen Komponenten zusammengefügt.)
Frank Heitmann [email protected]
42/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Ein Beispiel
b
a
d
s
e
Frank Heitmann [email protected]
c
f
43/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Ein Beispiel
b
a
d
s
e
Frank Heitmann [email protected]
c
f
44/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Ein Beispiel
b
a
d
s
e
Frank Heitmann [email protected]
c
f
45/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Der Komponentengraph
Oft ist auch der Komponentengraph gesucht...
Definition
Sei G ein gerichteter Graph mit Zusammenhangskomponenten
C1 , . . . , Ck . Der Komponentengraph G scc = (V scc , E scc ) ist
definiert durch V scc = {v1 , . . . , vk } (jeder Knoten vi repräsentiert
dabei eine Zusammenhangskomponente Ci ) und (vi , vj ) ist genau
dann eine Kante in E scc , wenn es in G einen Knoten x ∈ Ci , einen
Knoten y ∈ Cj und eine Kante (x, y ) gibt.
Anmerkung
Der Komponentengraph lässt sich aus den SCCs ermitteln.
Frank Heitmann [email protected]
46/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Der Komponentengraph - Beispiel
b
a
d
s
e
Frank Heitmann [email protected]
c
f
47/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Der Komponentengraph - Beispiel
sabc
de
Frank Heitmann [email protected]
f
48/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Der Komponentengraph - Beispiel
sabc
de
Frank Heitmann [email protected]
f
49/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Algorithmus und Idee
Algorithmus 2 SCC(G )
1: Aufruf von DFS(G ) zur Berechnung der Endzeiten f [v ].
2: Berechne G T (transponierter Graph).
3: Aufruf von DFS(G T ), betrachte in der Hauptschleife von DFS
die Knoten jedoch in der Reihenfolge fallender f [v ] (in Zeile 1
berechnet).
4: Die Knoten jedes in Zeile 3 berechneten Baumes sind eine (separate) strenge Zusammenhangskomponente.
Anmerkung
Der zu einem Graphen G = (V , E ) transponierte Graph ist
definiert durch G T = (V , E T ) mit E T = {(u, v ) | (v , u) ∈ E }. Ist
G in Adjazenzlisten-Darstellung gegeben, kann G T in Zeit
O(V + E ) berechnet werden.
Frank Heitmann [email protected]
50/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
a
d
s
e
Frank Heitmann [email protected]
c
f
51/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
d
9/14
1/8
s
2/5
e
10/13
Frank Heitmann [email protected]
c
f
11/12
52/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
d
9/14
1/8
s
2/5
e
10/13
Frank Heitmann [email protected]
c
f
11/12
53/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
d
1/8
s
2/5
e
9/14
10/13
1/
2/
Frank Heitmann [email protected]
c
f
11/12
54/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
d
1/8
s
2/5
e
9/14
10/13
1/
2/
Frank Heitmann [email protected]
c
f
11/12
55/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
d
1/8
s
2/5
e
9/14
10/13
1/4
2/3
Frank Heitmann [email protected]
c
f
11/12
56/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
d
1/8
s
2/5
e
f
9/14
10/13
11/12
1/4
2/3
5/
Frank Heitmann [email protected]
c
57/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
d
1/8
s
2/5
e
f
9/14
10/13
11/12
1/4
2/3
5/6
Frank Heitmann [email protected]
c
58/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
1/8
s
2/5
c
7/
d
e
f
9/14
10/13
11/12
1/4
2/3
5/6
Frank Heitmann [email protected]
59/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
1/8
11/12
d
8/13
s
2/5
7/14
9/10
e
f
9/14
10/13
11/12
1/4
2/3
5/6
Frank Heitmann [email protected]
c
60/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
1/8
11/12
d
8/13
s
2/5
7/14
9/10
e
f
9/14
10/13
11/12
1/4
2/3
5/6
Frank Heitmann [email protected]
c
61/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Beispiel
b
3/4
a
6/7
1/8
11/12
d
8/13
s
2/5
7/14
9/10
e
f
9/14
10/13
11/12
1/4
2/3
5/6
Frank Heitmann [email protected]
c
62/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Analyse
Satz
G und G T haben die gleichen SCCs.
Seien C und C 0 zwei verschiedene SCCs eines DAG
G = (V , E ).
Seien u, v ∈ C und u 0 , v 0 ∈ C 0 . Gibt es in G einen Pfad
u ⇒ u 0 , so gibt es keinen Pfad v 0 ⇒ v in G .
Gibt es (u, v ) ∈ E mit u ∈ C und v ∈ C 0 , so gilt
f (C ) > f (C 0 ).
Gibt es (u, v ) ∈ E T mit u ∈ C und v ∈ C 0 , so gilt
f (C ) < f (C 0 ).
SCC(G ) ist korrekt und hat eine Laufzeit in Θ(V + E ).
Für Interessierte
Interessierte Leser finden die Beweise in Kapitel 22 im [Cormen]
(ca. 3 Seiten)
Frank Heitmann [email protected]
63/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Zusammenfassung und Ausblick
Graphen
Grundlagen, Adjazenzmatrix, Adjazenzliste
Breiten- & Tiefensuche
Anwendung der Tiefensuche
Topologisches Sortieren
Bestimmung starker Zusammenhangskomponenten
(Über-)Nächstes Mal:
Minimale Spannbäume
Bestimmen der kürzesten Pfade
Flüsse
Frank Heitmann [email protected]
64/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Topologisches Sortieren - Problemstellung
Definition (Topologisches Sortieren)
Eingabe: Gegeben ein gerichteter azyklischer Graph G = (V , E ).
Gesucht: Eine topologischer Sortierung, d.h. eine lineare
Anordnung der Knoten mit der Eigenschaft, dass u in der
Anordnung vor v liegt, falls es in G eine Kante (u, v ) gibt.
Anmerkung
Dieses Problem tritt häufig bei der Modellierung von Ereignissen
auf, die mit einer Priorität (bzw. Abhängigkeiten) versehen sind (und
entsprechend bearbeitet werden sollen).
Frank Heitmann [email protected]
65/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Ein Beispiel
b
a
s
d
s
c
e
e
d
Frank Heitmann [email protected]
a
c
b
66/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
TopoSort - Algorithmus und Idee
Algorithmus 3 TopoSort(G )
1: Berechne die Endzeiten f [v ] für alle v ∈ V durch Aufruf von
DFS(G ).
2: Füge jeden abgearbeiteten Knoten an den Kopf einer verketteten
Liste ein.
3: Liefere die verkettete Liste zurück.
Satz
TopoSort(G ) ist korrekt und arbeitet in Θ(V + E ).
Frank Heitmann [email protected]
67/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
TopoSort - Beispiel
b
3/4
C
a
2/5
d
10/11
1/8
C
s
6/7
c
e
9/12
e, d, s, c, a, b
Frank Heitmann [email protected]
68/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
Problemstellung
Definition (Bestimmung starker Zusammenhangskomponenten)
Eingabe: Gegeben ein gerichteter Graph G = (V , E ).
Gesucht: Die starken Zusammenhangskomponenten des Graphen,
d.h. maximale Menge C ⊆ V derart, dass für jedes Paar u, v ∈ C
sowohl u ⇒ v als auch v ⇒ u gilt (es gibt einen Pfad von u nach
v und andersherum).
Anmerkung
Dieses Problem tritt oft bei gerichteten Graphen auf. Zunächst wird
der Graph in seine starken Zusammenhangskomponenten zerlegt und
dann werden diese separat betrachtet. (Oft werden die Lösungen anschließend noch entsprechend der Verbindungen zwischen den einzelnen Komponenten zusammengefügt.)
Frank Heitmann [email protected]
69/70
Wiederholung
Anwendung der Tiefensuche
Topologisches Sortieren
Starke Zusammenhangskomponenten
Wiederholung
SCC - Algorithmus und Idee
Algorithmus 4 SCC(G )
1: Aufruf von DFS(G ) zur Berechnung der Endzeiten f [v ].
2: Berechne G T (transponierter Graph).
3: Aufruf von DFS(G T ), betrachte in der Hauptschleife von DFS
die Knoten jedoch in der Reihenfolge fallender f [v ] (in Zeile 1
berechnet).
4: Die Knoten jedes in Zeile 3 berechneten Baumes sind eine (separate) strenge Zusammenhangskomponente.
Satz
SCC(G ) ist korrekt und arbeitet in Θ(V + E ).
Frank Heitmann [email protected]
70/70
Herunterladen