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<=6 v x+y<=8 2x−y<=8 o better solutions x KIT Institut für Theoretische Informatik 23 Beispiel: Kürzeste Wege maximiere ∑ dv v ∈V so dass ds = 0 dw ≤ dv + c(v , w ) für alle (v , w ) ∈ E KIT Institut für Theoretische Informatik 24 Eine Anwendung Tierfutter I n Futtersorten, Sorte I m i kostet ci Euro/kg. Anforderungen an gesunde Ernährung (Kalorien, Proteine, Vitamin C,. . . ). Sorte i enthält aji Prozent des täglichen Bedarfs pro kg bzgl. Anforderung I Sei aji Vektor die aj . i -te j Komponente von KIT Institut für Theoretische Informatik 25 Eine Anwendung Tierfutter I n Futtersorten, Sorte I m i kostet ci Euro/kg. Anforderungen an gesunde Ernährung (Kalorien, Proteine, Vitamin C,. . . ). Sorte i enthält aji Prozent des täglichen Bedarfs pro kg bzgl. Anforderung I Sei aji Vektor die aj . j i -te Komponente von I Deniere xi als zu beschaende Menge von Sorte i I LP-Lösung gibt eine kostenoptimale gesunde Mischung. KIT Institut für Theoretische Informatik 25 Verfeinerungen I Obere Schranken (Radioaktivität, Cadmium, Kuhhirn, . . . ) I Beschränkte Reserven (z. B. eigenes Heu) I bestimmte abschnittweise lineare Kostenfunktionen (z. B. mit Abstand wachsende Transportkosten) I Minimale Abnahmemengen I die meisten nichtlinearen Kostenfunktionen I Ganzzahlige Mengen (für wenige Tiere) I Garbage in, Garbage out KIT Institut für Theoretische Informatik 26 Algorithmen und Implementierungen I LPs lassen sich in polynomieller Zeit lösen [Khachiyan 1979] I Worst case 7 O max(m, n) 2 I In der Praxis geht das viel schneller I Robuste, eziente Implementierungen sind sehr aufwändig Fertige freie und kommerzielle Pakete KIT Institut für Theoretische Informatik 27 Ganzzahlige Lineare Programmierung ILP: Integer Linear Program, lineares Programm mit der x i ∈ N. xi ∈ {0, 1} zusätzlichen Bedingung oft: 0/1 ILP mit MILP: Mixed Integer Linear Program, lineares Programm bei dem einige Variablen ganzzahlig sein müssen. Lineare Relaxation: Entferne die Ganzzahligkeitsbedingungen eines (M)ILP KIT Institut für Theoretische Informatik 28 Beispiel: Rucksackproblem maximiere derart, dass xi = 1 w · x ≤ M, xi ∈ {0, 1} gdw. Gegenstand i p·x for 1 ≤i ≤n . in den Rucksack kommt. 0/1 Variablen sind typisch für ILPs M 20 10 15 20 5 4 3 2 1 KIT Institut für Theoretische Informatik 29 Umgang mit (M)ILPs − NP-schwer + Ausdrucksstarke Modellierungssprache + Es gibt generische Lösungsansätze, die manchmal gut funktionieren + Viele Möglichkeiten für Näherungslösungen + Die Lösung der linearen Relaxation hilft oft, z. B. einfach runden. + Ausgefeilte Softwarepakete Beispiel: Beim Rucksackproblem gibt es nur eine fraktionale Variable in der linearen Relaxation Abrunden ergibt zulässige Lösung. Annähernd optimal, falls Gewichte und Prote Kapazität KIT Institut für Theoretische Informatik 30