Graphen - Technische Fakultät

Syntax und Semantik Java: Der Einstieg Imperative Programmierung in Java Algorithmen zur exakten Suche in Texten Objektori
Algorithmen und Datenstrukturen II
Alexander Sczyrba
AG Praktische Informatik
Technische Fakultät
Universität Bielefeld
Vorlesung Sommer 2008
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Teil IX
Graphen
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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?
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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’.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Terminologie
V : Menge von Knoten (auch vertices oder nodes)
E : Menge von Kanten (edges)
G : Graph G = (V , E )
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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.)
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Gewichtete Graphen
Definition
Ein gewichteter Graph (weighted graph) ist ein Graph, in dem
Kanten mit Gewichten versehen sind.
Gewichtete Graphen enthalten somit zusätzliche Attribute, in
denen z.B. die Länge einer Kante (bei der Modellierung eines
Straßennetzes) repräsentiert werden können.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Typische Fragen
Gibt es eine direkte Verbindung zwischen Stadt BI und M?
Welches ist der kürzeste Weg von BI nach S?
Welches ist der kürzeste Weg, der in Stadt F startet und alle
Städte einmal besucht?
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Teilgraphen
Definition
Ein Teilgraph (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 }.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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
maximal verbundene Teilgraphen sind.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Nachbarn
Definition
Zwei Knoten u, v ∈ V mit u 6= v heißen benachbart (adjacent),
wenn (u, v ) ∈ E oder (v , u) ∈ E .
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Zyklus
Definition
Ein Zyklus (cycle) ist ein Pfad, in dem Start- und Endknoten
identisch sind.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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 hearusfinden
muss, ob zwei Knoten verbunden sind.
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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)
Alexander Sczyrba
A&D II, Vorlesung 2008
(b)
(c)
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Adjazenzmatrizen und Adjazenzmatrizen
1
2
4
5
(a)
Alexander Sczyrba
A&D II, Vorlesung 2008
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 Breitensuche Tiefensuche Topologisches Sortieren Topolo
Adjazenzmatrizen
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
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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 für die Anzahl der Knoten im Graphen und einen
Boolean, der angibt, ob der Graph gerichtet ist oder nicht. Die
Operationen beschränken sich zunächst auf:
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
ADT Graph - Java interface (I)
Beispiel
public interface Graph {
Graph(int numOfVertices, boolean directed);
int numOfV();
int numOfE();
boolean directed();
void insert(Edge e);
void remove(Edge e);
boolean edge(int v, int w);
AdjList getAdjList(int v);
}
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
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;
}
}
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Breitensuche
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
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Tiefensuche
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
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Topologisches Sortieren (I)
11/16
socks
undershorts
17/18
watch
(a)
12/15
6/7
pants
shoes
shirt
1/8
tie
2/5
A&D II, Vorlesung 2008
13/14
belt
jacket
Alexander Sczyrba
9/10
3/4
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Topologisches Sortieren (I)
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
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld
Anwendungen von Graphen Repräsentation von Graphen ADT Graph Breitensuche Tiefensuche Topologisches Sortieren Topolo
Topologisches Sortieren (II)
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
Alexander Sczyrba
A&D II, Vorlesung 2008
Universität Bielefeld