Algorithmen und Datenstrukturen

Ähnliche Dokumente
Algorithmen und Datenstrukturen

Approximationsalgorithmen

Algorithmen und Datenstrukturen

Theoretische Grundlagen der Informatik

Theoretische Informatik. Exkurs: Komplexität von Optimierungsproblemen. Optimierungsprobleme. Optimierungsprobleme. Exkurs Optimierungsprobleme

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Datenstrukturen & Algorithmen

4 Greedy-Algorithmen (gierige Algorithmen)

16. All Pairs Shortest Path (ASPS)

Wintersemester 2004/ Januar Aus der Vorlesung sind Datenstrukturen zur Repräsentation von Wäldern disjunkter Mengen bekannt.

Algorithmen und Datenstrukturen

Algorithmentheorie. 10 Greedy Verfahren

Algorithmische Methoden zur Netzwerkanalyse

Algorithmen und Datenstrukturen

Algorithmen & Komplexität

Kapitel 9: Lineare Programmierung Gliederung

Fortgeschrittene Netzwerk- und Graph-Algorithmen

Graphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47

Dynamische Programmierung. Problemlösungsstrategie der Informatik

2. Entsprechende Listen P i von Vorgängern von i 3. for i := 1 to n do. (ii) S i = Knoten 2 + 1}

Beschriftung in Dynamischen Karten

Informatik II Greedy-Algorithmen

S=[n] Menge von Veranstaltungen J S kompatibel mit maximaler Größe J

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Algorithmen und Komplexität

Greedy Algorithms - Gierige Algorithmen

Effiziente Algorithmen und Datenstrukturen I. Kapitel 10: Lineare Algebra

Visualisierung von Graphen

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

ADS: Algorithmen und Datenstrukturen 2

Theoretische Informatik 1

Grundlagen: Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmen II Vorlesung am

Customization (Zuschneiden)

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

2.6 Asymptotische Approximation: Min Binpacking

Approximationsalgorithmen für NP-harte Optimierungsprobleme

Algorithmen und Datenstrukturen

Kap. 6.6: Kürzeste Wege

Grundlagen: Algorithmen und Datenstrukturen

Beschriftung in Dynamischen Karten

Algorithmen und Datenstrukturen

Algorithmen & Datenstrukturen Midterm Test 2

5. Bäume und Minimalgerüste

NP-vollständige Probleme

Algorithmen und Datenstrukturen

Informatik II Greedy-Algorithmen

Probleme aus NP und die polynomielle Reduktion

Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 2006 Blatt 13

Kapitel 5: Dynamisches Programmieren Gliederung

Grundlagen: Algorithmen und Datenstrukturen

Abschnitt: Algorithmendesign und Laufzeitanalyse

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

11. Übung zu Algorithmen I 6. Juli 2016

Definition Gerichteter Pfad. gerichteter Pfad, wenn. Ein gerichteter Pfad heißt einfach, falls alle u i paarweise verschieden sind.

Überblick. TSP Vergleich der Lösungen. Das Travelling Salesman Problem. Nearest-Neighbor Heuristik für TSP

Kap. 7.1 Heuristiken Kap. 7.2 Approximative Algorithmen und Gütegarantien

Suchen in Texten. Naives Suchen Verfahren von Knuth-Morris-Pratt Verfahren von Boyer-Moore Ähnlichkeitssuchen Editierdistanz

Algorithmen und Datenstrukturen Tutorium Übungsaufgaben

Berechnung minimaler Spannbäume. Beispiel

Berechnung von Abständen

Approximation in Batch and Multiprocessor Scheduling

Algorithmen und Datenstrukturen in der Bioinformatik Erstes Übungsblatt WS 05/06 Musterlösung

Gierige Algorithmen Interval Scheduling

2. Klausur zur Vorlesung Algorithmentechnik Wintersemester 2008/2009

Klausur Algorithmen und Datenstrukturen II 29. Juli 2013

Übung Algorithmen und Datenstrukturen

2 Sortieren durch Vergleichen Eingabefolge a 1, a 2,..., a n 2, 1, 3 Sortieralg. Für festes n ist ein vergleichsbasierter Sortieralg. charakterisiert

5.4 Das Rucksackproblem

