Graphen - Technische Fakultät

Werbung
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
Herunterladen