Folien

Werbung
Erinnerung VL 27.06.2016
I Bellman-Ford-Algorithmus (Brute-Force-Suche)
I Varianten des Kürzeste-Wege-Problems (azyklische Graphen)
I Ausblick: Routenplanung in Straÿennetzwerken
I Motivation Minimale Spannbäume (MSTs)
I
Heute:
I
I
Wichtige Eigenschaften von MSTs
MST-Algorithmen: (Jarník-Prim, Kruskal)
KIT Institut für Theoretische Informatik
1
Kap. 11: Minimale Spannbäume
7
a
b
9
6
2
3
c
4
d
KIT Institut für Theoretische Informatik
2
Minimale Spannbäume (MST)
Eingabe:
I ungerichteter (zusammenhängender) Graph
V = {1, . . . , n}
I Knoten
V , n = |V |,
I Kanten
e ∈ E ⊆ V × V , m = |E |
I Kantengewichte
z. B.
G = (V , E ).
c(e) ∈ R+ .
1 5
2
9
7
2
4
3
KIT Institut für Theoretische Informatik
3
Minimale Spannbäume (MST)
Eingabe:
I ungerichteter (zusammenhängender) Graph
V = {1, . . . , n}
I Knoten
V , n = |V |,
I Kanten
e ∈ E ⊆ V × V , m = |E |
I Kantengewichte
z. B.
G = (V , E ).
c(e) ∈ R+ .
1 5
2
9
7
2
4
3
Aufgabe:
Finde Baum
(V , T )
mit minimalem Gewicht
∑e∈T c(e),
der alle Knoten verbindet.
KIT Institut für Theoretische Informatik
3
Minimale aufspannende Wälder (MSF)
Falls
G
nicht zusammenhängend ist,
nde minimalen aufspannenden Wald
Zusammenhangskomponenten von
G
T,
der alle
aufspannt.
MST-Algorithmen lassen sich leicht zu MSF-Algorithmen
verallgemeinern.
KIT Institut für Theoretische Informatik
4
Anwendungen
I Netzwerk-Entwurf
I Bottleneck-Shortest-Paths:
Suche
s t -Pfad,
dessen max.
Kantengewicht minimal ist.
1 5
Dies ist der Pfad im MST!
2
9
7
2
4
3
KIT Institut für Theoretische Informatik
5
Anwendungen
I Netzwerk-Entwurf
I Bottleneck-Shortest-Paths:
Suche
s t -Pfad,
dessen max.
Kantengewicht minimal ist.
1 5
Dies ist der Pfad im MST!
I Clustering: Lass schwere MST-Kanten
weg. Teilbäume denieren Cluster.
Konkret z. B. Bildsegmentierung
I Näherungslösungen für schwere
Probleme, z. B. Handlungsreisenden-,
2
9
7
2
4
3
Steinerbaumproblem.
Siehe Buch, VL G. theoretischer
Informatik, Algorithmen II.
KIT Institut für Theoretische Informatik
5
Anwendungen
I Netzwerk-Entwurf
I Bottleneck-Shortest-Paths:
Suche
s t -Pfad,
dessen max.
Kantengewicht minimal ist.
1 5
Dies ist der Pfad im MST!
I Clustering: Lass schwere MST-Kanten
weg. Teilbäume denieren Cluster.
Konkret z. B. Bildsegmentierung
I Näherungslösungen für schwere
Probleme, z. B. Handlungsreisenden-,
2
9
7
2
4
3
Steinerbaumproblem.
Siehe Buch, VL G. theoretischer
Informatik, Algorithmen II.
I Irrgärten (Beispiel von Wikipedia)
KIT Institut für Theoretische Informatik
5
MST-Kanten auswählen und verwerfen
Die Schnitteigenschaft (Cut Property)
Für beliebige Teilmenge
S ⊂V
betrachte
die Schnittkanten
C = {{u, v } ∈ E : u ∈ S, v ∈ V \ S}
Die leichteste Kante in
C
kann in einem MST verwendet werden.
1 5
9
2
4
2
7
3
KIT Institut für Theoretische Informatik
6
MST-Kanten auswählen und verwerfen
Die Schnitteigenschaft (Cut Property)
Für beliebige Teilmenge
S ⊂V
betrachte
die Schnittkanten
e
C = {{u, v } ∈ E : u ∈ S, v ∈ V \ S}
Die leichteste Kante in
C
kann in einem MST ver-
S
wendet werden.
Beweis: Betrachte MST T 0 .
Fall e ∈ T 0 : Beweis fertig.
Sonst: T 0 ∪ {e} enthält Kreis K .
(u,v) V\S
e
Betrachte eine Kante
{u, v } ∈ (C ∩ K ) \ {e}.
0
Dann ist T = T \ {{u, v }} ∪ {e}
ein
Spannbaum, der nicht schwerer ist.
Denn:
S (u,v) V\S
c(e) ≤ c({u, v })
KIT Institut für Theoretische Informatik
6
MST-Kanten auswählen und verwerfen
Die Kreiseigenschaft (Cycle Property)
Die schwerste Kante auf einem Kreis wird nicht für einen MST benötigt.
1 5
2
9
7
2
4
3
KIT Institut für Theoretische Informatik
7
MST-Kanten auswählen und verwerfen
Die Kreiseigenschaft (Cycle Property)
Die schwerste Kante auf einem Kreis wird nicht für einen MST benötigt.
Beweis.
Angenommen, MST
T0
benutzt die schwerste Kante
0
Dann ex. e ∈ C \ T , so dass
0
(Es gilt c(e) ≤ c(e ).)
T=
e0
auf Kreis
C.
T 0 \ {e 0 } ∪ {e} auch ein MST ist.
1 5
2
9
7
2
4
3
KIT Institut für Theoretische Informatik
7
Der Jarník-Prim-Algorithmus
[Jarník 1930, Prim 1957]
a
Idee:
6
c
Lasse einen Baum wachsen
T := 0/
S:= {s} for arbitrary start node s
repeat n − 1 times
nd (u, v ) fullling the cut property
S:= S ∪ {v }
T := T ∪ {(u, v )}
a
for
S
6
c
a
6
c
7
b
9
2
3
d
4
7
b
9
2
3 d
4
7
b
9
2
3 d
4
KIT Institut für Theoretische Informatik
8
Function
of Edge
// weitgehend analog zu Dijkstra
s ∈V
d = {∞, . . . , ∞}; parent[s]:= s ; d[s] := 0; Q .insert(s)
while Q 6= 0/ do
u := Q .deleteMin
d[u]:= 0
T u
// scan u
S
foreach edge e = (u, v ) ∈ E do
if c(e) < d[v ] then
// relax
d[v ]:= c(e)
parent[v ] := u
// update tree
if v ∈ Q then Q .decreaseKey(v )
T u v
else Q .insert(v )
e
S
return {(v , parent[v ]) : v ∈ V \ {s}}
jpMST : Set
pick any
I
d[u] = 0 ⇔ u ∈ S
I
⇒
am Ende jeder while-Iteration: endliches d[v ] > 0 speichert
Gewicht der leichtesten Kante von v ∈/ S über den Schnitt
KIT Institut für Theoretische Informatik
9
Analyse
Praktisch identisch zu Dijkstra
I
O(m + n)
I
n×
I
O(m) ×
Zeit ausserhalb der PQ
deleteMin (Zeit
O(n log n))
decreaseKey
O((m + n) log n)
O(m + n log n)
mit binären Heaps
mit Fibonacci Heaps
Wichtigster Unterschied: monotone PQs reichen nicht
Warum?
KIT Institut für Theoretische Informatik
10
Kruskals Algorithmus [1956]
// subforest of the MST
foreach (u, v ) ∈ E in ascending order of weight do
if u and v are in different subtrees of (V , T ) then
T := T ∪ {(u, v )}
// Join two subtrees
return T
T := 0/
a
7
9
6
c 3
4
b
2
d
7
b
9
2
6
c 3 d
4
a
7
b
9
2
6
c 3 d
4
a
7
b
9
2
6
c 3 d
4
a
KIT Institut für Theoretische Informatik
11
Kruskals Algorithmus Korrektheit
// subforest of the MST
foreach (u, v ) ∈ E in ascending order of weight do
if u and v are in different subtrees of (V , T ) then
T := T ∪ {(u, v )}
// Join two subtrees
return T
T := 0/
Fall u, v in verschiedenen Teilbäumen:
=⇒ (u, v ) ist leichteste
=⇒ (u, v ) ∈ MST
Kante im cut(Komponente(u), V
Sonst:
=⇒ (u, v ) ist schwerste
=⇒ (u, v ) 6∈ MST
benutze Schnitteigenschaft
\ Komponente(u))
benutze Kreiseigenschaft
Kante im Kreis
hu, v , v u -Pfad
in
Ti
KIT Institut für Theoretische Informatik
12
Union-Find Datenstruktur
=⇒
Wir brauchen eine eziente Methode für
Verbindet die Kante verschiedene Teilbäume?
KIT Institut für Theoretische Informatik
13
Union-Find Datenstruktur
=⇒
Wir brauchen eine eziente Methode für
Verbindet die Kante verschiedene Teilbäume?
Verwalte Partition der Menge 1..n,
d. h., Mengen (Blöcke)
M1 ,. . . ,Mk
mit
M1 ∪ · · · ∪ Mk = 1..n,
∀i 6= j : Mi ∩ Mj = 0/
Class UnionFind(n : N)
Procedure union(i, j : 1..n)
join the blocks containing
i
and
j
to a single block.
Function nd(i : 1..n) : 1..n
return a unique identier
for the block containing
i.
KIT Institut für Theoretische Informatik
13
Union-Find Datenstruktur Erste Version
KIT Institut für Theoretische Informatik
14
Union-Find Datenstruktur Erste Version
KIT Institut für Theoretische Informatik
14
Union-Find Datenstruktur Erste Version
Analyse
+:
union braucht konstante Zeit
−:
nd braucht Zeit
Θ(n)
im schlechtesten Fall!
Zu langsam!
Idee:
nd-Pfade kurz halten
i parent[i]
..
KIT Institut für Theoretische Informatik
15
Pfadkompression
Class
UnionFind(n
: N)
parent=h1, 2, . . . , ni : Array [1..n] of 1..n
Function nd(i : 1..n) : 1..n
if parent[i] = i then return i
else i 0 := nd(parent[i ])
parent[i]
return i 0
:= i 0
...
1 2
n
i’
// ..
.
parent[i]
i
KIT Institut für Theoretische Informatik
16
Union by Rank
Class
UnionFind(n
: N)
parent=h1, 2, . . . , ni : Array [1..n] of 1..n
rank=h0, . . . , 0i
...
1 2
: Array [1..n] of 0.. log n
n
Procedure link(i, j : 1..n)
assert i and j are representatives of different blocks
if rank[i] < rank[j] then parent[i] := j
i2
3
i
2
else
parent[j]
:= i
if rank[i] = rank[j] then
rank[i]++
2
j
i
j
i
3
3
KIT Institut für Theoretische Informatik
j
j
17
Analyse nur Union by rank
invariant Der Pfad zum Repr. x hat Länge höchstens rank[x]
invariant x ist Repr. ⇒ x 's Menge hat Gröÿe mindestens 2rank[x]
Korollar:
nd braucht Zeit
O(log n)
i2
3
i
2
2
j
i
j
i
3
3
j
j
KIT Institut für Theoretische Informatik
18
Analyse nur Pfadkompression
Satz: nd braucht
Beweis: im Buch
Zeit
O(log n)
(amortisiert)
KIT Institut für Theoretische Informatik
19
Analyse Pfadkompression + Union by rank
Satz: m× nd + n× link
brauchen Zeit
O(mαT (m, n))
mit
αT (m, n) = min {i ≥ 1 : A(i, dm/ne) ≥ log n}
und
A(1, j) = 2j
for
j ≥ 1,
A(i, 1) = A(i − 1, 2)
for
i ≥ 2,
and
j ≥ 2.
A(i, j) = A(i − 1, A(i, j − 1))
Beweis:
for
i ≥2
[Tarjan 1975, Seidel Sharir 2005]
A ist die Ackermannfunktion und αT die inverse Ackermannfunktion.
αT (m, n) = ω(1) aber ≤ 5 für alle physikalisch denkbaren n, m.
KIT Institut für Theoretische Informatik
20
Ackermannfunktion Beispiele
A(1, j) = 2j
for
j ≥ 1,
A(i, 1) = A(i − 1, 2)
for
i ≥ 2,
and
j ≥ 2.
A(i, j) = A(i − 1, A(i, j − 1))
A(2, 1) = A(1, 2) =
for
i ≥2
2
2
A(2, 2) = A(1, A(2, 1)) =
A(2, 3) = A(1, A(2, 2)) =
A(2, 4) = A(1, A(2, 3)) =
2
22
2
2
22
22
2
22
22
A(3, 1) = A(2, 2) =
2
A(3, 2) = A(2, A(3, 1)) = A(2, 16) =
???
A(4, 1) = A(3, 2) =
???
KIT Institut für Theoretische Informatik
21
Kruskal mit Union-Find
Sei
V = 1..n
: UnionFind(n)
// encodes components of forest T
foreach (u, v ) ∈ E in ascending order of weight do
// sort
if Tc.nd(u) 6= Tc.nd(v ) then
Tc
{u, v }
Tc.union(u, v )
output
Zeit
O(m log m).
//
link
reicht auch
Schneller für ganzzahlige Gewichte.
Graphrepräsentation: Kantenliste
Bäume im MSF
↔
Blöcke in Partition
→
Wurzelbäume,
aber mit anderer Struktur als die Bäume im MSF!
KIT Institut für Theoretische Informatik
22
Beispiel
7 2
9
2
3
6
3
4
4
7 2
9
2
3
6
3
4
4
7 2
9
2
3
6
3
4
4
7 2
9
2
3
6
3
4
4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
0 0 0 1
1 0 0 1
1 0 0 2
1 0 0 2
1
link
1
link
1
link
1
compress
KIT Institut für Theoretische Informatik
23
Vergleich Jarník-Prim ↔ Kruskal
Pro Jarník-Prim
I Asymptotisch gut für alle
I Sehr schnell für
m, n
mn
Pro Kruskal
I Gut für
m = O(n)
I Braucht nur Kantenliste
I Protiert von schnellen Sortierern (ganzzahlig, parallel,. . . )
I Verfeinerungen auch gut für groÿe
m/n
KIT Institut für Theoretische Informatik
24
Mehr MST-Algorithmen
I Zeit
O(m log n)
[Boruvka 1926]
Zutat vieler fortgeschrittener Algorithmen
I Erwartete Zeit
O(m)
[Karger Klein Tarjan 1995],
parallelisierbar, externalisierbar
I Det. Zeit
O(mαT (m, n))
I optimaler det. Algorithmus
[Chazelle 2000]
[Pettie, Ramachandran 2000]
I Invented at ITI:
Praktikabler externer Algorithmus
[Sanders Schultes Sibeyn 2004]
Verbesserung von Kruskal (parallelisierbar, weniger Sortieraufwand).
[Osipov Sanders Singler 2009]
KIT Institut für Theoretische Informatik
25
Zusammenfassung
I Schnitt- und Kreiseigenschaft als Basis für abstrakte Algorithmen.
Entwurfsprinzip: benutze abstrakte Problemeigenschaften.
I Beweise mittels Austauschargumenten
I Implementierung braucht eziente Datenstrukturen.
Auch ein Entwurfsprinzip. . .
KIT Institut für Theoretische Informatik
26
Zusammenfassung
I Schnitt- und Kreiseigenschaft als Basis für abstrakte Algorithmen.
Entwurfsprinzip: benutze abstrakte Problemeigenschaften.
I Beweise mittels Austauschargumenten
I Implementierung braucht eziente Datenstrukturen.
Auch ein Entwurfsprinzip. . .
I Dijkstra
≈
JP.
Noch ein Entwurfsprinzip:
Greedy-Algorithmus ezient implementiert mittels Prioritätsliste
I Union-Find: eziente Verwaltung von Partitionen mittels
Pfadkompression und Union-by-rank.
Beispiel für einfache Algorithmen mit nichttrivialer Analyse
KIT Institut für Theoretische Informatik
26
Herunterladen