Algorithmen und Datenstrukturen II Robert Giegerich Technische Fakultät Vorlesung Sommer 2011 Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Teil I Graphen Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Anwendungen von Graphen Um einen Eindruck von der Vielfalt der Einsatzmöglichkeiten von Graphen und Graphalgorithmen zu bekommen, wollen wir einige Beispiele betrachten: Karten Wenn wir eine Reise planen, wollen wir Fragen beantworten wie: Was ist der kürzeste Weg von Bielefeld nach München? Was der schnellste Weg? Um diese Fragen beantworten zu können, benötigen wir Informationen über Verbindungen (Reiserouten) zwischen Objekten (Städten). Hypertexts Das ganze Web ist ein Graph: Dokumente enthalten Referenzen (Links) auf andere Dokumente, durch die wir navigieren. Graphalgorithmen sind essentielle Komponenten der Suchmaschinen, die uns Informationen im Web finden lassen. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Anwendungen von Graphen Schaltkreise Für elektrische Schaltungen sind wir an kreuzungsfreien Chip-Layouts interessiert und müssen Kurzschlüsse vermeiden. Zeitpläne Die Erledigung einiger Aufgaben hängt evtl. von der Erledigung anderer ab. Diese Abhängigkeiten können als Verbindungen von Aufgaben modelliert werden. Ein klassisches scheduling Problem wäre dann: Wie arbeiten wir die Aufgaben unter den gegeben Voraussetzungen am schnellsten ab? Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Anwendungen von Graphen Netzwerke Computernetzwerke bestehen aus untereinander verbundenen Einheiten, die Nachrichten senden, empfangen und weiterleiten. Wir sind nicht nur daran interessiert, welchen Weg eine Nachricht von einem Ort zum anderen nehmen muss. Genauso will man sicherstellen, dass die Konnektivität aller Orte auch dann gewähleistet ist, wenn sich das Netzwerk ändert (Ausfallsicherheit). Genauso muss der Datenfluss sichergestellt sein, so dass das Netzwerk nicht ’verstopft’. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Terminologie V : Menge von Knoten (auch vertices oder nodes) E : Menge von Kanten (edges) G : Graph G = (V , E ) Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Terminologie Definition Ein Graph G = (V , E ) besteht aus einer Menge von Knoten V (auch vertices oder nodes) und einer Menge von Kanten E (edges). Jede Kante ist ein Paar (v , w ) ∈ V , das Paare von Knoten verbindet. Wir beschränken uns im Folgenden auf Graphen, die keine doppelten (oder parallele) Kanten besitzen. (Graphen, die doppelte Kanten enthalten, nennt man Multigraphen.) Im Rahmen der obigen Definition unterscheiden wir nicht zwischen den Paaren (a, b) und (b, a). Sie stellen die gleiche Kante dar. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Gewichtete Graphen Definition Ein gewichteter Graph (weighted graph) ist ein Graph, in dem Kanten mit Gewichten versehen sind: Aus G = (V , E ) wird G = (V , E , w ) mit w : E → R. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Markierte Graphen Definition Ein markierter Graph (node labeled graph) ist ein Graph, in dem Knoten mit Markierungen aus einem Alphabet A versehen sind: Aus G = (V , E ) wird G = (V , E , m) mit m : V → A. Während jeder Knoten in V ein eindeutiges Objekt ist, können verschiedene Knoten die gleiche Markierung tragen. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Gewichtete markierte Graphen Und natürlich gibt es auch gewichtete markierte Graphen G = (V , E , w , m) ... Und gelegentlich sind die Knoten gewichtet und die Kanten markiert ... Usw., usf. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Gewichtete markierte Graphen Und natürlich gibt es auch gewichtete markierte Graphen G = (V , E , w , m) ... Und gelegentlich sind die Knoten gewichtet und die Kanten markiert ... Usw., usf. Gewichtete/markierte Graphen enthalten somit zusätzliche Attribute, in denen z.B. die Länge einer Kante (bei der Modellierung eines Straßennetzes) repräsentiert werden kann. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Repräsentation von Bahnverbindungen als Graph HH 160 H 110 115 285 B 293 BI DO 350 220 585 F 630 210 S 230 M Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Typische Fragen Gibt es eine direkte Verbindung zwischen Stadt BI und M? Welches ist der kürzeste Weg von BI nach S? In alle anderen Städte? Welches ist der kürzeste Weg, der in Stadt F startet und alle Städte einmal besucht? Gibt es einen Ort, der nicht mehr erreichbar ist, wenn ein anderer ausfällt? Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Graph und Wirklichkeit Graphen sind Abstraktionen, auf die sich viele Probleme der Wirklichkeit reduzieren lassen. Effiziente Algorithmen auf (abstrakten) Graphen sind Grundlage vieler Programme. Oft werden die Grundalgorithmen auf Graphen mit weiteren, speziellen Eigenschaften angepasst. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Graph und Wirklichkeit Graphen sind Abstraktionen, auf die sich viele Probleme der Wirklichkeit reduzieren lassen. Effiziente Algorithmen auf (abstrakten) Graphen sind Grundlage vieler Programme. Oft werden die Grundalgorithmen auf Graphen mit weiteren, speziellen Eigenschaften angepasst. ========================== PS: Eine richtige Abstraktion erfasst das Wesentliche einer Sache. Abstrahieren ist nicht einfach “Weglassen”. Universalkategorien sind oft falsche Abstraktionen: “Der Mensch”, “Wir alle”, ... Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Gerichtete Graphen Definition Ein gerichteter Graph (directed graph, digraph) ist ein Graph, in dem jede Kante eine Richtung hat. Für u, v ∈ V ist dann (u, v ) 6= (v , u). In gerichteten Graphen können zwei Knoten durch zwei Kanten verbunden sein, allerdings nur durch je eine Kante in jede Richtung. Und natürlich kennt man auch gewichtete gerichtete Graphen, etc. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Untergraphen und Teilgraphen Definition Ein Untergraph (induced subgraph) von (V , E ) ist ein Paar (V 0 , E 0 ), mit V 0 ⊂ V und E 0 = {(u, v )|(u, v ) ∈ E : u ∈ V 0 , v ∈ V 0 }. Der Untergraph behält also alle Kanten, die seine Knoten in (V , E ) haben. Anders der Teilgraph: Definition Ein Teilgraph (subgraph) von (V , E ) ist ein Paar (V 0 , E 0 ), mit V 0 ⊂ V und E 0 ⊂ E . Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Verbundene Graphen Definition Ein Graph heißt verbunden (connected), wenn jeder Knoten von jedem anderen Knoten aus erreicht werden kann. Ein Graph, der nicht verbunden ist, besteht aus einer Menge von Zusammenhangskomponenten (connected components), die maximale verbundene Teilgraphen sind. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Nachbarn Definition Zwei Knoten u, v ∈ V mit u 6= v heißen benachbart (adjacent), wenn (u, v ) ∈ E oder (v , u) ∈ E . Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Grad Definition Bei der Bestimmung des Grads (degree) eines Knotens muss man zwischen ungerichteten und gerichteten Graphen unterscheiden: ungerichtete Graphen: Der Grad eines Knotens ist die Zahl seiner Nachbarn. gerichtete Graphen: Der Eingangsgrad (in-degree) eines Knotens v ∈ V ist die Zahl der Kanten (u, v ) ∈ E . Der Ausgangsgrad (out-degree) eines Knotens v ∈ V ist die Zahl der Kanten (v , u) ∈ E . Der Grad ist die Summe von Eingangs- und Ausgangsgrad. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Pfad Definition Ein Pfad (path) von u nach v ist einen Folge von Knoten u1 , u2 , . . . , uk , so daß u1 = u und uk = v und (ui , ui+1 ) ∈ E für alle 1 ≤ i < k. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Zyklus Definition Ein Zyklus (cycle) ist ein Pfad, in dem Start- und Endknoten identisch sind. Einen Zyklus, in dem nur Anfangs- und Endknoten gleich sind, nennt man Kreis. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Bäume Definition Auch Bäume sind spezielle Graphen: Ein Baum (tree) ist ein ungerichteter, verbundener Graph ohne Zyklen (genauer: ohne Kreise, also Zyklen, in denen nur Anfangs- und Endpunkt identisch sind). Eine Menge von Bäumen heißt Wald (forest). Ein Spannbaum (spanning tree) eines verbundenen Graphen (V , E ) ist ein Teilgraph, der alle Knoten V enthält und ein Baum ist. Der Haskell-Datentyp data Tree a = Br (Tree a) (Tree a) | Leaf a ist damit ein markierter Graph mit Markierungen aus {Br, Leaf} ∪ a Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Repräsentation von Graphen Um Graphen darzustellen gibt es zwei Standardmöglichkeiten: Adjazenzlisten Adjazenzmatrizen Beide können sowohl für gerichtete als auch ungerichtete Graphen verwendet werden. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Repräsentation von Graphen Bei dünn besetzten (sparse) Graphen, bei denen die Anzahl der Kanten |E | viel kleiner als |V |2 ist, liefern Adjazenzlisten eine kompakte Darstellung. Die Repräsentation durch Adjazenzmatrizen wird vorgezogen, wenn der Graph dicht besetzt (dense) ist (d.h. wenn |E | nahe an |V |2 liegt, oder wenn ein Algorithmus möglichst schnell herausfinden muss, ob zwei Knoten verbunden sind. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Adjazenzlisten und Adjazenzmatrizen 1 1 2 5 2 1 5 3 2 4 4 2 5 5 4 1 1 2 3 4 5 1 0 1 0 0 1 2 1 0 1 1 1 3 0 1 0 1 0 3 4 0 1 1 0 1 2 5 1 1 0 1 0 2 3 5 3 4 4 (a) Robert Giegerich A&D II, Vorlesung 2011 (b) (c) Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Adjazenzlisten und Adjazenzmatrizen (gerichtet) 1 2 4 5 (a) Robert Giegerich A&D II, Vorlesung 2011 1 2 3 4 5 6 1 0 1 0 1 0 0 2 0 0 0 0 1 0 3 0 0 0 0 1 1 2 4 0 1 0 0 0 0 5 4 5 0 0 0 1 0 0 6 6 6 0 0 0 0 0 1 1 2 2 5 3 6 4 4 3 6 5 (b) (c) Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Adjazenzmatrizen Die Adjazenzmatrix benötigt O(V 2 ) Platz alle benachbarten Knoten von u können in Θ(V ) bestimmt werden um zu überprüfen, ob (u, v ) ∈ E gilt, wird O(1) Zeit benötigt gewichtete Graphen können dargstellt werden, indem man in der Matrix Gewichte statt Bits speichert Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Adjazenzlisten benötigt Θ(V + E ) Platz alle benachbarten Knoten von u können in Θ(degree(u)) bestimmt werden um zu überprüfen, ob (u, v ) ∈ E gilt, wird O(degree(u)) Zeit benötigt Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren ADT Graph Wir wollen nun einen abstrakten Datentypen für Graphen beschreiben, der als Java-Interface definiert wird. Dieses sehr einfach gehaltene Interface genügt, um die in den nächsten Abschnitten beschriebenen Algorithmen zu implementieren. Der Graph Konstruktor bekommt zwei Parameter: einen Integer-Wert n für die Anzahl der Knoten im Graphen und einen Boolean, der angibt, ob der Graph gerichtet ist oder nicht. Die Knoten werden durch die Zahlen 0 . . . n − 1 identifiziert. Die Operationen beschränken sich zunächst auf: Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Operationen ADT Graph numOfV() gibt die Anzahl der Knoten zurück numOfE() gibt die Anzahl der Kanten zurück directed() gibt an, ob der Graph gerichtet ist insert(e) fügt eine Kante in den Graphen ein remove(e) löscht einen Kante aus dem Graphen edge(v,w) überprüft, ob es eine Kante zwischen Knoten v und w gibt getAdjList(v) stellt einen Iterator zur Verfügung, der alle benachbarten Knoten von v aufzählt Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren ADT Graph - Java interface (I) Beispiel public interface Graph { int numOfV(); int numOfE(); boolean directed(); void insert(Edge e); void remove(Edge e); boolean edge(int v, int w); AdjList getAdjList(int v); } Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren ADT Graph - Java interface (II) Beispiel public interface AdjList { int begin(); int next(); boolean end(); } public class Edge { int v; int w; Edge(int v, int w) { this.v = v; this.w = w; } } Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Durchlaufen von Graphen Oft werden Algorithmen benötigt, die einen Knoten mit einer bestimmten Eigenschaft suchen, alle Knoten eines Graphen besuchen/ aufzählen/ bearbeiten, (kürzeste) Pfade von einem Startknoten zu einem Zielknoten finden, etc. und dabei entlang der Kanten den Graphen von einem Knoten zum anderen gehen. Dazu kennt man Breitensuche und Tiefensuche. Auf Bäumen sind diese besonders einfach (vgl. Wikipedia), auf Graphen etwas komplizierter. Die folgenden Algorithmen folgen dem Buch von Cormen et al. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Breitensuche (1) Der Algorithmus geht von Adjazenzlisten aus. Startknoten ist s, von dem aus alle Nachfolger besucht werden sollen alle direkten Nachfolger werden besucht, bevor deren Nachfolger an die Reihe kommen “die Reihe” wird durch eine FIFO-Warteschlange implementiert Farben WHITE, GRAY, BLACK geben den Verarbeitungszustand eines Knotens an für jeden Knoten u wird sein Vorgänger π(u) und sein Abstand d(u) von s gespeichert Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Breitensuche (2) BFS(G , s) 1 for each vertex u ∈ V [G ] − {s} 2 do color [u] ← WHITE 3 d[u] ← ∞ 4 π[u] ← NIL 5 color [s] ← GRAY 6 d[s] ← 0 7 π[s] ← NIL 8 Q←∅ 9 ENQUEUE(Q, s) 10 while Q 6= ∅ 11 do u ← DEQUEUE(Q) 12 for each v ∈ Adj[u] 13 do if color [v ] = WHITE 14 then color [v ] ← GRAY 15 d[v ] ← d[u] + 1 16 π[v ] ← u 17 ENQUEUE(Q, v ) 18 color [u] ← BLACK Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Tiefensuche(1) Die Tiefensuche wäre einem Baum einfach die strukturelle Rekursion. Auf allgemeinen Graphen ist sie natürlich komplizierter: Es muss aufgepasst werden, ob der “Abstieg” zu einem Nachfolger zu einem bereits besuchten Knoten führt. Unser Algorithmus arbeitet so Er besucht alle Knoten im Graphen, Färbung der Knoten, Berechnung von π(u) wie bei der Breitensuche, Berechnung von “timestamps” d(u) (discover) und f (u) (finish), rekursiver “Abstieg”; eine Warteschlange wird nicht benötigt. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Tiefensuche (2) DFS(G ) 1 for each vertex u ∈ V [G ] 2 do color [u] ← WHITE 3 π[u] ← NIL 4 time ← 0 5 for each vertex u ∈ V [G ] 6 do if color [u] = WHITE 7 then DFS-VISIT(u) DFS-VISIT(u) 1 color [u] ← GRAY B White vertex u has just been discovered. 2 time ← time + 1 3 d[u] ← time 4 for each v ∈ Adj[u] B Explore edge (u, v ). 5 do if color [v ] = WHITE 6 then π[v ] ← u 7 DFS-VISIT(v ) 8 color [u] ← BLACK B Blacken u; it is finished. 9 f [u] ← time ← time + 1 Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Klammerungstheorem Theorem Für alle u, v gilt genau eine der folgenden Eigenschaften: 1 d[u] < f [u] < d[v ] < f [v ] oder d[v ] < f [v ] < d[u] < f [u], und u und v sind keine Nachfolger des jeweils anderen 2 d[u] < d[v ] < f [v ] < f [u] und v ist Nachfolger von u 3 d[v ] < d[u] < f [u] < f [v ] und u ist Nachfolger von v Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Theorem der weißen Pfade Theorem v ist Nachfolger von u genau dann, wenn zum Zeitpunkt d[u] (zu dem u entdeckt wird) ein Pfad u v existiert, der nur aus weißen Knoten besteht. (Mit Ausnahme von u, der gerade grau eingefärbt wurde.) Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Ergebnis eines Tiefendurchlaufs 11/16 socks undershorts 17/18 watch 12/15 6/7 pants shoes shirt 1/8 tie 2/5 9/10 13/14 belt jacket 3/4 Die Tiefensuche bestimmt auch einen Spannbaum oder Spannwald. Wie sieht dieser aus? Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Klassifikation von Kanten Die Tiefensuche trifft eine Klassifizierung der Kanten in G Baumkanten (tree edges): Kanten im Tiefensuchwald. Kante (u, v ) ist Baumkante, falls v bei der Sondierung von (u, v ) entdeckt wurde. Rückwärtskanten (back edges): (u, v ), wobei u Nachfolger von v ist. Vorwärtskanten (forward edges): (u, v ), wobei v Nachfolger von u ist, aber keine Baumkante. Querkanten (cross edges): alle übrigen Kanten. Können Knoten im selben Tiefensuchbaum verbinden, aber auch Knoten verschiedener Tiefensuchbäume. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Topologisches Sortieren (1) Die Kanten eines gerichteten Graphen ohne Zyklen stellen eine partielle Ordnung der Knoten dar. Toplogisches Sortieren ist die Einbettung dieser partiellen in eine totale Ordnung. Typische Anwendung ist die sequentielle Durchführung von Tätigkeiten, zwischen denen Abhängigkeiten bestehen. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Topologisches Sortieren (2) 11/16 socks undershorts 17/18 watch (a) 12/15 6/7 pants shoes shirt 1/8 tie 2/5 A&D II, Vorlesung 2011 13/14 belt jacket Robert Giegerich 9/10 3/4 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Topologisches Sortieren (2) 11/16 socks undershorts 17/18 watch (a) pants 12/15 6/7 shoes shirt 1/8 tie 2/5 13/14 belt jacket (b) 9/10 3/4 socks undershorts pants shoes watch shirt belt tie jacket 17/18 11/16 12/15 13/14 9/10 1/8 6/7 2/5 3/4 Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Topologisches Sortieren (3) TOPOLOGICAL-SORT(G ) 1 call DFS(G ) to compute finishing times f [v ] for each vertex v 2 as each vertex is finished, insert it into the front of a linked list 3 return the linked list of vertices Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld Anwendungen von Graphen Repräsentation von Graphen ADT Graph Durchlaufen von Graphen Topologisches Sortieren Weiterführende Literatur K. Arnold, J. Gosling: JavaTM - Die Programmiersprache. Addison-Wesley, 1996. T.H. Cormen, C.E. Leierson, R.L. Rivest: Introduction to Algorithms. MIT Press, 1990. D. Flanagan: Java in a Nutshell. O’Reilly & Associates Inc., 1996. F. Jobst: Programmieren in Java. Hanser Verlag, 1996. H. Klaeren: Vom Problem zum Programm. 2.Auflage, B.G. Teubner Verlag, 1991. K. Echtle, M. Goedicke: Lehrbuch der Programmierung mit Java. dpunkt-Verlag, 2000. Robert Giegerich A&D II, Vorlesung 2011 Universität Bielefeld