Computer Graphics - Fakultät für Informatik

Werbung
WS 2007/08
Diskrete Strukturen
Prof. Dr. R. Westermann
Lehrstuhl für Computer Grafik und Visualisierung
Fakultät für Informatik
Technische Universität München
http://wwwcg.in.tum.de/Teaching/WS2007/DiskreteStrukturen
8.1.2008
Kapitel IV – Graphentheorie
• Graphentheorie
– Grundlagen
– Bäume
– Eigenschaften von Graphen
– Graphen-Algorithmen
– Matchings und Netzwerke
2
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Fragestellungen:
– In welcher Reihenfolge können wir die Knoten eines
Graphen durchlaufen (traversieren)?
– Wie können wir aufspannende Bäume in einem
gegebenen Graphen berechnen?
– Was ist der kürzeste Weg von einem Knoten zu
einem anderen?
– Wie können wir einen binären Suchbaum
systematisch traversieren?
3
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Breitensuche
Ein Algorithmus zum Durchlaufen der Knoten
13 o
n
h8
eines Graphen.
7
– Durchlauf der Kanten
im Gegenuhrzeigersinn, 4
b
Start auf 6 Uhr
m 12
root
a
1
e
q
i
c
2
g6
16
f
4
p
18
15
j
17
3
d
9
14
r
k 11
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
5
l
10
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Breitensuche
Mittels einer Breitensuche in einem Graphen
lässt sich eine Wurzelbaum konstruieren.
a
– In unserem Beispiel
sogar ein
c
Spannbaum.
f
l
5
g
k m
n
d
b
h
e
o
q r
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
i
j
p
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Breitensuche
Eingabe: Graph G = (V,E), Sartknoten s  V.
Ausgabe: Felder d[v], pred[v] für alle v  V.
for all v  V do
begin
if v = s then
d[v]  0;
else
d[v]  ;
pred[v]  NULL;
end
…
6
// bearbeite alle Knoten aus V
// wenn wir am Startknoten sind
// setze seinen Abstand auf 0
// setze alle anderen Abstände auf 
// setze alle Vorgänger auf „undefiniert“
Fortsetzung nächste Seite
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Breitensuche (Fortsetzung)
…
Q  new QUEUE;
Q.INSERT(s);
while not Q.IsEMPTY() do
begin
v  Q.DEQUEUE();
for all u  (v) do
if d[u] =  then
begin
d[u]  d[v] + 1;
pred[u]  v;
Q.INSERT(u);
end
end
// legt ein neues Objekt vom Typ Warteschlange an
// fügt das Element s in die Warteschlange ein
// teste, ob noch Elemente in der Queue
// hole nächstes Element aus der Queue
// betrachte alle Nachbarn von v
// der Knoten u ist noch unbesucht
// sein Abstand = Abstand Vorg. + 1
// sein Vorgänger ist v
// setze ihn in die Warteschlange
7
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Breitensuche
– Wahl der Datenstruktur zur Speicherung der
Adjazenzinformation
• Platzbedarf der Adjazenzmatrix ist O(|V|2)
• Platzbedarf der Adjazenzliste ist |V| verkette Listen mit
|E| Listenelementen
8
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Breitensuche
– Zeitkomplexität des Algorithmus:
• Bei Speicherung des Graphen mit Adjazenzlisten:
O(|V| + |E|)
da die erste Schleife |V|-mal und die zweite 2|E|-mal
durchlaufen wird.
• Bei Speicherung des Graphen mit Adjazenzmatrix:
O(|V|2)
da zum Auffinden der Nachbarn alle |V| Nachbarn
durchlaufen werden müssen.
9
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Breitensuche
Satz: Die Breitensuche i.e. Graphen G = (V,E) hat
ein Laufzeit von O(|V| + |E|), wenn der Graph
als Adjazenzliste gespeichert ist.
Am Ende gilt:
10
1. d[v] ist die Länge des kürzesten s-v-Pfades in G.
Falls kein s-v-Pfad exisitiert, gilt d[v]=.
2. Falls G zusammenhängend ist, dann bilden die
Kanten {v, pred[v]}, v  V \ {s}, einen Spannbaum T
mit der Eigenschaft, dass für alle Knoten v der s-vPfad in T ein kürzester s-v-Pfad in G ist.
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Breitensuche
Beweis von 1.:
11
– Für alle besuchten Knoten v  V \ {s} gilt:
d[v] = d[pred[v]]+1 ≥ 1.
– Laufen wir von v ausgehend „rückwärts“ bis zu s, dann
nehmen die Abstände in jedem Schritt um eins ab.
– Man erhält also einen Pfad der Lände d[v], der in einem
Knoten mit d = 0 (dies muss s sein) endet.
– Für {u,v}  E gilt: d[v] ≤ d[u] + 1.
– Für einen bel. s-v-Pfad s = u0, u1,…, uk = v gilt dann:
d[v] = d[uk] ≤ d[uk-1]+1 ≤ d[uk-2]+2 ≤ … ≤ d[u0]+k = k.
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Breitensuche
Beweis zu 2.:
– Die Breitensuche erzeugt keine Kreise, da ein Knoten
immer nur zu höchstens einem Knoten mit kleinerem
Abstand benachbart ist.
– Da Kanten immer an den aktuellen Graphen angehängt
werden, ist der resultierende Graph ein Baum.
– Angenommen v  VT und s ist der Startknoten. Da G
zusammenhängend ist, existiert ein Pfad s = v0, v1…, v
und somit ein Index i mit vi  VT und vi+1  VT.
Da aber vi irgendwann die aktuelle Ecke war und vi+1
hinzugenommen wurde, muss vi+1 in VT sein. Dies ist ein
Widerspruch zur Annahme.
12
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Breitensuche
Beispiel für einen gerichteten Graphen:
a
b
c
d
a
d
h
b
e
f
g
h
f
i
j
k
i
c
l
k
l
g
e
j
13
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Tiefensuche
Ein Algorithmus zum Durchlaufen der Knoten
17 o
n
h 16
eines Graphen.
15
– Durchlauf der Kanten
im Gegenuhrzeigersinn, 9
b
Start auf 6 Uhr.
m 13
root
a
1
e
q
i
c
2
g
14
11
10
j
12
6
f
p
14
18
d
8
7
r
k
3
5
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
l
4
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Tiefensuche
Mittels einer Tiefensuche in einem Graphen
lässt sich eine Wurzelbaum konstruieren
a
c
f
l
g
n
p
m
h
j
r
k
q
15
In unserem Beispiel sogar ein
Spannbaum.
i
b
e
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
o
d
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Tiefensuche
– Traversiert den Graphen in die Tiefe, bis es nicht
mehr weitergeht.
– Verwendet keine Warteschlange, sondern einen
Stack.
• In die Warteschlange werden Elemente hinten angehängt
und in der Reihenfolge ihres Einfügens entnommen.
– FIFO – FirstInFirstOut-Strategie
• In den Stack werden Elemente vorne eingesetzt und in
der umgekehrten Reihenfolge ihres Einfügens
entnommen.
– LIFO – LastInFirstOut-Strategie
16
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Tiefensuche
Eingabe: Graph G = (V,E), Sartknoten s  V.
Ausgabe: Feld pred[v] für alle v  V.
for all v  V do
pred[v]  NULL;
…
17
// bearbeite alle Knoten aus V
// setze alle Vorgänger auf „undefiniert“
Fortsetzung nächste Seite
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Tiefensuche (Fortsetzung)
…
S  new STACK;
// legt ein neues Objekt vom Typ STACK an
v  s;
repeat
if u  (v) \ {s} mit pred[u] = NULL then // nicht besuchter Nachf. ?
S.PUSH(v)
// setze Element auf den Stack
pred[u]  v;
// das Element ist Vorgänger von u
v  u;
// mache mit u weiter
else if not S.IsEMPTY() then
v  S.POP();
// hole Element vom Stack
else
v  NULL;
until v = NULL;
// wiederhole bis Stack leer
18
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Algorithmus Tiefensuche
Satz:
Die Tiefensuche in einem Graphen G = (V,E) hat
eine Laufzeit von O(|V| + |E|), wenn der Graph
als Adjazenzliste gespeichert ist.
Am Ende des Algorithmus gilt:
Falls G zusammenhängend ist, dann bilden die
Kanten {v, pred[v]}, v  V \ {s}, einen
Spannbaum.
19
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Kürzeste Wege
– Gegeben sind ein Graph G = (V,E) und eine
Gewichtsfunktion w : E  ℝ+  {+}.
– O. B. d. A. sei G vollständig und damit auch
zusammenhängend.
– Sei u = v0, v1,..., vn = v ein Pfad in G. Die Länge dieses
Pfades ist
n1
 w(vi , vi 1).
