Hallo Welt für Fortgeschrittene Gierige Algorithmen Sarah Nuißl Informatik 2 Programmiersysteme Martensstraße 3 91058 Erlangen
Gliederung Einführung Gierige Algorithmen vs. Dynamisches Programmieren Beispiele TopCoder Probleme Quellenangabe Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 2
Einführung Ansätze für Optimierungsprobleme Gehen Schrittweise durch ein Problem, und treffen bei jedem Schritt eine Auswahl Verwendung von Gierigen Algorithmen Lösung einiger Optimierungsprobleme Methode Zerlegung in mehrere Teilprobleme (Subprobleme) Finden des Lokalen Optimums Was ist jetzt die beste Lösung? Teilprobleme zur Gesamtlösung zusammensetzen Hoffen, dass dies ein globales Optimum ist Wenn nötig, beweisen! Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 3
Einführung Wann kann man ein Problem gierig lösen? 2 Eigenschaften wichtig: Optimale Substructure Wenn Problem optimal gelöst beinhaltet Teilproblem optimal gelöst Greedy choice property Teilproblem lösen ohne Beachtung der Zukunft (andere Subprobleme) Problem optimal gelöst Problem optimal gelöst Optimal Substructure Greedy choice property Teilproblem optimal gelöst Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 4
Einführung Vorteile Schnell Mit passender Vorsortierung meist O(n log n) Kein zusätzlicher Speicherbedarf nötig (vgl. DP) Oft intuitiv lösbar Nachteile Nicht alle lokalen Optima führen zu einer korrekten globalen Lösung Beweis der Korrektheit nötig (oft schwierig) Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 5
Gierige Algorithmen vs. Dynamisches Programmieren GA Schrittweise abarbeiten Schneller Lokales Optimum Intuitiver Ansatz Kein zusätzlicher Speicherbedarf DP Teilprobleme lösen, Zwischenergebnisse nutzen oft langsamer Globales Optimum Viele Überlegung notwendig oft viel zu viel Aufwand und Speicherbedarf ICPC Ziel: Finden des globalen Optimums Probleme mit lokales Optimum globales Optimum Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 6
Gierige Algorithmen vs. Dynamisches Programmieren Gieriger Ansatz: Teilproblem lösen, dann nächstes Teilproblem lösen Wahl des lokalen Optimums treffen, bevor andere Subprobleme gelöst werden Top-down Ansatz Eine gierige Wahl nach der anderen Jedes Problem wird zu einem kleineren reduziert DP-Ansatz: Aufteilung in Unterprobleme Lösen dieser inkl. Zwischenspeicherung alle Kombinationen ausprobieren Beste Lösung aussuchen Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 7
Fractional vs. 0/1 Knapsack Szenario: Diebe in einer Bank wollen Beute einpacken Beute hat Gewicht und Geldwert Diebe sind alt und können nur ein bestimmtes Gewicht tragen 2 Varianten: Fractional Knapsack: Bruchteile der Gegenstände wählbar 0/1 Knapsack: nur ganze Gegenstände wählbar Aufgabenstellung Wie kann man einen Maximalwert an Ausbeute machen, ohne dabei das Maximalgewicht zu überschreiten? Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 8
Fractional Knapsack Lösungsansatz Tabelle mit Verhältnis /kg aufstellen nach höchstem Verhältnis sortieren mit höchstem Verhältnis beginnend einpacken passt es nicht ganz rein Bruchteil nehmen 1kg 7kg 8kg 300 1400 8000 15kg Fassungsvermögen 1. Beispiel für gierigen Algorithmus Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 9
Fractional Knapsack Scheine Beutel Goldnuggets Gewicht und Wert 1kg auf 300 7kg auf 1400 8kg auf 800 Verhältnis 300 /kg 200 /kg 100 /kg 15kg Fassungsvermögen Geld Gewicht = 1*300 1 +1*1400 +7 +(7/8)*800 +(7/8)*8 = 2400 = 15kg Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 10
0/1 Knapsack Problem: ganz oder gar nicht Scheine Beutel Goldnuggets Gewicht und Wert 1kg auf 300 7kg auf 1400 8kg auf 800 15kg Verhältnis 300 /kg 200 /kg 100 /kg Greedy: = 1*300+1*1400 = 1700 DP: = 1*1400 + 1*800 = 2200 Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 11
Münzwechsel Szenario: Kassiererin an der Kasse soll Geld zurückgeben Gegeben: Währung: 1c, 2c, 5c, 10c, 20c, 50c, 1, 2, 5, 10 Rückgabebetrag Aufgabe So wenig Scheine und Münzen wie möglich herausgeben Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 12
Münzwechsel Lösungsansatz (gierig) 1. Wähle größtmögliche Münze/Schein 2. Füge diese der Endlösung hinzu und ziehe diese Münze vom Restbetrag ab 3. if (Restbetrag Münzwert) GOTO 2 4. if (Restbetrag 0) GOTO 1 Beispiel: 3,22 Restbetrag: 3,22 1,22 0,22 0,02 0,00 Auswahl: Beweis ob Münzsystem korrekt aufgebaut ist, ist schwierig. Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 13
Münzwechsel Gierig immer möglich? Leider nicht. Gegenbeispiel 1 U.S. Briefmarken: 1, 10, 21, 34, 70, 100, 350, 1225, 1500 GA: 140 = 100 + 34 + 1 + 1 + 1 + 1 + 1 + 1 Optimal/DP: 140 = 70 + 70 Gegenbeispiel 2 Fiktive Währung: 1Krone, 7Kronen, 10Kronen GA: 15 Kronen = 10 + 1 + 1 + 1 + 1 + 1 Optimal/DP: 15 Kronen = 7 + 7 + 1 GA kann auch keine Lösung finden. greedy Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 14
LKW-Fahrerproblem Szenario: Auf dem Weg zum ICPC mit einer Horde ungeduldiger Informatiker Gegeben: Route Reichweite mit vollem Tank Liste der Tankstellen auf der Route Aufgabe Minimale Anzahl an Tankstops Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 15
LKW-Fahrerproblem Gieriger Ansatz solange Ziel nicht erreicht Tanke bei der am weitesten entfernt liegenden Tankstelle, welche noch erreicht werden kann Wenn Liste der Tankstellen bereits sortiert: Aufwand O(n) Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 16
Datensicherung auf Band Szenario Die Sicherungsdateien einer Firma werden alle auf Band gespeichert. Leider ist das System noch so veraltet, dass wir nur durch vorwärts- und rückwärtsspulen an die Dateien kommen. Gegeben n Dateien Array mit der Länge jeder Datei: L[1 n] Datei i hat die Länge L[i] Aufgabe Der Chef möchte einen minimalen Aufwand für das lesen der Dateien vom Band haben Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 17
Datensicherung auf Band Frage: Nach welcher Methode sollte man die Dateien auf Band speichern um ein bestmögliches Ergebnis zu bekommen? Annahme: Speicherung von 1 bis n Kosten Zugriff auf k-te Datei Grund: vorher muss durch alle anderen Dateien gespult werden Annahme: Zugriff auf alle Dateien gleich wahrscheinlich Erwartete Kosten Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 18
Datensicherung auf Band Aus Änderung der Sortierung folgt Änderung der Kosten Lesen einiger Dateien wird teurer und dafür andere günstiger π(i) ist Index einer Datei, gespeichert an der Stelle i Kosten Permutation π: Frage: Welche Sortierung bringt minimale Kosten? Antwort: Sortierung nach aufsteigender Größe Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 19
Datensicherung auf Band Lemma: Beweis: Annahme für ein beliebiges i: L[π(i)] > L [π(i+1)] a = π(i) und b = π(i+1) Datei a und b vertauschen Kosten um auf a zuzugreifen erhöht sich um L[b] Kosten um auf b zuzugreifen reduzieren sich um L[a] Gesamtveränderung: (L[b]-L[a])/n Verbesserung, da L[b] < L[a] Vertauschung von ungeordneten benachbarten Paaren bringt eine Verbesserung der Kosten Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 20
Datensicherung auf Band Minimierung der totalen erwarteten Kosten Günstigste Datei an den Anfang und dann rekursiv alle anderen schreiben lassen Einfach die beste lokale Wahl treffen Kein DP oder Backtracking nötig Mit gutem Sortieralgorithmus ist der Aufwand O(n log n) + die Zeit zum Schreiben der Dateien Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 21
Datensicherung auf Band mit Zugriffshäufigkeiten Annahme: Dateigröße L[i] gleich groß für alle i Nutzung der Dateien unterschiedlich oft Array F[1..n] mit Zugriffshäufigkeiten für jede Datei auf Datei i wird genau F[i]-mal zugegriffen Gesamtkosten um auf alle Dateien zuzugreifen Welche Sortierung ist nötig um die Kosten zu minimieren? Vom Häufigsten zum Seltensten Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 22
Datensicherung auf Band mit Zugriffshäufigkeiten Annahme: Dateigröße und Nutzung unterschiedlich Frage: Welche Sortierung? Antwort: Nach Quotient L/F sortieren Lemma: Beweis: Annahme: L[π(i)]/F[π(i)] > L [π(i+1)]/f[π(i+1)] a = π(i) und b = π(i+1) Datei a und b vertauschen Kosten um auf a zuzugreifen erhöht sich um L[b] Kosten um auf b zuzugreifen reduzieren sich um L[a] Gesamtveränderung: L[b]F[a]-L[a]F[b] Verbesserung, da Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 23
Scheduling Probleme (1) Problem: Urlaubsplanung mit zu vielen Aktivitäten, die sich überschneiden. Man möchte aber soviele Aktivitäten machen, wie möglich ist. Frage: Wie finde ich das Maximum an Aktivitäten? Vorschläge Sortieren nach Frühester Startzeit Frühester Endzeit Kürzeste Dauer Wenigsten Konflikten Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 24
Scheduling Probleme (1) Problem: Urlaubsplanung mit zu vielen Aktivitäten, die sich überschneiden. Man möchte aber soviele Aktivitäten machen, wie möglich ist. Frage: Wie finde ich das Maximum an Aktivitäten? Vorschläge Sortieren nach Frühester Startzeit Frühester Endzeit Kürzeste Dauer Wenigsten Konflikten Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 25
Scheduling Probleme (1) Problem: Urlaubsplanung mit zu vielen Aktivitäten, die sich überschneiden. Man möchte aber soviele Aktivitäten machen, wie möglich ist. Frage: Wie finde ich das Maximum an Aktivitäten? Vorschläge Sortieren nach Frühester Startzeit Frühester Endzeit Kürzeste Dauer Wenigsten Konflikten Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 26
Scheduling Probleme (1) Problem: Urlaubsplanung mit zu vielen Aktivitäten, die sich überschneiden. Man möchte aber soviele Aktivitäten machen, wie möglich ist. Frage: Wie finde ich das Maximum an Aktivitäten? Vorschläge Sortieren nach Frühester Startzeit Frühester Endzeit Kürzeste Dauer Wenigsten Konflikten Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 27
Scheduling Probleme (1) Problem: Urlaubsplanung mit zu vielen Aktivitäten, die sich überschneiden. Man möchte aber soviele Aktivitäten machen, wie möglich ist. Frage: Wie finde ich das Maximum an Aktivitäten? Vorschläge Sortieren nach Frühester Startzeit Frühester Endzeit Kürzeste Dauer Wenigsten Konflikten Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 28
Scheduling Probleme (1) Pseudocode: 1. Sortiere nach aufsteigenden Endzeitpunkten 2. Wähle einen Termin nach dem anderen, wenn er kompatibel ist mit dem bereits ausgewählten 3. GOTO 2 bis Listenende erreicht ist Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 29
Scheduling Probleme (1) Beispiel in Bildern Unsortiert und dann nach Endzeit sortiert Warum richtiger Ansatz? Frühestes Ende: lässt am meisten Platz übrig für andere Aktivitäten a1 auswählen Nächstes Subproblem: Aktivität finden, die nach a1 startet und frühest möglich endet Nicht immer Beweis nötig Beweisskizze/Intuition hilft a1 a1 Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 30
Scheduling Probleme (2) Problem: Schulstunden in unterschiedlichen Räumen müssen geplant werden. Gegeben: Start- und Endzeitpunkt der Stunde Jede Stunde muss in einem Raum sein Zwei Schulstunden können nicht gleichzeitig im gleichen Raum stattfinden Gesucht: Minimale Anzahl an Räumen, damit alle Schulstunden stattfinden können Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 31
Scheduling Probleme (2) Vorschläge Sortieren nach Frühester Endzeit Kürzeste Dauer Wenigsten Konflikten Frühester Startzeit Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 32
Scheduling Probleme (2) Pseudocode: 1. Sortiere nach aufsteigenden Startpunkt 2. if(schulstunde kompatibel mit einem Raum) buche Schulstunde für diesen Raum else: reserviere neuen Raum und buche Schulstunde 3. GOTO 2 bis Listenende erreicht ist Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 33
Scheduling Problem (3) Minimize Lateness Gegeben: Liste von Jobs; hier a-f Dauer für jeden Job Frist der Jobs Gesucht: Scheduling-Strategie, bei der die maximale Fristüberschreitung minimal gehalten wird Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 34
Scheduling Problem (3) Minimize Lateness Lösung: Sortierung nach aufsteigendem Fristende Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 35
TopCoder Problem (1) - GoldMine Problem: Der Chef mehrerer Goldminen möchte den größten Profit aus den Mine schlagen Alle Minenarbeiter sollen so auf die Minen aufgeteilt werden, dass der Gesamtprofit maximiert wird. Gegeben Für jede Mine max. 6 Minenarbeiter Tabelle mit dem absoluten Profit für zwei Minen, je nach Anzahl der Arbeiter: 0 Arbeiter 1 Arbeiter 2 Arbeiter 3 Arbeiter 4 Arbeiter 5 Arbeiter 6 Arbeiter Mine 1 Mine 2 0 57 87 87 67 47 27 0 52 66 75 75 66 48 Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 36
TopCoder Problem (1) - GoldMine Vorgehen: Herausfinden, wie viel ein Arbeiter in einer Mine an Mehrwert bringt Differenz aus Gewinn auf der Mine mit dem Arbeiter und ohne Mine 1 Mine 2 Start Arbeiter 1 Arbeiter 2 Arbeiter 3 Arbeiter 4 Arbeiter 5 Arbeiter 6-57 Mit nur 1 Arbeiter Optimale Wahl: zur Mine schicken wo er am meisten Profit bringt Mehr als 1 Arbeiter 87-57= 30 87-87= 0 87-67= -20 Frage: Bringt Optimale Wahl für 1 Arbeiter den besten globalen Profit? Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 37 67-47= -20 47-27= -20-52 14 9 0-9 -20
TopCoder Problem (1) - GoldMine Beispiel: 4 verfügbare Arbeiter Tabelle mit Profit den jeder einzelne Arbeiter bringt Start Arbeiter 1 Arbeiter 2 Arbeiter 3 Arbeiter 4 Arbeiter 5 Arbeiter 6 Mine 1-57 30 0-20 -20-20 Mine 2-52 14 9 0-9 -20 Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 38
TopCoder Problem (1) - GoldMine Beispiel: 4 verfügbare Arbeiter Tabelle mit Profit den jeder einzelne Arbeiter bringt Start Arbeiter 1 Arbeiter 2 Arbeiter 3 Arbeiter 4 Arbeiter 5 Arbeiter 6 Mine 1-57 30 0-20 -20-20 Mine 2-52 14 9 0-9 -20 Arbeiter 1 in Mine 1 Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 39
TopCoder Problem (1) - GoldMine Beispiel: 4 verfügbare Arbeiter Tabelle mit Profit den jeder einzelne Arbeiter bringt Start Arbeiter 1 Arbeiter 2 Arbeiter 3 Arbeiter 4 Arbeiter 5 Arbeiter 6 Mine 1-57 30 0-20 -20-20 Mine 2-52 14 9 0-9 -20 Arbeiter 1 in Mine 1 Arbeiter 2 in Mine 2 Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 40
TopCoder Problem (1) - GoldMine Beispiel: 4 verfügbare Arbeiter Tabelle mit Profit den jeder einzelne Arbeiter bringt Start Arbeiter 1 Arbeiter 2 Arbeiter 3 Arbeiter 4 Arbeiter 5 Arbeiter 6 Mine 1-57 30 0-20 -20-20 Mine 2-52 14 9 0-9 -20 Arbeiter 1 in Mine 1 Arbeiter 2 in Mine 2 Arbeiter 3 in Mine 1 Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 41
TopCoder Problem (1) - GoldMine Beispiel: 4 verfügbare Arbeiter Tabelle mit Profit den jeder einzelne Arbeiter bringt Start Arbeiter 1 Arbeiter 2 Arbeiter 3 Arbeiter 4 Arbeiter 5 Arbeiter 6 Mine 1-57 30 0-20 -20-20 Mine 2-52 14 9 0-9 -20 Arbeiter 1 in Mine 1 Arbeiter 2 in Mine 2 Arbeiter 3 in Mine 1 Arbeiter 4 in Mine 2 Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 42
TopCoder Problem (2) - JingleRingle Aufgabenstellung: 2 Währungen in einem Onlinegame: Jingles und Ringles Spieler können diese untereinander tauschen Jeder Handel beinhaltet folgendes: Allg: Abmachung zwischen 2 Spielern einem Verkäufer, der 1 Jingle verkaufen möchte & ein Käufer der für einen Preis von X (integer) Ringles diesen kaufen möchte Ablauf 1. Käufer zahlt X Ringles an den Verkäufer 2. Verkäufer zahlt 1 Jingle an den Käufer 3. Verkäufer muss eine Gebühr von ((X*tax)/100) an die Bank zahlen Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 43
TopCoder Problem (2) - JingleRingle Aufgabe Man hat viele Ringles aber keine Jingles Man möchte Handel betreiben um Profit zu machen Angebote von potentiellen Käufern: Int[] buyoffers Jedes Element repräsentiert ein Angebot eines Spielers Angebote von Verkäufern: Int[] selloffers Jedes Element repräsentiert den Betrag den ein Verkäufer will Frage: Wie bekommt man das Maximum an Profit? Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 44
TopCoder Problem (2) - JingleRingle Angebote in Paaren akzeptieren: 1 Jingle kaufen, dann verkaufen Reihenfolge irrelevant Relevant: welche und wie viele Paare wählen? Gieriger Ansatz: In jedem Schritt Aus den bisher nicht angenommenen Angeboten: Akzeptiere Verkaufsangebot s i mit niedrigstem Preis und das Ankaufsangebot b j mit höchsten Preis bis b j s i floor(b j *tax/100) annähernd Null ist oder es keine weiteren Angebote gibt Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 45
TopCoder Problem (2) - JingleRingle #include <vector> #include <cmath> #include <algorithm> using namespace std; int f(int b, int t) { return b-b*t/100; } class JingleRingle { public: int profit (vector<int> b, vector<int> s, int t) { int ans=0; sort (b.begin(), b.end()); reverse (b.begin(), b.end()); sort (s.begin(), s.end()); int i; for (i=0; i<b.size() && i<s.size(); ++i) { if (f(b[i],t)-s[i]>0) ans+=f(b[i],t)-s[i]; } return ans; } }; Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 46
TopCoder Problem (3) - FuzzyLife Aufgabenstellung: Das Game of Life ist ein Simulationsspiel, in dem man von einer Startpunkt aus dessen Evolution über die Zeit beobachten kann. Infinites 2-dim. Gitter aus Zellen Jede Zelle ist entweder Tod oder Lebendig Jede Zelle hat 8 Nachbarn (2 horizontal, 2 vertikal, 4 diagonal) Wenn die Anfangsbelegung des Gitters bekannt ist, beginnt die Veränderung wie folgt Jede lebende Zelle mit weniger als 2 oder mehr als 3 lebenden Nachbarn stirbt Jede tote Zelle mit genau 3 lebenden Nachbarn wird lebendig Alle anderen Zellen bleiben wie sie sind Alle Veränderungen erfolgen gleichzeitig Berechnungen werden vorher gemacht Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 47
TopCoder Problem (3) - FuzzyLife Gegeben: Anfangsbelegung des rechteckigen Gitters: String[] grid 3 Typen möglich: lebend 1 (one), tod 0 (zero), unbekannt -? j-ter char des i-ten Elements beschreibt die Zelle in Zeile i und Spalte j Keine Zelle hat mehr als einen Nachbarn vom Typ? Alle Zellen außerhalb von grid zählen als tod Aufgabe: Ersetze die unbekannten Zellen so, dass nach einem Schritt die Anzahl an lebenden Zellen maximiert wird Gebe diesen Wert zurück Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 48
TopCoder Problem (3) - FuzzyLife Gieriger Ansatz Jede Zelle mit? genau betrachten Direkte Umgebung von? ansehen Entscheidung treffen 0 1 1 0 1 1 0 0 1 0 0 1 3 lebende Zellen 0 1 1 0 1 0 0 0 0 0 0? 1 1 0 0 1 0 1 1 0 1 1 1 0 0 0 1 1 1 0 1 0 1 0 5 lebende Zellen Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 49
TopCoder Problem (3) - FuzzyLife? 1 1? 0 1 1 0 1 0 0 1? 1 1? 0 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 1 0 0 0 1 In beiden Fällen führt die 1 zu mehr lebenden Zellen. 1 1 0 1 1 1 0 1 1 Clou: die Zellen außerhalb des Gitter können auch lebendig werden Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 50
TopCoder Problem (3) - FuzzyLife Ergebnis: 12 lebende Zellen? 1 1? 0 1 1 0 1 0 0 1? 1 1? 1 1 1 1 0 1 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 1 1 0 0 0 1 1 0 0 Warum sind die Entscheidungen unabhängig? alles wird in einem Schritt berechnet nur direkte Nachbarn sind relevant? auf lebend oder tod setzen ist für alle anderen Zellen erst im nächsten Schritt relevant Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 51
The E.N.D. The point is, ladies and gentleman, greed is good. Greed works, greed is right. Greed clarifies, cuts through, and captures the essence of the evolutionary spirit. Greed in all its forms, greed for life, money, love, knowledge has marked the upward surge in mankind. And greed mark my words will save not only Teldar Paper but the other malfunctioning corporation called the USA. Gordon Gekko [Michael Douglas], Wall Street (1987) There is always an easy solution to every human problem neat, plausible, and wrong. H. L. Mencken, The Divine Afflatus, New York Evening Mail (November 16, 1917) Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 52
Quellenangabe 01 Introduction to Algorithms, T. H. Cormen, C. E. Leiserson, R. L. Rivest und C. Stein 02 http://www.cs.princeton.edu/courses/archive/spring13/cos423/lectures/04greedyalgorithmsi -2x2.pdf 03 http://apps.topcoder.com/forums/?module=thread&threadid=698567&start=0&mc=2 JingleRingle: http://community.topcoder.com/stat?c=problem_statement&pm=10896 FuzzyLife: http://community.topcoder.com/stat?c=problem_statement&pm=10911 04 http://web.engr.illinois.edu/~jeffe/teaching/algorithms/notes/07-greedy.pdf 05 Seminarvortrag 2010 von Daniel Danner 06 Seminarvortrag 2014 von Alexander Dietsch 07 Topcoder: http://www.topcoder.com/tc?module=static&d1=tutorials&d2=greedyalg 08 http://www.cis.upenn.edu/~matuszek/cit594-2007/lectures/39-greedy.ppt Bilder US Briefmarken: 02 LKW-Fahrer-Problem: 05 Scheduling-Problem (1&2): 02 Scheduling-Problem (3): 05 Gierige Algorithmen Sarah Nuißl 27.05.2015 Folie 53