Erinnerung VL 29.06.2016
I Wichtige Eigenschaften von MSTs (Schnitt-/Kreiseigenschaft) I Jarník-Prim-Algorithmus für MSTs I Idee Kruskal-Algorithmus I
Heute: I Union-Find-Datenstruktur (für Kruskals Algorithmus) I
Ackermann-Funktion (in der Analyse)
I Neues Kapitel: Optimierung
KIT Institut für Theoretische Informatik
1
Kruskals Algorithmus // 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
2
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
3
Union-Find Datenstruktur =⇒
Wir brauchen eine eziente Methode für
Verbindet die Kante verschiedene Teilbäume?
KIT Institut für Theoretische Informatik
4
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
4
Union-Find Datenstruktur Erste Version
KIT Institut für Theoretische Informatik
5
Union-Find Datenstruktur Erste Version
KIT Institut für Theoretische Informatik
5
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
6
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
7
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
8
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
9
Analyse nur Pfadkompression
Satz: nd braucht Beweis: im Buch
Zeit
O(log n)
(amortisiert)
KIT Institut für Theoretische Informatik
10
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
11
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
12
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
13
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
14
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
15
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
16
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
17
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
17
Kap. 12: Generische Optimierungsansätze
I Black-Box-Löser I Greedy I Dynamische Programmierung
I Systematische Suche I Lokale Suche I Evolutionäre Algorithmen
KIT Institut für Theoretische Informatik
18
Durchgehendes Beispiel: Rucksackproblem
M
20 15
10 I
n
Gegenstände mit Gewicht
I Wähle eine Teilmenge dass
∑i∈x wi ≤ M
x
wi ∈ N
20 und Prot
5 4 3 2 1
pi
von Gegenständen derart,
und
I maximiere den Prot
∑i∈x pi
KIT Institut für Theoretische Informatik
19
Allgemein: Maximierungsproblem (L , f )
I
L ⊆U:
I
f :L →R
I
x∗ ∈ L
zulässige Lösungen Zielfunktion
ist optimale Lösung falls
f (x∗ ) ≥ f (x)
für alle
x∈L
Minimierungsprobleme: analog Problem: variantenreich, meist NP-schwer
KIT Institut für Theoretische Informatik
20
Black-Box-Löser
I (Ganzzahlige) Lineare Programmierung I Aussagenlogik I Constraint-Programming
≈
Verallgemeinerung von beidem
KIT Institut für Theoretische Informatik
21
Lineare Programmierung
Ein lineares Programm mit
n
Variablen und
m
Constraints (NB) wird
durch das folgende Minimierungs-/Maximierungsproblem deniert:
I Kostenfunktion
c
I
m
f (x) = c · x
ist der Kostenvektor Constraints der Form
ai · x ./i bi
mit
./i ∈ {≤, ≥, =}, ai ∈ Rn .
Wir erhalten:
L = {x ∈ Rn : ∀j ∈ 1..n : xj ≥ 0 ∧ ∀i ∈ 1..m : ai · x ./i bi } .
KIT Institut für Theoretische Informatik
22
Ein einfaches Beispiel
y
feasible solutions y