Überblick Grundideen - ALGORITHM ENGINEERING

Werbung
02.07.2009
Überblick
Kap. 6.5: Minimale Spannbäume ff
•  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
20. VO 2. TEIL DAP2 SS 2009 2. Juli 2009
Petra Mutzel
DAP2 SS08
SS09
1
Petra Mutzel
DAP2 SS09
2
Grundideen
•  MST: Algorithmus von Prim
•  Kürzeste Wege in Graphen (s. nächste
Vorlesung): Algorithmus von Dijkstra
Algorithmus von Prim
Beide nutzen ähnliches Konzept:
•  Greedy (gierig, gefräßig) später mehr dazu
•  Priority Queue
•  Lassen einzelnen Baum wachsen
Petra Mutzel
basiert auf:
DAP2 SS09
basiert auf MST Eigenschaft:
4
Petra Mutzel
DAP2 SS09
12
MST Eigenschaft
MST Eigenschaft
Lemma 1 (Wiederholung):
Sei G=(V,E) zshgd. mit Gewichtsfunktion w : E→R.
Seien:
Aussichtsreiche Menge T von Kanten:
Es existiert ein MST, der alle Kanten von T
enthält.
• 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 SS09
13
Petra Mutzel
DAP2 SS09
14
1
02.07.2009
PRIMs Algorithmus: lasse Baum von s aus
MST
wachsen
mitEigenschaft
MST Eigenschaft
Kantenmenge T, aussichtsreich
Kante e verläßt S mit min. Gewicht
Vgl. mit Kruskal:
•  Kruskal läßt Wald wachsen mit Union-Find bis
Spannbaum erzeugt
e
s
Algorithmus von Prim
•  Prim läßt von Startknoten s einen einzelnen
Baum wachsen
Knotenmenge S
MST sind nicht eindeutig!!
s
Dann: T∪e aussichtsreich
Petra Mutzel
DAP2 SS09
15
Petra Mutzel
Algorithmus von Prim
DAP2 SS09
Wähle Startknoten s ∈ V
S := {s}; T := ø
Wähle e = (u, v), e verläßt S mit min. Gewicht
T := T ⋃ {e}: S:= S ⋃ {v}
}
17
Petra Mutzel
DAP2 SS09
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
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 genau |V|-1 Kanten ⇒ MST
DAP2 SS09
// S Unterbaumknoten, T Kanten
while S ≠ V do {
Korrektheit Prim
Petra Mutzel
16
Schema: Algorithmus von Prim
Idee:
•  Verwalte Menge S von Knoten in
Unterbaum,ausgehend von s, T leer
•  Wähle billigste S verlassende Kante
e=(u,v), v ∈ S , e ∈ T
⇒ (Lemma 1) T aussichtsreich
•  Stop, falls S=V ⇒ T bildet MST
Petra Mutzel
DAP2 SS09
b
2
12
c
g
7
11
9
s
2
d
10
4
e
7
4
5
f
i
8
h
1
5
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
19
Petra Mutzel
DAP2 SS09
20
2
02.07.2009
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 SS09
4
2
12
c
f
5
b
h
5
2
12
b
DAP2 SS09
2
12
c
5
f
f
i
8
h
1
Petra Mutzel
b
5
h
DAP2 SS09
5
24
DAP2 SS09
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
23
7
e
22
Algorithmus von Prim
11
9
s
2
d
10
DAP2 SS09
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
21
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
25
Petra Mutzel
DAP2 SS09
26
3
02.07.2009
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
DAP2 SS09
10
4
2
27
12
c
7
4
f
5
h
1
5
h
DAP2 SS09
28
DAP2 SS09
T := T ⋃ {e}: S:= S ⋃ {v}
}
Effiziente Realisierung?
29
Realisierung von Prim
Petra Mutzel
DAP2 SS09
30
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
•  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
DAP2 SS09
// S Unterbaumknoten, T Kanten
Wähle e = (u, v), e verläßt S mit min. Gewicht
5
•  Testen auf Kreise (Union-Find Partition)
wie bei Kruskal nicht nötig
Petra Mutzel
i
8
while S ≠ V do {
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Petra Mutzel
f
5
Petra Mutzel
S := {s}; T := ø
i
8
1
7
4
Wähle Startknoten s ∈ V
g
7
e
c
e
Schema: Algorithmus von Prim
11
9
s
2
d
7
Knotenmenge S, Kantenmenge T:
In Teilbaum Ti
Algorithmus von Prim
b
2
12
g
11
9
s
i
8
1
4
2
d
10
31
Petra Mutzel
DAP2 SS09
32
4
02.07.2009
Pseudo-Code: Initialisierung
G=(V, E), float w[E]
Pseudo-Code Prim
(7) while not Q.ISEMPTY() do
// Graph und Gewichte
// über alle Knoten
(1) var π[V], PriorityQueue Q, pos[V] // π: Vorgänger in MST
// pos: Position in Q
(8)
(p, u) := Q.EXTRACTMIN()
(9)
pos[u] := nil
(2) for each u ∈ V \ {s} do {
(10)
for all e = (u,v) ∈ E(u) do {
(3)  pos[u] := Q.INSERT(∞, u)
(11)
(4) }
(12)
(5) pos[s] := Q.INSERT(0, s)
(13)
Q.DECREASEPRIORITY(pos[v], w(e))
(6) π[s] := nil
(14)
(15)  } } }
π[v] := u
Petra Mutzel
DAP2 SS09
33
// gewählten Knoten entfernen
if pos[v] ≠ nil and
// ausgehende Kanten
// e verlässt S?
w(e) < Q.PRIORITY(pos[v]) then {
Petra Mutzel
// günstiger?
DAP2 SS09
34
Warum kann GreedyVerfahren funktionieren?
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
•  MST besteht aus Teilbäumen, die
ebenfalls MSTs sind
•  Lokal beste Entscheidung (leichteste
Kante) führt zu MST
•  max. |E| Aufrufe von DECREASEPRIORITY
⇒ O(|E| log |V|)
Gesamtlaufzeit O(|E| log |V|), da |E|≥|V|-1
nächste VO: kürzeste Wege Algorithmen
Petra Mutzel
DAP2 SS09
35
Petra Mutzel
DAP2 SS09
36
5
Herunterladen