Randomisierte Algorithmen 2. Erste Beispiele

Klausur Algorithmen und Datenstrukturen II 10. August 2015

Bereichsabfragen II. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Algorithmische Bioinformatik 1

Einführung in Approximative Algorithmen und Parametrisierte Komplexität

Wenn wir zudem a ii = 1 für 1 i n setzen, dann gilt für A k (boolesches Produkt, A 0 = I) 0 falls es im Graphen keinen Pfad von v i nach v j,

5. Übungsblatt zu Algorithmen I im SoSe 2016

Datenstrukturen und Algorithmen D-INFK

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Rolf Wanka Sommersemester Vorlesung

Algorithmische Methoden zur Netzwerkanalyse Vorlesung 13, Henning Meyerhenke

WS 2015/16 Diskrete Strukturen Kapitel 4: Graphen (Matchings)

durch Einfügen von Knoten konstruiert werden kann.

Typischerweise sind randomisierte Algorithmen einfacher zu beschreiben und zu implementieren als deterministische Algorithmen.

Theoretische Grundlagen der Informatik

Effiziente Algorithmen Übung 2

Algorithmen II Vorlesung am

12.4 Traveling Salesman Problem

Bereichsabfragen II. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Algebraische und arithmetische Algorithmen

Polynomialzeit- Approximationsschema

Sichtbarkeitsgraphen. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

Der Dreyfus-Wagner Algorithmus für das Steiner Baum Problem

Graphen: Datenstrukturen und Algorithmen

Relationen und DAGs, starker Zusammenhang

Kap. 6.5: Minimale Spannbäume

Transkript:

Algorithmen und Datenstrukturen Wintersemester 2012/13 26. Vorlesung Greedy- und Approximationsalgorithmen Prof. Dr. Alexander Wolff Lehrstuhl für Informatik I

Operations Research Optimierung für Wirtschaftsabläufe: Standortplanung Ablaufplanung Flottenmanagement Pack- und Zuschnittprobleme... Werkzeuge: Statistik, Optimierung, Wahrscheinlichkeitstheorie, Spieltheorie, Graphentheorie, mathemathisches Programmieren und Simulation.

Ein einfaches Problem der Ablaufplanung Gegeben: Menge A = {a 1,..., a n } von Aktivitäten, wobei für i = 1,..., n gilt a i = [s i, e i ). 0 1 5 10 15 a i und a j sind kompatibel, wenn a i a j =. Die Aktivitäten in A A sind paarweise kompatibel, wenn für jedes Paar a i, a j A gilt, dass a i und a j kompatibel sind. Gesucht: Grund: eine größtmögliche Menge paarweise kompatibler Aktivitäten. Aktivitäten (à 1e), die gleiche Ressource benutzen

Ein kleiner technischer Trick Wir nummerieren die Aktivitäten so, dass für die Endtermine gilt e 1 e 2 e n. 0 1 5 10 15 a 1 a 2 a 3 a n 1 a n

Dynamisches Programmieren? 1. Struktur einer optimalen Lösung charakterisieren a i e i Sei A ij A die Menge aller Aktivitäten in [e i, s j ), d.h. zwischen a i und a j. Ang. a i und a j sind in einer opt. Lösung L A enthalten, dann ist L A ij eine opt. Lösung für A ij. optimale Substruktur! 2. Wert einer optimalen Lösung rekursiv definieren Sei c ij die Kardinalität einer opt. Lösung für A ij. Dann gilt: c ij = a k max a k A ij c ik + 1 + c kj s j Beweis? a j Austauschargument!

Dynamisches Programmieren? 3. Wert einer optimalen Lösung berechnen Setze e 0 = und s n+1 = +. Dann ist A = A 0,n+1. Berechne c 0,n+1, die Kardinalität einer opt. Lösung für A. (a) top-down (b) bottom-up TopDownDP(int[ ]s, int[ ]e, int i, int j) BottomUpDP(int[ ]s, int[ ]e) liefert c ij Laufzeit? O(n 3 )... liefert c 0,n+1 Siehe Folie Zurück zum dyn. Programmieren 2. Wert einer optimalen Lösung rekursiv definieren Sei c ij die Kardinalität einer opt. Lösung für A ij. Dann gilt: c ij = max a k A ij c ik + 1 + c kj

