MET JEZUS OP WEG DE WEG NAAR HET ECHTE GELUK DE WEG NAAR HET ECHTE GELUK.
2.6.1 Definition und Darstellung 2.6.2 Ausspähen von ......• Auf dem Weg von u nach v durch T...
Transcript of 2.6.1 Definition und Darstellung 2.6.2 Ausspähen von ......• Auf dem Weg von u nach v durch T...
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
2.6 Graphen
2.6.1 Definition und Darstellung 2.6.2 Ausspähen von Graphen 2.6.3 Minimal spannende Bäume 2.6.4 Kürzeste Pfade 2.6.5 Maximaler Fluss
1
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
2.6.3 Minimal spannende Bäume
2.6.3.1 Generischer Algorithmus 2.6.3.2 Prims Algorithmus 2.6.3.3 Kruskals Algorithmus
2
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Minimal Spannende Bäume
• Gegeben sei ein zusammenhängender, ungerichteter, gewichteter Graph G=(V,E) mit Gewichtsfunktion w:E→R.
• Gesucht ist ein Spannbaum S⊆E der minimiert, der sogenannte MST.
3
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Minimal Spannende Bäume
4
5
1
7
3
Kein Baum!
5
1
7
3
Nicht spannend!
5
1
7
3
Nicht minimal!
5
1
7
3
MST
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
• Greedy-Strategie: Füge nach und nach Kanten zu einer anfangs leeren Kantenmenge A hinzu, und zwar unter Beachtung der folgenden Invariante: • A ist Teilmenge eines MST (∗)
5
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
• Sei A eine Menge von Kanten, die die Invariante (∗) erfüllt. Eine Kante e heißt sicher für A, falls A∪{e} ebenfalls die Invariante (∗) erfüllt.
6
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
• GENERICMST( G, w ) A ← ∅ while A ist kein MST do suche eine sichere Kante e für A A ←A ∪{e} return A
7
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
• Ein Schnitt eines ungerichteten Graphen G=(V,E) ist eine Menge S⊆V
• Eine Kante (u,v) kreuzt den Schnitt S falls einer ihrer Endpunkte in S und der andere Endpunkt in V−S liegt.
8
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
9
kreuzende Kanten
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
• Ein Schnitt respektiert A, falls keine Kante aus A den Schnitt kreuzt.
• Eine kreuzende Kante heißt leicht, falls ihr Gewicht minimal unter allen kreuzenden Kanten ist.
10
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
11
leichte Kante
3 9
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
• Satz: A erfülle die Invariante (∗). S sei ein Schnitt der A respektiert und (u,v) eine leichte Kante, die S kreuzt. Dann ist (u,v) sicher für A.
12
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
• Sei T ein MST der A enthält, aber nicht (u,v)
13
u
x
y
v
A T
Würde er (u,v) enthalten, so wären wir schon fertig!
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
• Sei T ein MST der A enthält, aber nicht (u,v) • Auf dem Weg von u nach v durch T gibt es eine
Kante (x,y) die den Schnitt kreuzt
14
u
x
y
v
A T
Der Weg existiert, da T ein spannend ist. Er ist eindeutig, da T ein Baum ist.
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
• Sei T ein MST der A enthält, aber nicht (u,v) • Auf dem Weg von u nach v durch T gibt es eine
Kante (x,y) die den Schnitt kreuzt • T’ = T − {(x,y)} ∪ {(u,v)} ist ein MST, denn
w(T’) = w(T) − w(x,y) + w(u,v) ≤ w(T)
15
u
x
y
v
A T’
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Generischer Algorithmus
• Sei T ein MST der A enthält, aber nicht (u,v) • Auf dem Weg von u nach v durch T gibt es eine
Kante (x,y) die den Schnitt kreuzt • T’ = T − {(x,y)} ∪ {(u,v)} ist ein MST • Wegen A ⊆ T und (x,y) ∉ A folgt A ∪ {(u,v)} ⊆ T’,
also ist (u,v) sicher für A
16
u
x
y
v
A∪{(u,v)} T’
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
2.6.3 Minimal spannende Bäume
2.6.3.1 Generischer Algorithmus 2.6.3.2 Prims Algorithmus 2.6.3.3 Kruskals Algorithmus
17
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
• Die Kanten in A bilden einen Baum. Jeder Knoten u erhält einen Zeiger p[u] auf seinen Vater im MST.
• Der A respektierende Schnitt S ist gegeben durch S = { u : (u,v) ∈ A }
18
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
• Knoten u außerhalb von S erhalten einen Schlüssel, der das minimale Gewicht einer Kante angibt, die u mit S verbindet (∞∞ falls es solch eine Kante nicht gibt)
19
3
∞
3
9 S
V−S
5
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
20
∞
0 ∞
∞
∞
∞
∞
∞
∞
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
21
4
0 ∞
8
∞
∞
∞
∞
∞
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
22
4
0 ∞
8
8
∞
∞
∞
∞
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
23
4
0 2
8
8
7
∞
∞
4
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
24
4
0 2
7
8
7
6
∞
4
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
25
4
0 2
7
8
7
2
10
4
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
26
4
0 2
1
8
7
2
10
4
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
27
4
0 2
1
8
7
2
10
4
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
28
4
0 2
1
8
7
2
9
4
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
29
4
0 2
1
8
7
2
9
4
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
• PRIM(G,w,r) for each u ∈ V do key[u] ← ∞ p[u] ← NIL key[r] ← 0 Q ← V while Q not empty do u ← ExtractMinimum(Q) for each v ∈ Adj[u] do if v ∈ Q and w(u,v) < key[v] then p[v] ← u key[v] ← w(u,v)
30
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
• PRIM(G,w,r) for each u ∈ V do key[u] ← ∞ p[u] ← NIL key[r] ← 0 Q ← V while Q not empty do u ← ExtractMinimum(Q) for each v ∈ Adj[u] do if v ∈ Q and w(u,v) < key[v] then p[v] ← u key[v] ← w(u,v)
31
O(V)
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
32
O(V) Heap Aufbau!
• PRIM(G,w,r) for each u ∈ V do key[u] ← ∞ p[u] ← NIL key[r] ← 0 Q ← V while Q not empty do u ← ExtractMinimum(Q) for each v ∈ Adj[u] do if v ∈ Q and w(u,v) < key[v] then p[v] ← u key[v] ← w(u,v)
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
33
V Läufe
• PRIM(G,w,r) for each u ∈ V do key[u] ← ∞ p[u] ← NIL key[r] ← 0 Q ← V while Q not empty do u ← ExtractMinimum(Q) for each v ∈ Adj[u] do if v ∈ Q and w(u,v) < key[v] then p[v] ← u key[v] ← w(u,v)
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
34
O(log V)
Entfernen eines Elements aus dem Heap
• PRIM(G,w,r) for each u ∈ V do key[u] ← ∞ p[u] ← NIL key[r] ← 0 Q ← V while Q not empty do u ← ExtractMinimum(Q) for each v ∈ Adj[u] do if v ∈ Q and w(u,v) < key[v] then p[v] ← u key[v] ← w(u,v)
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
35
O(E)
Durchläufe insgesamt
• PRIM(G,w,r) for each u ∈ V do key[u] ← ∞ p[u] ← NIL key[r] ← 0 Q ← V while Q not empty do u ← ExtractMinimum(Q) for each v ∈ Adj[u] do if v ∈ Q and w(u,v) < key[v] then p[v] ← u key[v] ← w(u,v)
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
36
O(log V)
Heap muss aktualisiert werden
• PRIM(G,w,r) for each u ∈ V do key[u] ← ∞ p[u] ← NIL key[r] ← 0 Q ← V while Q not empty do u ← ExtractMinimum(Q) for each v ∈ Adj[u] do if v ∈ Q and w(u,v) < key[v] then p[v] ← u key[v] ← w(u,v)
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
37
O(V×log V + E×log V)
O(V)
• PRIM(G,w,r) for each u ∈ V do key[u] ← ∞ p[u] ← NIL key[r] ← 0 Q ← V while Q not empty do u ← ExtractMinimum(Q) for each v ∈ Adj[u] do if v ∈ Q and w(u,v) < key[v] then p[v] ← u key[v] ← w(u,v)
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
• Nach der Ausführung von Prim(G,w,r) ist der MST gegeben durch A = { (u,p[u]) : u ∈ V − {r} }
• Implementierung von Prims Algorithmus z.B. mit binärem Heap
38
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Prims Algorithmus
• Implementiert man Prims Algorithmus mittels eines binären Heaps, so ist der Aufwand
O(E×log V) • Implementiert man Prims Algorithmus
mittels eines Fibonacci-Heaps, so ist der Aufwand
O(E+V×log V)
39
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
2.6.3 Minimal spannende Bäume
2.6.3.1 Generischer Algorithmus 2.6.3.2 Prims Algorithmus 2.6.3.3 Kruskals Algorithmus
40
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
• Die Kanten in A bilden einen Wald. Jeder Knoten u in A erhält einen Zeiger p[u] auf seinen Vater im MST.
• Der A respektierende Schnitt S ist gegeben durch S = { u : (u,v) ∈ A }
• In jedem Schritt wird die Kante mit kleinstem Gewicht gesucht, die zwei Bäume aus A verbindet. Diese Kante wird zu A hinzugefügt.
41
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
42
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
43
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
44
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
45
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
46
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
47
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
48
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
49
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
50
4
8 7
9 14
10
2
7 6
1
2
8
11 4
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
• Kruskal(G,w) A ← ∅ for all v ∈ V do MakeSet(v) sort E into non-decreasing order for each (u,v) ∈ E do if Find(u) ≠ Find(v) then A ← A ∪ {(u,v)} Union(u,v) return A
51
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
• Kruskal(G,w) A ← ∅ for all v ∈ V do MakeSet(v) sort E into non-decreasing order for each (u,v) ∈ E do if Find(u) ≠ Find(v) then A ← A ∪ {(u,v)} Union(u,v) return A
52
O(E×log E)
V × MakeSet()
O(E) × Find(), Union()
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
• Aufwand – Sortieren: O(E×log E) = O(E×log V) – Union-Find • V × MakeSet() • O(E) × FindSet(), Union() ➡ O((V+E)×a(V)) = O(E×logV)
➡ Gesamtaufwand: O(E×log V)
53
E < V2 → log E = O(log V)
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
• Aufwand – Sortieren: O(E×log E) = O(E×log V) – Union-Find • V × MakeSet() • O(E) × FindSet(), Union() ➡ O((V+E)×a(V)) = O(E×logV)
➡ Gesamtaufwand: O(E×log V)
54
E > V−1 und a(V) = O(log V)
Aufwand für Union-Find
Datenstrukturen und Algorithmen Prof. Dr. Leif Kobbelt, Thomas Ströder, Fabian Emmes, Sven Middelberg, Michael Kremer
Kruskals Algorithmus
• Aufwand – Sortieren: O(E×log E) = O(E×log V) – Union-Find • V × MakeSet() • O(E) × FindSet(), Union() ➡ O((V+E)×a(V)) = O(E×logV)
➡ Gesamtaufwand: O(E×log V)
55