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