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