Wiederholung Anwendung der Tiefensuche Wiederholung Anwendung der Tiefensuche Grundlagen Tiefensuche Graphen - Definitionen Algorithmen und Datenstrukturen Kapitel 8 (Teil 2) 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 Graphen Anwendung der Tiefensuche Frank Heitmann [email protected] 2. Dezember 2015 Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche 1/70 Grundlagen Tiefensuche Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche Tiefensuche - Beispiel Grundlagen Tiefensuche Tiefensuche - Beispiel b a d 2/70 b s a c 1/ e Frank Heitmann [email protected] d 3/70 s c e Frank Heitmann [email protected] 4/70 Wiederholung Anwendung der Tiefensuche Grundlagen Tiefensuche Wiederholung Anwendung der Tiefensuche Tiefensuche - Beispiel Grundlagen Tiefensuche Tiefensuche - Beispiel b b 3/ a 2/ d s 1/ a c 2/ e d Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche 5/70 Grundlagen Tiefensuche Frank Heitmann [email protected] 6/70 Grundlagen Tiefensuche Tiefensuche - Beispiel b b 3/ 3/4 B a 2/ d c e Wiederholung Anwendung der Tiefensuche Tiefensuche - Beispiel s 1/ 1/ s c 2/ e Frank Heitmann [email protected] B a d 7/70 1/ s c e Frank Heitmann [email protected] 8/70 Wiederholung Anwendung der Tiefensuche Grundlagen Tiefensuche Wiederholung Anwendung der Tiefensuche Tiefensuche - Beispiel Tiefensuche - Beispiel b b 3/4 3/4 B a 2/5 d 1/ c 2/5 e Wiederholung Anwendung der Tiefensuche B a s d Frank Heitmann [email protected] 9/70 Grundlagen Tiefensuche s 1/ 6/ c e Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche Tiefensuche - Beispiel 10/70 Grundlagen Tiefensuche Tiefensuche - Beispiel b b 3/4 3/4 C B a 2/5 d Grundlagen Tiefensuche 1/ s 6/ c 2/5 e Frank Heitmann [email protected] d 11/70 C B a 1/ s 6/7 c e Frank Heitmann [email protected] 12/70 Wiederholung Anwendung der Tiefensuche Grundlagen Tiefensuche Wiederholung Anwendung der Tiefensuche Tiefensuche - Beispiel Tiefensuche - Beispiel b b 3/4 3/4 C B a 2/5 d Grundlagen Tiefensuche 1/8 s 6/7 c 2/5 e d C B a 1/8 s 6/7 c e 9/ Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche 13/70 Grundlagen Tiefensuche Wiederholung Anwendung der Tiefensuche Tiefensuche - Beispiel Grundlagen Tiefensuche b b 3/4 3/4 C B 2/5 d 14/70 Tiefensuche - Beispiel a 10/ Frank Heitmann [email protected] 1/8 s 6/7 c 2/5 e d 9/ Frank Heitmann [email protected] 10/11 15/70 C B a 1/8 s 6/7 c e 9/ Frank Heitmann [email protected] 16/70 Wiederholung Anwendung der Tiefensuche Grundlagen Tiefensuche Wiederholung Anwendung der Tiefensuche Tiefensuche - Beispiel Tiefensuche - Beispiel b b 3/4 3/4 C B a 2/5 1/8 s 6/7 c 10/11 C B a 2/5 C d Grundlagen Tiefensuche 1/8 s 6/7 c C e d 9/ 10/11 Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche 17/70 e 9/12 Frank Heitmann [email protected] Grundlagen Tiefensuche Wiederholung Anwendung der Tiefensuche Tiefensuche - Besondere Kanten 18/70 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). 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 ]. Anmerkung Bei einem ungerichteten Graphen gibt es nur Baum- und Rückwärtskanten. Frank Heitmann [email protected] 19/70 Frank Heitmann [email protected] 20/70 Wiederholung Anwendung der Tiefensuche Grundlagen Tiefensuche Wiederholung Anwendung der Tiefensuche Tiefensuche - Wichtige Eigenschaften Grundlagen Tiefensuche Tiefensuche - Klammerungstheorem (1/2) b 3/4 C B a 2/5 1/8 s 6/7 c C Es folgen einige wichtige - und nützliche - Eigenschaften der Tiefensuche... d e 9/12 10/11 (Beweise kann man im [Cormen] nachlesen. Nur ca. eine Seite) 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] Wiederholung Anwendung der Tiefensuche 21/70 Grundlagen Tiefensuche Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche Tiefensuche - Klammerungstheorem (2/2) 22/70 Grundlagen Tiefensuche Tiefensuche - Intervalle der Nachfahren b 3/4 2/5 1/8 b C B a s 3/4 6/7 c d 10/11 2/5 e 9/12 C B a C 1/8 s 6/7 c C d 10/11 Satz Bei der Tiefensuche erfüllt jedes Paar u, v von Knoten genau eine der folgenden Bedingungen: 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. 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 Frank Heitmann [email protected] 24/70 Wiederholung Anwendung der Tiefensuche Grundlagen Tiefensuche Wiederholung Anwendung der Tiefensuche Tiefensuche - Theorem der weißen Pfade Problemstellung Definition (Topologisches Sortieren) b a 2/ s 1/ d 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. c e 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). 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] Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung 25/70 Frank Heitmann [email protected] Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche Ein Beispiel 26/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Ein Beispiel b b a a d s c s d c e e s Frank Heitmann [email protected] 27/70 e d Frank Heitmann [email protected] a c b 28/70 Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche TopoSort - Algorithmus und Idee TopoSort - Beispiel 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. b a Frank Heitmann [email protected] s d 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.). Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung 29/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung e Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche TopoSort - Beispiel c 30/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung TopoSort - Beispiel b b 3/4 4/5 C C a 2/5 d 10/11 1/8 C s a 6/7 c 3/6 e d 9/12 1/2 C C s C 7/8 c e 11/12 C e, d, s, c, a, b Frank Heitmann [email protected] 9/10 e, s, c, a, b, d 31/70 Frank Heitmann [email protected] 32/70 Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche Zur Nachbereitung: Beweise 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.) 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] Wiederholung Anwendung der Tiefensuche 33/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche Zur Nachbereitung: Beweise 34/70 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] Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung 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. 35/70 Frank Heitmann [email protected] 36/70 Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche Zur Nachbereitung: Beweise Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung TopoSort - Analyse (Korrektheit) 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”. Satz Ein gerichteter Graph G ist genau dann azyklisch, wenn eine Tiefensuche auf G keine Rückwärtskanten liefert. Zur Nachbereitung 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!) 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] Wiederholung Anwendung der Tiefensuche 37/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche TopoSort - Analyse (Korrektheit) 38/70 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. Satz TopoSort(G ) erzeugt für einen gerichteten azyklischen Graphen G eine topologische Sortierung. 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!) 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] 39/70 Frank Heitmann [email protected] 40/70 Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche TopoSort - Analyse (Laufzeit) Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Problemstellung Definition (Bestimmung starker Zusammenhangskomponenten) Die Kernidee von TopoSort: 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). 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). 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.) Satz TopoSort(G ) ist korrekt und arbeitet in Θ(V + E ). Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche 41/70 Frank Heitmann [email protected] Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche Ein Beispiel 42/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Ein Beispiel b a d b s e Frank Heitmann [email protected] a c f d 43/70 s e Frank Heitmann [email protected] c f 44/70 Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche Ein Beispiel Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Der Komponentengraph Oft ist auch der Komponentengraph gesucht... b a d s e 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. c f Anmerkung Der Komponentengraph lässt sich aus den SCCs ermitteln. Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche 45/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Frank Heitmann [email protected] 46/70 Wiederholung Anwendung der Tiefensuche Der Komponentengraph - Beispiel Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Der Komponentengraph - Beispiel b sabc a d s e c f de Frank Heitmann [email protected] 47/70 Frank Heitmann [email protected] f 48/70 Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche Der Komponentengraph - Beispiel 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. sabc de f 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] Wiederholung Anwendung der Tiefensuche 49/70 Frank Heitmann [email protected] Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche SCC - Beispiel 50/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung SCC - Beispiel b b 3/4 a d a s e c 6/7 d f 9/14 Frank Heitmann [email protected] 51/70 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 Wiederholung Anwendung der Tiefensuche SCC - Beispiel Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung SCC - Beispiel b b 3/4 3/4 a a 6/7 d 9/14 1/8 s 2/5 e c d f 11/12 10/13 Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche 6/7 53/70 1/8 2/5 e 9/14 10/13 1/ 2/ c f 11/12 Frank Heitmann [email protected] Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche SCC - Beispiel s 54/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung SCC - Beispiel b b 3/4 3/4 a 6/7 d 1/8 a s 2/5 e 9/14 10/13 1/ 2/ Frank Heitmann [email protected] c 6/7 d f 11/12 55/70 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 Wiederholung Anwendung der Tiefensuche SCC - Beispiel Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung SCC - Beispiel b b 3/4 3/4 a 6/7 d 1/8 a s 2/5 e c 6/7 d f 1/8 s 2/5 e f 9/14 10/13 11/12 9/14 10/13 11/12 1/4 2/3 5/ 1/4 2/3 5/6 Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche 57/70 Frank Heitmann [email protected] Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche SCC - Beispiel c 58/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung SCC - Beispiel b b 3/4 3/4 a 6/7 1/8 a s 2/5 c 6/7 7/ d 1/8 11/12 e d f 8/13 s 2/5 7/14 9/10 e f 9/14 10/13 11/12 9/14 10/13 11/12 1/4 2/3 5/6 1/4 2/3 5/6 Frank Heitmann [email protected] 59/70 Frank Heitmann [email protected] c 60/70 Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche SCC - Beispiel Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung SCC - Beispiel b 3/4 a 6/7 1/8 11/12 d b 8/13 3/4 a s 2/5 7/14 c 6/7 9/10 e 1/8 11/12 d f 8/13 s 2/5 7/14 9/10 e f 9/14 10/13 11/12 9/14 10/13 11/12 1/4 2/3 5/6 1/4 2/3 5/6 Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche 61/70 Frank Heitmann [email protected] Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche SCC - Analyse c 62/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Zusammenfassung und Ausblick Satz G und G T haben die gleichen SCCs. Seien C und C 0 zwei verschiedene SCCs eines DAG G = (V , E ). Graphen Grundlagen, Adjazenzmatrix, Adjazenzliste Breiten- & Tiefensuche Anwendung der Tiefensuche 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 ). Topologisches Sortieren Bestimmung starker Zusammenhangskomponenten (Über-)Nächstes Mal: Minimale Spannbäume Bestimmen der kürzesten Pfade Flüsse 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 Frank Heitmann [email protected] 64/70 Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche Topologisches Sortieren - Problemstellung Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Ein Beispiel b 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. a s d 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] Wiederholung Anwendung der Tiefensuche s 65/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung e e d a c b Frank Heitmann [email protected] Wiederholung Anwendung der Tiefensuche TopoSort - Algorithmus und Idee c 66/70 Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung TopoSort - Beispiel b 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. 3/4 C a 2/5 d 10/11 1/8 C s 6/7 c e 9/12 Satz TopoSort(G ) ist korrekt und arbeitet in Θ(V + E ). e, d, s, c, a, b Frank Heitmann [email protected] 67/70 Frank Heitmann [email protected] 68/70 Wiederholung Anwendung der Tiefensuche Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung Wiederholung Anwendung der Tiefensuche Problemstellung Topologisches Sortieren Starke Zusammenhangskomponenten Wiederholung SCC - Algorithmus und Idee Definition (Bestimmung starker Zusammenhangskomponenten) 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. 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] Satz SCC(G ) ist korrekt und arbeitet in Θ(V + E ). 69/70 Frank Heitmann [email protected] 70/70