i 0
20
– d(u, v) sei die Länge eines kürzesten Pfades von u nach v.
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Kürzeste Wege
Problemstellungen:
– Gegeben u, v  V , berechne d(u, v).
– Gegeben u  V , berechne für alle v  V die Länge
d(u, v) eines kürzesten Pfades von u nach v (sssp,
single source shortest path).
– Berechne für alle (u, v)  V die kürzeste Entfernung
d(u, v) (apsp, all pairs shortest path).
21
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Dijkstras Algorithmus für sssp.
FV
for all v  F do
d[v]  
// d: aktuell kürzeste Pfade
p[v]  null
// p: Vorgängerliste
d[s] = 0;
// der Startknoten
while F   do
bestimme u  F mit d[u] minimal;
F  F \ {u};
for all v  (u) do
if d[v] > d[u] + w(u,v)
d[v]  d[u] + w(u,v)
22
p[v]  u
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Satz:
Dijkstras Algorithmus berechnet d(s,v) für alle
v  V; der Zeitaufwand ist O(n2), der Platzbedarf
O(n+m), wobei V = n und E = m.
Beweis:
Zeit- und Platzbedarf sind aus dem Algorithmus
ersichtlich. Die Korrektheit zeigen wir mit einem
Widerspruchsbeweis:
Annahme: v sei der erste Knoten, so dass d(s,v)
falsch (d. h. zu groß) berechnet wird.
23
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Beweis (Fortsetzung):
Diese Situation illustriert folgendes Bild:
24
Nach Annahme muss dann gelten:
d(w) + w(w,v) < d(s,v´) + d(v´,v) = d(v) .
Damit wäre d(w) aber kleiner als d(v), und der
Algorithmus hätte w und nicht v gewählt.
□
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Dijkstras Algorithmus
Beispiel:
25
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Dijkstras Algorithmus
Beispiel:
26
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Minimale aufspannende Bäume
Beispiel:
Eine Firma plant eine Vernetzung seiner 5
Computer-Zentren. Die Leasing-Gebühren für die
Verbindung zweier Zentren verursachen Kosten.
Welche Verbindungen sollen geleast werden, so
dass bei minimalen Kosten alle Zentren miteinander
kommunizieren können.
Lösung: Wir modellieren das Problem als
gewichteten Graphen und konstruieren einen
27 Spannbaum, der die Gewichte minimiert.
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Minimale aufspannende Bäume
Beispiel:
d
a
1200
c
b
e
28
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Minimale aufspannende Bäume
Eine Lösung des vorhergehenden Beispiels:
d
a
1200
c
b
e
29
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Minimale aufspannende Bäume
Der Algorithmus von Kruskal:
Eingabe:
zusammenhängender ungerichteter Graph G = (V,E), V = n
Gewichtsfunktion w: E  R.
Augabe: Spannbaum T = (V,ET) mit minimalem Gewicht.
30
ET  ;
for i = 1 to n-1 do
begin
X  {e  E \ ET | ((V,ET  {e}) ist kreisfrei};
wähle emin  X mit w(emin) = mineXw(e);
ET  ET  {emin};
end
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Der Algorithmus von Kruskal
Beispiel:
a
2
3
b
3
1
e
4
4
3
1
2
f
3
2
i
c
j
5
g
3
4
3
d
h
3
k
1
l
Iteration Kante
Gewicht
1
{c,d}
1
2
{k,l}
1
3
{b,f}
1
4
{c,g}
2
5
{a,b}
2
6
{f,j}
2
7
{b,c}
3
8
{j,k}
3
9
{g,h}
3
10
{i,j}
3
11
{a,e}
3
31
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Traversierung von Wurzelbäumen
Traversierung
Beispiel:
Ausgabe Wurzel,
traversiere Teilbäume von links nach
rechts:
a
b
c
f
e
g
d
a,b,e,j,k,n,o,p,f,c,d,g,l,m,h,i
h
traversiere Teilbäume von links nach
rechts,
Ausgabe Wurzel:
i
j,n,o,p,k,e,f,b,c,l,m,g,h,i,d,a
k
j
n
32
o
m
l
p
traversiere linken Teilbaum,
Ausgabe Wurzel,
traversiere rechte Teilbäume:
j,e,n,k,o,p,b,f,a,c,l,g,m,d,h,i
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Preorder-Traversierung von Wurzelbäumen
Procedure preorder (Eingabe: Wurzelbaum T)
v  Wurzel von T;
Gebe Inhalt von v aus
for all u  (v) von links nach rechts do
// bearbeite alle Kinder
begin
T  Teilbaum von T mit u als Wurzel
preorder(T);
// rekursiver Aufruf der Traversierung
end
33
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Postorder-Traversierung von Wurzelbäumen
Procedure postorder (Eingabe: Wurzelbaum T)
v  Wurzel von T;
for all u  (v) von links nach rechts do
// bearbeite alle Kinder
begin
T  Teilbaum von T mit u als Wurzel
postorder(T);
// rekursiver Aufruf der Traversierung
end
Gebe Inhalt von v aus
34
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Kapitel IV – Graphen; Algorithmen
• Inorder-Traversierung von Wurzelbäumen
Procedure inorder (Eingabe: Wurzelbaum T)
v  Wurzel von T;
if IsLeaf(v) then
Gebe Inhalt von v aus
else
begin
l  erstes Kind von v von links nach rechts;
T  Teilbaum von T mit l als Wurzel;
inorder(T);
// rekursiver Aufruf der Traversierung
Gebe Inhalt von v aus
for all u  (v) \ { l } von links nach rechts do
begin
T  Teilbaum von T mit u als Wurzel;
inorder(T);
end
end
35
Vorlesung Diskrete Strukturen WS 07/08
Prof. Dr. R. Westermann – Institut für Informatik, TU München
computer graphics & visualization
Herunterladen