6 Folien/Blatt - Chair 11: ALGORITHM ENGINEERING

Werbung
01.07.2008
Überblick
Kap. 6.5: Minimale Spannbäume ff
Kap. 6.6: Kürzeste Wege
•  6.5: Minimale Spannbäume (MST) ff:
-  Algorithmus von Prim
Professor Dr. Petra Mutzel
Karsten Klein
Lehrstuhl für Algorithm Engineering, LS11
Fakultät für Informatik, TU Dortmund
22. VO
DAP2
SS
2008
1. Juli 2008
Petra Mutzel
DAP2 SS08
s. nächste VO
1
Motivation
Petra Mutzel
DAP2 SS08
2
Grundideen
„Warum soll ich heute hier bleiben?“
Verschiedene Probleme mit gleicher Idee gelöst
„Was gibt es heute Besonderes?“
DAP2 SS08
•  MST: Algorithmus von Prim
•  Kürzeste Wege in Graphen: Algorithmus
von Dijkstra
Beide nutzen ähnliches Konzept:
•  Greedy
•  Priority Queue
•  Lassen einzelnen Baum wachsen
Dijkstra oder Wie funktioniert mein Navi?
Petra Mutzel
•  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)
3
Petra Mutzel
DAP2 SS08
4
Greedy-Paradigma
Greedy-Verfahren treffen lokale Entscheidungen
Sie wählen immer die aktuell günstigste Auswahl
Beispiel: Bin Packing:
Greedy-Verfahren
(Greedy = gierig, gefräßig)
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
5
Petra Mutzel
DAP2 SS08
7
1
01.07.2008
Greedy Methode
Wdhlg. Minimaler Spannbaum
•  Beliebig schlecht: TSP (Traveling Salesman
Problem)
•  Gut: Bin Packing (≤ 2x Optimum)
•  Optimal: MST (Minimum Spanning Trees)
•  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)
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
Minimum Spanning Tree (MST)
Gesucht:
8
ein Spannbaum T von G mit
minimalem Gewicht w(T)
Petra Mutzel
basiert auf:
DAP2 SS08
11
MST Eigenschaft
Aussichtsreiche Menge T von Kanten:
Es existiert ein MST,der alle Kanten von T
enthält.
Algorithmus von Prim
basiert auf MST Eigenschaft:
Petra Mutzel
DAP2 SS08
12
Petra Mutzel
13
PRIMs Algorithmus: lasse Baum von s aus
MST
wachsen
mitEigenschaft
MST Eigenschaft
MST Eigenschaft
Lemma 1 (Wiederholung):
Sei G=(V,E) zshgd. mit Gewichtsfunktion w : E→R.
Seien:
Kantenmenge T, aussichtsreich
Kante e verläßt S mit min. Gewicht
• S ⊂ V
• T ⊂ E aussichtsreich und keine Kante aus T
verlässt S
• e∈E Kante mit minimalem Gewicht, die S verlässt
s
Dann ist T ⋃ {e} aussichtsreich.
e
Knotenmenge S
MST sind nicht eindeutig!!
Petra Mutzel
DAP2 SS08
DAP2 SS08
14
Dann: T∪e aussichtsreich
Petra Mutzel
DAP2 SS08
15
2
01.07.2008
Algorithmus von Prim
Schema: Algorithmus von Prim
Vgl. mit Kruskal:
Wähle Startknoten s ∈ V
•  Kruskal läßt Wald wachsen mit Union-Find bis
Spannbaum erzeugt
S := {s}; T := ø
// S Unterbaumknoten, T Kanten
while S ≠ V do {
•  Prim läßt von Startknoten s einen einzelnen
Baum wachsen
Wähle e = (u, v), e verläßt S mit min. Gewicht
T := T ⋃ {e}: S:= S ⋃ {v}
}
s
Petra Mutzel
DAP2 SS08
16
Petra Mutzel
Korrektheit Prim
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
DAP2 SS08
b
2
12
b
2
12
c
5
f
h
i
8
h
1
Petra Mutzel
5
DAP2 SS08
20
5
DAP2 SS08
2
12
c
g
7
11
9
s
i
2
d
10
4
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
f
5
b
8
1
7
4
19
g
7
4
c
e
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
7
e
7
Algorithmus von Prim
11
9
s
2
d
10
g
11
9
s
2
d
10
4
Algorithmus von Prim
4
18
Algorithmus von Prim
Induktion über Kanten e1,…,ek , die zu T hinzugefügt
werden:
Zeige: Ti = {e1,…,ei} aussichtsreich für 0 ≤ i ≤ k
Petra Mutzel
DAP2 SS08
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
21
Petra Mutzel
DAP2 SS08
22
3
01.07.2008
Algorithmus von Prim
b
4
2
12
b
g
7
11
9
s
2
d
10
Algorithmus von Prim
c
e
7
4
f
5
h
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
2
12
DAP2 SS08
4
2
12
c
f
5
b
h
5
2
12
b
DAP2 SS08
2
12
c
5
f
f
i
8
h
1
Petra Mutzel
b
5
h
DAP2 SS08
5
26
DAP2 SS08
c
g
7
11
2
12
2
d
10
9
s
i
8
1
g
7
4
5
4
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
c
g
7
4
2
7
e
25
7
e
24
Algorithmus von Prim
11
9
s
2
d
10
DAP2 SS08
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Algorithmus von Prim
4
5
11
9
s
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
h
1
d
10
4
i
8
1
f
5
i
8
Petra Mutzel
g
7
4
7
4
23
7
e
c
e
Algorithmus von Prim
11
9
s
2
d
10
7
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Algorithmus von Prim
b
g
11
9
s
i
8
1
4
2
d
10
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
27
Petra Mutzel
DAP2 SS08
28
4
01.07.2008
Realisierung von Prim
Algorithmus von Prim
b
4
2
12
g
c
e
7
4
f
5
•  Kein Sortieren nötig
7
11
9
s
2
d
10
•  Testen auf Kreise (Union-Find Partition)
wie bei Kruskal nicht nötig
h
1
•  Auswahl leichtester Kante nötig
⇒ Priority Queue
i
8
5
•  Wir speichern nicht die Kanten selbst,
sondern die Knoten v ∈V \ S. Priorität ist
das Gewicht der Kante von S nach v
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
DAP2 SS08
29
Petra Mutzel
•  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
DAP2 SS08
G=(V, E), float w[E]
(8)
(p, u) := Q.EXTRACTMIN()
(9)
pos[u] := nil
(10)
for all e = (u,v) ∈ E(u) do {
(11)
(2) for each u ∈ V \ {s} do {
(3)  pos[u] := Q.INSERT(∞, u)
(4) }
(5) pos[s] := Q.INSERT(0, s)
(6) π[s] := nil
32
(12)
DAP2 SS08
33
•  Aufbau des Heaps für PQ: in Θ(|V|)
// über alle Knoten
•  |V| Durchläufe der while-Schleife mit
EXTRACTMIN ⇒ O(|V| log |V|)
•  2 Durchläufe der forall-Schleife für jede Kante
// ausgehende Kanten
•  max. |E| Aufrufe von DECREASEPRIORITY
⇒ O(|E| log |V|)
// e verlässt S?
w(e) < Q.PRIORITY(pos[v]) then {
Petra Mutzel
Analyse
// gewählten Knoten entfernen
if pos[v] ≠ nil and
// Graph und Gewichte
(1) var π[V], PriorityQueue Q, pos[V] // π Vorgänger in
// MST, pos Pos. in Q
Pseudo-Code Prim
(7) while not Q.ISEMPTY() do
31
Pseudo-Code: Initialisierung
Dazu: ADT Priority Queue
Petra Mutzel
DAP2 SS08
// günstiger?
(13)
Q.DECREASEPRIORITY(pos[v], w(e))
(14)
(15)  } } }
π[v] := u
Gesamtlaufzeit O(|E| log |V|), da |E|≥|V|-1
Petra Mutzel
DAP2 SS08
34
Petra Mutzel
DAP2 SS08
35
5
01.07.2008
Warum kann GreedyVerfahren funktionieren?
Kap. 6.6 Kürzeste Wege
•  MST besteht aus Teilbäumen, die
ebenfalls MSTs sind
•  Lokal beste Entscheidung (leichteste
Kante) führt zu MST
Petra Mutzel
DAP2 SS08
36
Petra Mutzel
DAP2 SS08
37
38
Petra Mutzel
DAP2 SS08
39
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
Kürzeste Wege Probleme
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
Single Source Shortest Path (SSSP)
Single Destination Shortest Path
Single Pair Shortest Path
All Pairs Shortest Path (APSP)
Petra Mutzel
DAP2 SS08
41
6
01.07.2008
Kürzeste Wege
Optimale Substruktur
Single Source Shortest Path (SSSP)
Pfad über v0=s, v1, …, vk kürzester Weg von s
nach vk
⇒ Teilweg vh → vj kürzester Weg von vh nach vj
•  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
v0
42
vj
Petra Mutzel
vk
DAP2 SS08
43
Algorithmus von Dijkstra
Single Source Shortest Path
Analogien mit BFS und Prim:
•  BFS/Prim läßt einzelnen Baum wachsen: Neue
Kante verbindet Baum mit Rest
Keine negativen Kreise!!
?
-k
vh
•  Dijkstra bildet Kürzeste-Wege Baum (SPT)
ausgehend von Wurzel s, aber andere Auswahl
-∞
•  Greedy, Priority Queue
⇒Kürzeste Wege von Knoten s bilden immer
einen Baum
Spezialfall: w(e) ≥ 0 (Strecke, Fahrtzeit)
Petra Mutzel
DAP2 SS08
weiter: s. nächste VO
44
Petra Mutzel
DAP2 SS08
45
7
Herunterladen