1 Folie/Blatt - Chair 11: ALGORITHM ENGINEERING

Werbung
Kap. 6.5: Minimale Spannbäume ff
Kap. 6.6: Kürzeste Wege
Professor Dr. Petra Mutzel
Karsten Klein
Lehrstuhl für Algorithm Engineering, LS11
Fakultät für Informatik, TU Dortmund
22. VO
DAP2
SS
2008
Petra Mutzel
1. Juli 2008
DAP2 SS08
1
Überblick
•  6.5: Minimale Spannbäume (MST) ff:
-  Algorithmus von Prim
•  6.6: Kürzeste Wege in Graphen:
-  Algorithmus von Dijkstra (für singlesource-shortest-path)
-  Algorithmus von Floyd-Warshall (für
all-pair-shortest-paths)
s. nächste VO
Petra Mutzel
DAP2 SS08
2
Motivation
„Warum soll ich heute hier bleiben?“
Verschiedene Probleme mit gleicher Idee gelöst
„Was gibt es heute Besonderes?“
Dijkstra oder Wie funktioniert mein Navi?
Petra Mutzel
DAP2 SS08
3
Grundideen
•  MST: Algorithmus von Prim
•  Kürzeste Wege in Graphen: Algorithmus
von Dijkstra
Beide nutzen ähnliches Konzept:
•  Greedy
•  Priority Queue
•  Lassen einzelnen Baum wachsen
Petra Mutzel
DAP2 SS08
4
Greedy-Verfahren
(Greedy = gierig, gefräßig)
Petra Mutzel
DAP2 SS08
5
Greedy-Paradigma
Greedy-Verfahren treffen lokale Entscheidungen
Sie wählen immer die aktuell günstigste Auswahl
Beispiel: Bin Packing:
Greedy-Algorithmen sind in der Regel nicht optimal,
können aber in einigen wichtigen Anwendungen
dennoch gute oder gar optimale Lösungen erzeugen!
Petra Mutzel
DAP2 SS08
7
Greedy Methode
•  Beliebig schlecht: TSP (Traveling Salesman
Problem)
•  Gut: Bin Packing (≤ 2x Optimum)
•  Optimal: MST (Minimum Spanning Trees)
Nötig für Optimalität:
•  Optimale Substruktur (Optimallösung besteht
aus optimalen Teillösungen)
•  Greedy Choice Eigenschaft (lokal optimale
Entscheidungen können Optimum erzeugen),
keine Abhängigkeit von anderen Teillösungen
Petra Mutzel
DAP2 SS08
8
Wdhlg. Minimaler Spannbaum
•  G=(V,E) ein ungerichteter, zshgd. Graph.
Ein Untergraph T=(V,ET) von G heißt
Spannbaum von G, falls T ein Baum ist.
•  Gewicht eines Spannbaums:
Gewichtsfunktion w : E→R,
w(T) := w(ET) := ∑e∈ET w(e)
Minimum Spanning Tree (MST)
Gesucht:
ein Spannbaum T von G mit
minimalem Gewicht w(T)
Petra Mutzel
DAP2 SS08
11
Algorithmus von Prim
basiert auf MST Eigenschaft:
Petra Mutzel
DAP2 SS08
12
basiert auf:
MST Eigenschaft
Aussichtsreiche Menge T von Kanten:
Es existiert ein MST,der alle Kanten von T
enthält.
Petra Mutzel
DAP2 SS08
13
MST Eigenschaft
Lemma 1 (Wiederholung):
Sei G=(V,E) zshgd. mit Gewichtsfunktion w : E→R.
Seien:
• S ⊂ V
• T ⊂ E aussichtsreich und keine Kante aus T
verlässt S
• e∈E Kante mit minimalem Gewicht, die S verlässt
Dann ist T ⋃ {e} aussichtsreich.
Petra Mutzel
DAP2 SS08
14
PRIMs Algorithmus: lasse Baum von s aus
MST
wachsen
mitEigenschaft
MST Eigenschaft
Kantenmenge T, aussichtsreich
Kante e verläßt S mit min. Gewicht
s
e
Knotenmenge S
MST sind nicht eindeutig!!
Dann: T∪e aussichtsreich
Petra Mutzel
DAP2 SS08
15
Algorithmus von Prim
Vgl. mit Kruskal:
•  Kruskal läßt Wald wachsen mit Union-Find bis
Spannbaum erzeugt
•  Prim läßt von Startknoten s einen einzelnen
Baum wachsen
s
Petra Mutzel
DAP2 SS08
16
Schema: Algorithmus von Prim
Wähle Startknoten s ∈ V
S := {s}; T := ø
// S Unterbaumknoten, T Kanten
while S ≠ V do {
Wähle e = (u, v), e verläßt S mit min. Gewicht
T := T ⋃ {e}: S:= S ⋃ {v}
}
Petra Mutzel
DAP2 SS08
18
Korrektheit Prim
Induktion über Kanten e1,…,ek , die zu T hinzugefügt
werden:
Zeige: Ti = {e1,…,ei} aussichtsreich für 0 ≤ i ≤ k
i = 0: T0 = ø ⇒ aussichtsreich
1 ≤ i ≤ k: Ti-1 aussichtsreich, S Knotenmenge vor
Hinzunahme von ei, keine Kante aus Ti-1 verläßt S
⇒  ei leichteste S verlassende Kante
⇒ Mit Lemma 1: Ti = Ti-1 ⋃
{ei } aussichtsreich
Und: Keine Kante aus Ti verläßt neues S
Am Ende hat T |V|-1 Kanten ⇒ MST
Petra Mutzel
DAP2 SS08
19
Algorithmus von Prim
b
2
12
c
g
7
11
9
s
d
10
4
2
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
20
Algorithmus von Prim
b
2
12
c
g
7
11
9
s
d
10
4
2
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
21
Algorithmus von Prim
b
2
12
c
g
7
11
9
s
d
10
4
2
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
22
Algorithmus von Prim
b
2
12
c
g
7
11
9
s
d
10
4
2
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
23
Algorithmus von Prim
b
2
12
c
g
7
11
9
s
d
10
4
2
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
24
Algorithmus von Prim
b
2
12
c
g
7
11
9
s
d
10
4
2
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
25
Algorithmus von Prim
b
2
12
c
g
7
11
9
s
d
10
4
2
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
26
Algorithmus von Prim
b
2
12
c
g
7
11
9
s
d
10
4
2
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
27
Algorithmus von Prim
b
2
12
c
g
7
11
9
s
d
10
4
2
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
28
Algorithmus von Prim
b
2
12
c
g
7
11
9
s
d
10
4
2
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
29
Realisierung von Prim
•  Testen auf Kreise (Union-Find Partition)
wie bei Kruskal nicht nötig
•  Kein Sortieren nötig
•  Auswahl leichtester Kante nötig
⇒ Priority Queue
•  Wir speichern nicht die Kanten selbst,
sondern die Knoten v ∈V \ S. Priorität ist
das Gewicht der Kante von S nach v
Petra Mutzel
DAP2 SS08
31
Dazu: ADT Priority Queue
•  Dyn. Verwaltung von Elementmenge mit
Prioritäten
•  Operationen:
–  INSERT(p, v) : Position // Knoten v, Priorität p
–  DELETE(pos)
–  MINIMUM() : Position
–  EXTRACTMIN() : P x V //Rückg: min-Knoten und prio
–  DECREASEPRIORITY(pos, p) // neue Priorität p
•  Bekannt: Binary (Min-)Heap in Array
Petra Mutzel
DAP2 SS08
32
Pseudo-Code: Initialisierung
G=(V, E), float w[E]
// Graph und Gewichte
(1) var π[V], PriorityQueue Q, pos[V] // π Vorgänger in
// MST, pos Pos. in Q
(2) for each u ∈ V \ {s} do {
(3)  pos[u] := Q.INSERT(∞, u)
(4) }
(5) pos[s] := Q.INSERT(0, s)
(6) π[s] := nil
Petra Mutzel
DAP2 SS08
33
Pseudo-Code Prim
(7) while not Q.ISEMPTY() do
(8)
(p, u) := Q.EXTRACTMIN()
(9)
pos[u] := nil
(10)
for all e = (u,v) ∈ E(u) do {
(11)
// gewählten Knoten entfernen
if pos[v] ≠ nil and
(12)
// über alle Knoten
// ausgehende Kanten
// e verlässt S?
w(e) < Q.PRIORITY(pos[v]) then {
// günstiger?
(13)
Q.DECREASEPRIORITY(pos[v], w(e))
(14)
(15)  } } }
π[v] := u
Petra Mutzel
DAP2 SS08
34
Analyse
•  Aufbau des Heaps für PQ: in Θ(|V|)
•  |V| Durchläufe der while-Schleife mit
EXTRACTMIN ⇒ O(|V| log |V|)
•  2 Durchläufe der forall-Schleife für jede Kante
•  max. |E| Aufrufe von DECREASEPRIORITY
⇒ O(|E| log |V|)
Gesamtlaufzeit O(|E| log |V|), da |E|≥|V|-1
Petra Mutzel
DAP2 SS08
35
Warum kann GreedyVerfahren funktionieren?
•  MST besteht aus Teilbäumen, die
ebenfalls MSTs sind
•  Lokal beste Entscheidung (leichteste
Kante) führt zu MST
Petra Mutzel
DAP2 SS08
36
Kap. 6.6 Kürzeste Wege
Petra Mutzel
DAP2 SS08
37
Kürzeste Wege
Achtung: in diesem Abschnitt
gerichtete gewichtete Graphen!
Kürzeste Wege Problem
Gegeben: gerichteter Graph G=(V,A)
Gewichtsfunktion w : A→R
Keine Mehrfachkanten
Gesucht: Der bzgl. Gewicht w kürzeste Weg von
Startknoten zu Zielknoten.
Petra Mutzel
DAP2 SS08
38
Petra Mutzel
DAP2 SS08
39
Anwendungen
Direkte und indirekte (Teilproblem) Anwendungen:
•  Routenplaner (Streckenlänge)
•  Auskunftssysteme für Bus und Bahn (Zeit)
•  Berechnung minimaler Flüsse in Netzwerken
•  DNA Sequenz Analyse
•  …
Petra Mutzel
DAP2 SS08
40
Kürzeste Wege Probleme
• 
• 
• 
• 
Single Source Shortest Path (SSSP)
Single Destination Shortest Path
Single Pair Shortest Path
All Pairs Shortest Path (APSP)
Petra Mutzel
DAP2 SS08
41
Kürzeste Wege
Single Source Shortest Path (SSSP)
•  Bekannt: BFS für ungewichtete kürzeste Wege
(USSSP)
•  Jetzt: Kürzeste Wege mit Kantengewichten:
–  Gerichteter Graph G = (V, A)
–  Kantengewichte w(e) ∈ R (Strecke, Fahrtzeit)
–  Startknoten s
–  Weglänge w(p) :=
für p=v0,e1,…ek,vk
Petra Mutzel
DAP2 SS08
42
Optimale Substruktur
Pfad über v0=s, v1, …, vk kürzester Weg von s
nach vk
⇒ Teilweg vh → vj kürzester Weg von vh nach vj
v0
vh
vj
Petra Mutzel
vk
DAP2 SS08
43
Single Source Shortest Path
Keine negativen Kreise!!
?
-k
-∞
⇒Kürzeste Wege von Knoten s bilden immer
einen Baum
Spezialfall: w(e) ≥ 0 (Strecke, Fahrtzeit)
Petra Mutzel
DAP2 SS08
44
Algorithmus von Dijkstra
Analogien mit BFS und Prim:
•  BFS/Prim läßt einzelnen Baum wachsen: Neue
Kante verbindet Baum mit Rest
•  Dijkstra bildet Kürzeste-Wege Baum (SPT)
ausgehend von Wurzel s, aber andere Auswahl
•  Greedy, Priority Queue
weiter: s. nächste VO
Petra Mutzel
DAP2 SS08
45
Herunterladen