Darf s auch etwas einfacher sein? Idee: Sei L opt. Lösung für A. Welche Aktivität hat gute Chancen die erste ( linkeste ) in L zu sein? Intuition: Die Aktivität a 1 mit frühester Endzeit weil a 1 die gemeinsame Ressource am wenigsten einschränkt. Sei A k = {a i A : s i e k } die Menge der Aktivitäten, die nach Ablauf von a k beginnen. Satz. Sei A k. optimale Teilstruktur! Beweis. Sei L k eine optimale Lösung von A k. Falls Intuition korrekt, dann ist {a 1 } L 1 optimal. Sei a m Aktivität mit frühester Endzeit in A k. es gibt eine opt. Lösung von A k, die a m enthält. Austauschargument!

Greedy rekursiv GreedyRecursive(int[ ]s, int[ ]e) e 0 = // A 0 = A // Aktivitäten nach Endzeiten sortieren, falls nötig return GreedyRecursiveMain(s, e, 0) GreedyRecursiveMain(int[ ]s, int[ ]e, int k) // best. Lsg. für A k m = k + 1; n = s.length // Finde Aktivität mit kleinster Endzeit in A k while m n and s[m] < e[k] do m = m + 1 if m > n then return else return {a m } GreedyRecursiveMain(s, e, m) a 0 a 1 a n

Greedy rekursiv GreedyRecursive(int[ ]s, int[ ]e) e 0 = // A 0 = A // Aktivitäten nach Endzeiten sortieren, falls nötig return GreedyRecursiveMain(s, e, 0) GreedyRecursiveMain(int[ ]s, int[ ]e, int k) // best. Lsg. für A k m = k + 1; n = s.length // Finde Aktivität mit kleinster Endzeit in A k while m n and s[m] < e[k] do m = m + 1 if m > n then return else return {a m } GreedyRecursiveMain(s, e, m) Laufzeit? Wie oft wird m inkrementiert? Insgesamt, über alle rekursiven Aufrufe, n Mal. D.h. GreedyRecursive läuft (ohne Sortieren) in Θ(n) Zeit.

Greedy iterativ GreedyIterative(int[ ]s, int[ ]e) n = s.length L = {a 1 } k = 1 // höchster Index in L for m = 2 to n do if s[m] e[k] then L = L {a m } k = m return L Laufzeit? GreedyIterative läuft ebenfalls in Θ(n) Zeit. Bemerkung: GreedyIterative berechnet dieselbe optimale Lösung wie GreedyRecursive die linkeste.

Die Greedy-Strategie 1. Teste, ob das Problem optimale Teilstruktur aufweist. 2. Entwickle eine rekursive Lösung 3. Zeige, dass bei einer Greedy-Entscheidung nur ein Teilproblem bleibt 4. Beweise, dass die Greedy-Wahl sicher ist (vgl. Kruskal!) 5. Entwickle einen rekursiven Greedy-Algorithmus 6. Konvertiere den rekursiven in einen iterativen Algorithmus

Food for Thought 1. Welches allgemeinere Ablaufproblem löst das DP aber nicht der GA? 2. Problem größte unabhängige Menge (gum) in Graphen: Was hat gum mit unserem Ablaufplanungsproblem zu tun? Kann man gum mit DP oder GA lösen? Finde eine größte Teilmenge U der Knoten, so dass keine zwei Knoten in U benachbart sind.

Ein ähnliches Problem der Ablaufplanung Gegeben: Menge A = {a 1,..., a n } von halboffenen Intervallen, wobei für i = 1,..., n gilt a i = [s i, e i ). Für die Endpunkte gelte e 1 e 2 e n. a 1 a 2 a 3 a n 1 a n Gesucht: Grund: eine Menge A A paarweise disjunkter Intervalle, deren Gesamtlänge l(a ) maximal ist. Intervalle ˆ= Prozesse, die die gleiche Ressource nutzen; der Gesamtertrag ist proportional zur Auslastung.

Greedy? 1. Versuch: Nimm Aktivität mit frühestem Endtermin, streiche dazu inkompatible Aktivitäten und iteriere. Gegenbsp.: 2. Versuch: Gegenbsp.: Nimm längste Aktivität, streiche dazu inkompatible Aktivitäten und iteriere. 1 1 1 1 + ε Aufgabe: Können Sie den 2. GA in O(n log n) Zeit implementieren? Diskutieren Sie mit Ihrer NachbarIn!

Wie gut/schlecht ist der 2. GA? Betrachte eine optimale Lösung L A. Sei G = {g 1, g 2,..., g k } A die Greedy-Lösung (in dieser Rf.). Für i = 1,..., k sei G i = {a A a g i }\(G 1 G i 1 ) und sei L g 3 3 L i = L G i. G 3 L1 G 1 G 2 g 1 g 2 L 2 Dann gilt A = G 1 G 2 G k und L = L 1 L 2... L k. : GA wählt so lange Intervalle aus, bis es keine mehr gibt. : klar, da G 1 A, G 2 A,..., G k A

Wie gut/schlecht ist der 2. GA? Behauptung: Für i = 1,..., k gilt l(l i ) < 3l(g i ). Beweis. 1 1 1 1 + ε (a) g i ist nach Wahl ein längstes Intervall in G i g i L i (b) jedes a L i schneidet g i (c) Intervalle in L i sind paarweise disjunkt OPT = l(l) = l(g) > OPT/3 k i=1 l(l i) < 3 k i=1 l(g i) = 3l(G) 2. GA liefert immer mind. 1/3 der maximalen Gesamtlänge. Also ist der 2. GA ein Faktor-(1/3)-Approximationsalgorithmus.

Approxi... hä? All exact science is dominated by the idea of approximation. Bertrand Russell (1872 1970) Sei Π ein Maximierungsproblem. Sei ζ die Zielfunktion von Π: Lösung Q 0. Sei γ eine Zahl 1. z.b. Ablaufplanung ζ = l γ = 1/3 Ein Algorithmus A heißt γ-approximation, wenn A für jede Instanz I von Π eine Lösung A(I ) berechnet, so dass ζ(optimale Lösung) ζ(a(i )) OPT(I ) γ die Laufzeit von A polynomiell in I ist. 1/3-Approx. liefert Menge von Aktivitäten, deren Gesamtlänge mindestens 1/3 der maximal möglichen Länge ist. Größe der Instanz I poly(n)

Zurück zum dynamischen Programmieren BottomUpDPWeighted(int[ ]s, int[ ]e) n = s.length c = new int[0..n][1..n + 1] for d = 1 to n 1 do for i = 0 to (n + 1) d do j = i + d if a i und a j kompatibel then c = 0 for k = i + 1 to j 1 do c = c[i][k] + l(a k ) + c[k][ j] if c > c then c = c c[i][ j] = c else c[i][ j] = 0 return c[0, n + 1] // c ij = Wert einer opt. Lsg. für A ij // d = Distanz zwischen j und i NEU! Im ungewichteten Fall stand hier eine Eins. // falls a i a j = c ij = max i<k<j c ik + l(a k ) + c kj Laufzeit? O(n 3 ) Aber warum verzweigen wir hier zweimal?

Dynamisches Programmieren, aber einfacher Für i = 1,..., n sei A i = {a j A e j s i } die Menge aller Intervalle in A, die enden, bevor a i beginnt. (Setze A n+1 = A.) A k A i a k Eine optimale Lösung für A i besteht aus: einem letzten Intervall a k und einer optimalen Lösung für A k. a i optimale Teilstruktur! Also gilt für den Wert c i einer optimalen Lösung für A i : c i = max k<i c k + l(a k )

Dynamisches Programmieren, aber einfacher Also gilt für den Wert c i einer optimalen Lösung für A i : c i = max k<i c k + l(a k ) Erinnern wir uns... c n+1 ist der Wert der optimalen Lösung für A n+1 = A. Also genügt es c 1,..., c n+1 zu berechnen. Laufzeit? O(n 2 ) Work out the details! Resultate: Der 2. Greedy-Alg. findet in O(n log n) Zeit eine Lösung, die mindestens 1/3 des maximalen Ertrags garantiert. Unser neues DP findet in O(n 2 ) Zeit eine Lösung mit maximalem Ertrag. Trade-Off zwischen Zeit und Qualität!