Gierige Algorithmen Seminar Hallo Welt! für Fortgeschrittene Jennifer Naumann 11.Juni 2013 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 1 / 44
Übersicht 1 Einführung Definition Wann darf man gierige Algorithmen anwenden? Abgrenzung zu dynamischer Programmierung 2 Beispiele Fractional Knapsack Scheduling-Probleme Münzwechselproblem Topcoder-Probleme 3 Zusammenfassung Jennifer Naumann Gierige Algorithmen 11.Juni 2013 2 / 44
Bekannte gierige Algorithmen Diese Algorithmen solltet ihr schon einmal gesehen haben: Algorithmus von Prim Algorithmus von Kruskal Algorithmus von Dijkstra Jennifer Naumann Gierige Algorithmen 11.Juni 2013 3 / 44
Übersicht 1 Einführung Definition Wann darf man gierige Algorithmen anwenden? Abgrenzung zu dynamischer Programmierung 2 Beispiele Fractional Knapsack Scheduling-Probleme Münzwechselproblem Topcoder-Probleme 3 Zusammenfassung Jennifer Naumann Gierige Algorithmen 11.Juni 2013 4 / 44
Definition Gieriger Algorithmus (greedy algorithm) Ein Algorithmus ist gierig, wenn er den Folgezustand auswählt, der zum Zeitpunkt der Wahl das beste Ergebnis verspricht. Er wird verwendet, um Optimierungsprobleme zu lösen. Aber: Nicht jedes Optimierungsproblem ist gierig lösbar! Auch Probleme, die gierig lösbar sind, führen nicht unbedingt zum globalen Optimum Jennifer Naumann Gierige Algorithmen 11.Juni 2013 5 / 44
Übersicht 1 Einführung Definition Wann darf man gierige Algorithmen anwenden? Abgrenzung zu dynamischer Programmierung 2 Beispiele Fractional Knapsack Scheduling-Probleme Münzwechselproblem Topcoder-Probleme 3 Zusammenfassung Jennifer Naumann Gierige Algorithmen 11.Juni 2013 6 / 44
Wichtige Eigenschaften Gierige-Wahl-Eigenschaft Globales Optimum kann schrittweise durch die Wahl eines lokalen Optimums erreicht werden Durch die gierige Wahl entstehen nicht mehrere Teilprobleme, sondern ein einziges, kleineres Teilproblem Iterative Implementierung möglich Durch Vorbereiten der Eingabedaten (z.b. Sortieren) kann effiziente Auswahl ermöglicht werden (meist O(n)) Optimale Substruktur Optimale Lösung des Gesamtproblems setzt sich aus optimalen Lösungen der Teilprobleme zusammen Jennifer Naumann Gierige Algorithmen 11.Juni 2013 7 / 44
Übersicht 1 Einführung Definition Wann darf man gierige Algorithmen anwenden? Abgrenzung zu dynamischer Programmierung 2 Beispiele Fractional Knapsack Scheduling-Probleme Münzwechselproblem Topcoder-Probleme 3 Zusammenfassung Jennifer Naumann Gierige Algorithmen 11.Juni 2013 8 / 44
Abgrenzung zu dynamischer Programmierung Dynamische Programmierung findet globales Optimum meist höhere Laufzeit erfordert komplexe Überlegungen benötigt zusätzlichen Speicherplatz Lösung der Teilprobleme vor der Wahl eines nächsten Schrittes Gierige Algorithmen findet lokales Optimum meist schneller (O(n log n)) Lösung oft intuitiv wenig zusätzlicher Speicherbedarf Wahl des nächsten Schrittes bevor Teilprobleme gelöst werden Jennifer Naumann Gierige Algorithmen 11.Juni 2013 9 / 44
Übersicht 1 Einführung Definition Wann darf man gierige Algorithmen anwenden? Abgrenzung zu dynamischer Programmierung 2 Beispiele Fractional Knapsack Scheduling-Probleme Münzwechselproblem Topcoder-Probleme 3 Zusammenfassung Jennifer Naumann Gierige Algorithmen 11.Juni 2013 10 / 44
Gegeben Fractional Knapsack Rucksack mit Angabe, wie schwer sein Inhalt maximal sein darf Mehrere Gegenstände, die in den Rucksack gepackt werden sollen; jeweils mit Gewicht und Wert Gesucht Gegenstände mit maximalen Gesamtwert, die in den Rucksack passen ohne das Maximalgewicht zu überschreiten Jennifer Naumann Gierige Algorithmen 11.Juni 2013 11 / 44
Fractional Knapsack - Algorithmus Annahme: Gegenstände sind teilbar! Gieriger Algorithmus 1 Sortiere alle Gegenstände absteigend nach Wert pro Gewicht 2 Lege Gegenstände so lange in den Rucksack, bis ein Gegenstand nicht mehr hineinpasst 3 Teile diesen Gegenstand so auf, dass ein Teilstück genau in den Rucksack passt 4 Gebe die Menge der eingepackten Teile zurück Laufzeit: O(n log n) (Ohne Sortierung: O(n)) Jennifer Naumann Gierige Algorithmen 11.Juni 2013 12 / 44
Fractional Knapsack - Beispiel Beispiel: 50kg 25kg 10kg 30kg 20kg 75$ 60$ 150$ 80$ 0$ Rucksack Jennifer Naumann Gierige Algorithmen 11.Juni 2013 13 / 44
Fractional Knapsack - Beispiel 1. Sortiere alle Gegenstände absteigend nach Wert/Gewicht 50kg 10kg 30kg 20kg 25kg 60$ 150$ 80$ 75$ 0$ 6 $ kg 5 $ kg 4 $ kg 3 $ kg Jennifer Naumann Gierige Algorithmen 11.Juni 2013 13 / 44
Fractional Knapsack - Beispiel 2. Lege Gegenstände so lange in den Rucksack, bis ein Gegenstand nicht mehr hineinpasst 40kg 30kg 20kg 25kg 10kg 150$ 80$ 75$ 60$ 5 $ kg 4 $ kg 3 $ kg Jennifer Naumann Gierige Algorithmen 11.Juni 2013 13 / 44
Fractional Knapsack - Beispiel 2. Lege Gegenstände so lange in den Rucksack, bis ein Gegenstand nicht mehr hineinpasst 10 30 20 25 10 80$ 75$ 60$ + 150$ 4 $ kg 3 $ kg Jennifer Naumann Gierige Algorithmen 11.Juni 2013 13 / 44
Fractional Knapsack - Beispiel 3. Teile diesen Gegenstand so auf, dass ein Teilstück genau in den Rucksack passt 20 2 30 25 20 2 10 80 2 $ 75$ 60$ + 150$ + 40$ = 250$ Jennifer Naumann Gierige Algorithmen 11.Juni 2013 13 / 44
Fractional Knapsack Warum nicht mit unteilbaren Gegenständen? Mit gierigem Algorithmus kann hier nicht immer der optimale Wert gefunden werden Beispiel von gerade eben: 10 20 210$ 30 statt 230$ 30 10 muss also für ein optimales Ergebnis mit DP gelöst werden Jennifer Naumann Gierige Algorithmen 11.Juni 2013 14 / 44
Übersicht 1 Einführung Definition Wann darf man gierige Algorithmen anwenden? Abgrenzung zu dynamischer Programmierung 2 Beispiele Fractional Knapsack Scheduling-Probleme Münzwechselproblem Topcoder-Probleme 3 Zusammenfassung Jennifer Naumann Gierige Algorithmen 11.Juni 2013 15 / 44
Scheduling-Probleme Prinzip Erzeugen eines optimalen Ablaufplans aus mehreren, sich zeitlich überschneidenden Aktivitäten vorgestellte Verfahren Intervall Scheduling Scheduling mit Fristen Offline Caching Jennifer Naumann Gierige Algorithmen 11.Juni 2013 16 / 44
Allgemeines Intervall Scheduling Gegeben ist eine Menge von Aufgaben Jede Aufgabe hat einen Start- und einen Endzeitpunkt Aufgaben sind miteinander kompatibel, wenn sie nicht überlappen Ziel: Auffinden einer möglichst großen Teilmenge von miteinander kompatiblen Aufgaben a b c d e f g -1 0 1 2 3 4 5 6 7 8 9 10 11 t Jennifer Naumann Gierige Algorithmen 11.Juni 2013 17 / 44
Intervall Scheduling Wonach soll sortiert werden? nach Startzeitpunkt? Jennifer Naumann Gierige Algorithmen 11.Juni 2013 18 / 44
Intervall Scheduling Wonach soll sortiert werden? nach Startzeitpunkt? nach Kürze der Intervalle? Jennifer Naumann Gierige Algorithmen 11.Juni 2013 18 / 44
Intervall Scheduling Wonach soll sortiert werden? nach Startzeitpunkt? nach Kürze der Intervalle? nach den wenigsten Konflikten? Jennifer Naumann Gierige Algorithmen 11.Juni 2013 18 / 44
Intervall Scheduling Wonach soll sortiert werden? nach Startzeitpunkt? nach Kürze der Intervalle? nach den wenigsten Konflikten? nach Endzeitpunkt? Jennifer Naumann Gierige Algorithmen 11.Juni 2013 18 / 44
Intervall Scheduling Wonach soll sortiert werden? nach Startzeitpunkt? nach Kürze der Intervalle? nach den wenigsten Konflikten? nach Endzeitpunkt? - Ja! Jennifer Naumann Gierige Algorithmen 11.Juni 2013 18 / 44
Intervall Scheduling - Algorithmus Gieriger Algorithmus 1 Sortiere die Aufgaben aufsteigend nach Endzeitpunkt 2 Führe Folgendes für alle Aufgaben der Reihe nach aus: 3 Wenn die aktuelle Aufgabe mit der Ergebnismenge kompatibel ist, füge sie zur Ergebnismenge hinzu 4 Gebe die Ergebnismenge (= die optimale Lösung) zurück Laufzeit: O(n log n) (Ohne Sortierung: O(n)) Jennifer Naumann Gierige Algorithmen 11.Juni 2013 19 / 44
Intervall Scheduling - Beispiel a b c d e f g -1 0 1 2 3 4 5 6 7 8 9 10 11 t Jennifer Naumann Gierige Algorithmen 11.Juni 2013 20 / 44
Intervall Scheduling - Beispiel 1. Sortiere die Aufgaben aufsteigend nach Endzeitpunkt b a c e d f g -1 0 1 2 3 4 5 6 7 8 9 10 11 t Jennifer Naumann Gierige Algorithmen 11.Juni 2013 20 / 44
Intervall Scheduling - Beispiel 2. Nimm die aktuelle Aufgabe b a c e d f g -1 0 1 2 3 4 5 6 7 8 9 10 11 t Jennifer Naumann Gierige Algorithmen 11.Juni 2013 20 / 44
Intervall Scheduling - Beispiel 3. Ist die aktuelle Aufgabe mit der Ergebnismenge kompatibel, füge sie der Ergebnismenge hinzu b a c e d f g -1 0 1 2 3 4 5 6 7 8 9 10 11 t Jennifer Naumann Gierige Algorithmen 11.Juni 2013 20 / 44
Intervall Scheduling - Beispiel 3. Ist die aktuelle Aufgabe mit der Ergebnismenge kompatibel, füge sie der Ergebnismenge hinzu b a c e d f g -1 0 1 2 3 4 5 6 7 8 9 10 11 t Jennifer Naumann Gierige Algorithmen 11.Juni 2013 20 / 44
Intervall Scheduling - Beispiel 3. Ist die aktuelle Aufgabe mit der Ergebnismenge kompatibel, füge sie der Ergebnismenge hinzu b a c e d f g -1 0 1 2 3 4 5 6 7 8 9 10 11 t Jennifer Naumann Gierige Algorithmen 11.Juni 2013 20 / 44
Scheduling mit Fristen Gegeben n Aufträge, die jeweils in genau einer Zeiteinheit erledigt werden können Jeder Auftrag hat einen Schlusstermin und eine Strafe (für den Fall, dass Frist nicht eingehalten wird) Gesucht Ablaufplan für alle gegebenen Aufträge finden, der die maximale Fristüberschreitung möglichst gering hält Jennifer Naumann Gierige Algorithmen 11.Juni 2013 21 / 44
Scheduling nach Fristen - Algorithmus Algorithmus 1 Sortiere alle Aufträge absteigend nach Strafe 2 Wiederhole, solange es noch Aufträge gibt: 1 Nimm den ersten Auftrag 2 Kann dieser Auftrag noch vor Ablauf der Frist erledigt werden? Ja: Schiebe den Auftrag in die leere Zeitscheibe, mit der die Frist gerade so eingehalten werden kann Nein: Schiebe den Auftrag in die letzte leere Zeitscheibe 3 Gib die fertige Tabelle zurück Laufzeit: O(n log n) Jennifer Naumann Gierige Algorithmen 11.Juni 2013 22 / 44
Scheduling mit Fristen - Beispiel Auftrag a b c d e f Frist 4 2 1 3 1 1 Strafe 50 60 30 10 20 40 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 23 / 44
Aufträge, absteigend nach Strafe sortiert: Aufgabe b a f c e d Frist 2 4 1 1 1 2 Strafe 60 50 40 30 20 10 Gesuchter Ablaufplan: Zeiteinheit 0 1 2 3 4 5 Auftrag Frist Strafe Jennifer Naumann Gierige Algorithmen 11.Juni 2013 24 / 44
Aufträge, absteigend nach Strafe sortiert: Aufgabe b a f c e d Frist 2 4 1 1 1 2 Strafe 60 50 40 30 20 10 Gesuchter Ablaufplan: Zeiteinheit 0 1 2 3 4 5 Auftrag b Frist 2 Strafe 0 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 24 / 44
Aufträge, absteigend nach Strafe sortiert: Aufgabe b a f c e d Frist 2 4 1 1 1 2 Strafe 60 50 40 30 20 10 Gesuchter Ablaufplan: Zeiteinheit 0 1 2 3 4 5 Auftrag b a Frist 2 4 Strafe 0 0 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 24 / 44
Aufträge, absteigend nach Strafe sortiert: Aufgabe b a f c e d Frist 2 4 1 1 1 2 Strafe 60 50 40 30 20 10 Gesuchter Ablaufplan: Zeiteinheit 0 1 2 3 4 5 Auftrag f b a Frist 1 2 4 Strafe 0 0 0 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 24 / 44
Aufträge, absteigend nach Strafe sortiert: Aufgabe b a f c e d Frist 2 4 1 1 1 2 Strafe 60 50 40 30 20 10 Gesuchter Ablaufplan: Zeiteinheit 0 1 2 3 4 5 Auftrag c f b a Frist 1 1 2 4 Strafe 0 0 0 0 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 24 / 44
Aufträge, absteigend nach Strafe sortiert: Aufgabe b a f c e d Frist 2 4 1 1 1 2 Strafe 60 50 40 30 20 10 Gesuchter Ablaufplan: Zeiteinheit 0 1 2 3 4 5 Auftrag c f b a e Frist 1 1 2 4 1 Strafe 0 0 0 0 20 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 24 / 44
Aufträge, absteigend nach Strafe sortiert: Aufgabe b a f c e d Frist 2 4 1 1 1 2 Strafe 60 50 40 30 20 10 Gesuchter Ablaufplan: Zeiteinheit 0 1 2 3 4 5 Auftrag c f b d a e Frist 1 1 2 2 4 1 Strafe 0 0 0 10 0 20 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 24 / 44
Aufträge, absteigend nach Strafe sortiert: Aufgabe b a f c e d Frist 2 4 1 1 1 2 Strafe 60 50 40 30 20 10 Gesuchter Ablaufplan: Zeiteinheit 0 1 2 3 4 5 Auftrag c f b d a e Frist 1 1 2 2 4 1 Strafe 0 0 0 10 0 20 Strafe: 10 + 20 = 30 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 24 / 44
Offline Caching Gegeben Cache, der maximal k Einträge speichern kann Sequenz von Objekten Wenn sich das Objekt schon im Cache befindet, wird es von dort geladen (Cache Hit) Wenn es sich noch nicht im Cache befindet, muss es in den Cache geladen werden und dabei eventuell andere Objekte verdrängen (Cache Miss) Gesucht Ablaufplan, der Cache-Misses auf ein Minimum reduziert Jennifer Naumann Gierige Algorithmen 11.Juni 2013 25 / 44
Offline Caching Lösung Farthest-in-future = Verdränge den Eintrag, dessen nächster Zugriff am Weitesten in der Zukunft liegt Vorsicht Hier nur Betrachtung der Offline -Version, bei der die Sequenz von Objekten schon vorher bekannt ist In der Praxis eher schlecht umsetzbar, weil die zukünftigen Einträge nicht bekannt sind Jennifer Naumann Gierige Algorithmen 11.Juni 2013 26 / 44
Beispiel: Cache, der maximal 2 Einträge speichern kann Künftige Zugriffe: a, b, c, b, c, a, b a b aktueller Cache Jennifer Naumann Gierige Algorithmen 11.Juni 2013 27 / 44
Beispiel: Cache, der maximal 2 Einträge speichern kann Künftige Zugriffe: b, c, b, c, a, b a b aktueller Cache Jennifer Naumann Gierige Algorithmen 11.Juni 2013 27 / 44
Beispiel: Cache, der maximal 2 Einträge speichern kann Künftige Zugriffe: c, b, c, a, b a b aktueller Cache Jennifer Naumann Gierige Algorithmen 11.Juni 2013 27 / 44
Beispiel: Cache, der maximal 2 Einträge speichern kann Künftige Zugriffe: b, c, a, b c b aktueller Cache Jennifer Naumann Gierige Algorithmen 11.Juni 2013 27 / 44
Beispiel: Cache, der maximal 2 Einträge speichern kann Künftige Zugriffe: c, a, b c b aktueller Cache Jennifer Naumann Gierige Algorithmen 11.Juni 2013 27 / 44
Beispiel: Cache, der maximal 2 Einträge speichern kann Künftige Zugriffe: a, b c b aktueller Cache Jennifer Naumann Gierige Algorithmen 11.Juni 2013 27 / 44
Beispiel: Cache, der maximal 2 Einträge speichern kann Künftige Zugriffe: b a b aktueller Cache Jennifer Naumann Gierige Algorithmen 11.Juni 2013 27 / 44
Beispiel: Cache, der maximal 2 Einträge speichern kann Künftige Zugriffe: a b aktueller Cache Jennifer Naumann Gierige Algorithmen 11.Juni 2013 27 / 44
Übersicht 1 Einführung Definition Wann darf man gierige Algorithmen anwenden? Abgrenzung zu dynamischer Programmierung 2 Beispiele Fractional Knapsack Scheduling-Probleme Münzwechselproblem Topcoder-Probleme 3 Zusammenfassung Jennifer Naumann Gierige Algorithmen 11.Juni 2013 28 / 44
Mu nzwechselproblem Gegeben Verschiedene Mu nzen: zum Beispiel 2 Euro, 1 Euro, 50 cent, 20 cent, 10 cent, 5 cent, 2 cent, 1 cent Betrag, der herausgegeben werden soll Gesucht Zusammenstellung von Mu nzen, deren Summe der angegebene Betrag ist und deren Anzahl minimal ist Jennifer Naumann Gierige Algorithmen 11.Juni 2013 29 / 44
Mu nzwechselproblem - Algorithmus Gieriger Algorithmus 1 n := gegebener Betrag 2 Sortiere die Mu nzen absteigend nach ihrem Wert Solange n > 0: 3 Nimm die Mu nze mit dem ho chsten Betrag, der in n passt und fu ge sie der Lo sungsmenge hinzu Ziehe den Wert der Mu nze von n ab 4 Gib die Lo sungsmenge zuru ck Beispiel: gegebener Betrag: 78ct, Restbetrag: 78ct Jennifer Naumann Gierige Algorithmen 11.Juni 2013 30 / 44
Mu nzwechselproblem - Algorithmus Gieriger Algorithmus 1 n := gegebener Betrag 2 Sortiere die Mu nzen absteigend nach ihrem Wert Solange n > 0: 3 Nimm die Mu nze mit dem ho chsten Betrag, der in n passt und fu ge sie der Lo sungsmenge hinzu Ziehe den Wert der Mu nze von n ab 4 Gib die Lo sungsmenge zuru ck Beispiel: gegebener Betrag: 78ct, Restbetrag: 28ct Jennifer Naumann Gierige Algorithmen 11.Juni 2013 30 / 44
Mu nzwechselproblem - Algorithmus Gieriger Algorithmus 1 n := gegebener Betrag 2 Sortiere die Mu nzen absteigend nach ihrem Wert Solange n > 0: 3 Nimm die Mu nze mit dem ho chsten Betrag, der in n passt und fu ge sie der Lo sungsmenge hinzu Ziehe den Wert der Mu nze von n ab 4 Gib die Lo sungsmenge zuru ck Beispiel: gegebener Betrag: 78ct, Restbetrag: 8ct Jennifer Naumann Gierige Algorithmen 11.Juni 2013 30 / 44
Mu nzwechselproblem - Algorithmus Gieriger Algorithmus 1 n := gegebener Betrag 2 Sortiere die Mu nzen absteigend nach ihrem Wert Solange n > 0: 3 Nimm die Mu nze mit dem ho chsten Betrag, der in n passt und fu ge sie der Lo sungsmenge hinzu Ziehe den Wert der Mu nze von n ab 4 Gib die Lo sungsmenge zuru ck Beispiel: gegebener Betrag: 78ct, Restbetrag: 3ct Jennifer Naumann Gierige Algorithmen 11.Juni 2013 30 / 44
Mu nzwechselproblem - Algorithmus Gieriger Algorithmus 1 n := gegebener Betrag 2 Sortiere die Mu nzen absteigend nach ihrem Wert Solange n > 0: 3 Nimm die Mu nze mit dem ho chsten Betrag, der in n passt und fu ge sie der Lo sungsmenge hinzu Ziehe den Wert der Mu nze von n ab 4 Gib die Lo sungsmenge zuru ck Beispiel: gegebener Betrag: 78ct, Restbetrag: 1ct Jennifer Naumann Gierige Algorithmen 11.Juni 2013 30 / 44
Mu nzwechselproblem - Algorithmus Gieriger Algorithmus 1 n := gegebener Betrag 2 Sortiere die Mu nzen absteigend nach ihrem Wert Solange n > 0: 3 Nimm die Mu nze mit dem ho chsten Betrag, der in n passt und fu ge sie der Lo sungsmenge hinzu Ziehe den Wert der Mu nze von n ab 4 Gib die Lo sungsmenge zuru ck Beispiel: gegebener Betrag: 78ct, Restbetrag: 0ct Jennifer Naumann Gierige Algorithmen 11.Juni 2013 30 / 44
Beispiel Münzwechselproblem - immer greedy? Problem: bei bestimmten Zusammenstellungen von Münzwerten wird mit diesem Algorithmus nicht die optimale Lösung geliefert Münzen mit den Werten 11, 5 und 1 Ziel: Wert 15 Mit Greedy: 11 1 1 1 1 Aber optimale Lösung wäre: 5 5 5 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 31 / 44
Übersicht 1 Einführung Definition Wann darf man gierige Algorithmen anwenden? Abgrenzung zu dynamischer Programmierung 2 Beispiele Fractional Knapsack Scheduling-Probleme Münzwechselproblem Topcoder-Probleme 3 Zusammenfassung Jennifer Naumann Gierige Algorithmen 11.Juni 2013 32 / 44
JingleRingle Aufgabenstellung In einem Online-Spiel gibt es zwei Währungen: jingles und ringles Diese kann man folgendermaßen untereinander austauschen: 1. Der Käufer zahlt dem Verkäufer n ringles 2. Der Verkäufer gibt ihm dafür 1 jingle 3. Der Verkäufer zahlt eine bestimmte Steuer Man besitzt keine jingles, dafür aber beliebig viele ringles Ziel: so viel Gewinn an ringles wie möglich machen Jennifer Naumann Gierige Algorithmen 11.Juni 2013 33 / 44
JingleRingle - Lösungsansatz Allgemeines Gegeben: Angebote für den Kauf von jingles Angebote für den Verkauf von ringles Höhe der Steuer Ziel: maximaler Gewinn an ringles Gieriger Algorithmus 1 Sortiere Kaufangebotsliste absteigend 2 Sortiere Verkaufsangebotsliste aufsteigend 3 for i=0 to min{k.length, V.length} do falls (K[i] tax) > V [i] : Gewinn + = K[i] tax V [i] 4 Gib den Gewinn zurück Jennifer Naumann Gierige Algorithmen 11.Juni 2013 34 / 44
JingleRingle Beispiel Input Kauf jingles {100, 541, 243, 601} Verkauf ringles {603, 142, 25, 338} Steuer 10% Jennifer Naumann Gierige Algorithmen 11.Juni 2013 35 / 44
JingleRingle Beispiel Input Kauf jingles {100, 541, 243, 601} Verkauf ringles {603, 142, 25, 338} Steuer 10% Sortiert rev(sort(kauf jingles)) 601 541 243 100 sort(verkauf ringles) 25 142 338 603 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 35 / 44
JingleRingle Beispiel Input Kauf jingles {100, 541, 243, 601} Verkauf ringles {603, 142, 25, 338} Steuer 10% Sortiert rev(sort(kauf jingles)) 601 541 243 100 sort(verkauf ringles) 25 142 338 603 gewinn - steuer 516 345-119 -513 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 35 / 44
EllysPairs Aufgabenstellung Es sollen für ein Projekt an der Uni Zweiergruppen gebildet werden Gegeben ist ein int-array, das angibt, wie viel der jeweilige Student im Verhältnis weiß und kann Ziel: Bildung von Gruppen, die ungefähr den gleichen Wissensstand haben Jennifer Naumann Gierige Algorithmen 11.Juni 2013 36 / 44
EllysPairs - Lösungsansatz Gieriger Algorithmus 1 Sortiere das Array absteigend 2 Setze i auf den Anfang und j auf das Ende des Arrays 3 Füge die Summe aus array[i] und array[j] dem Ergebnis-Array hinzu 4 Setze i um eine Stelle nach rechts, j um eine Stelle nach links weiter 5 Wiederhole die Schritte 3 und 4 so lange, bis die Mitte des Arrays erreicht ist 6 Gib die Lösungsmenge zurück Jennifer Naumann Gierige Algorithmen 11.Juni 2013 37 / 44
EllysPairs - Beispiel 6 2 8 5 1 3 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 38 / 44
EllysPairs - Beispiel Absteigend nach Wissensstand sortieren: 8 i 6 5 3 2 1 j Jennifer Naumann Gierige Algorithmen 11.Juni 2013 38 / 44
EllysPairs - Beispiel i und j zur Ergebnismenge hinzufügen und beide um eine Stelle weitersetzen 8 6 5 3 2 1 i j Ergebnismenge: 8 1 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 38 / 44
EllysPairs - Beispiel i und j zur Ergebnismenge hinzufügen und beide um eine Stelle weitersetzen 8 6 5 3 2 1 i j Ergebnismenge: 8 1 6 2 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 38 / 44
EllysPairs - Beispiel fertig 8 6 5 3 2 1 i j Ergebnismenge: 8 1 6 2 5 3 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 38 / 44
EllysPairs - Beweisidee Ist das Ergebnis wirklich immer optimal? 1 Aufsteigend sortierte Zahlen: a b c d e f g h i j 2 Paare nach greedy-vorschrift: {a, j}, {b, i}, {c, h}, {d, g}, {e, f } 3 Annahme: {b, i} größtes, {d, g} kleinstes Paar 4 Es gibt beliebig viele weitere Paare zwischen den gezeigten Um das größte Paar zu verkleinern, kann man b durch a oder i durch a, c, d, e, f, g, h ersetzen Fall 1: Ersetze b Neue Paare: {b, j}, {a, i} aber b + j b + i, da j i Fall 2: Ersetze i Neue Paare: {d, i}, {b, g} aber d + i b + i, da h b Andere Richtung (kleinstes Paar vergrößern) analog Jennifer Naumann Gierige Algorithmen 11.Juni 2013 39 / 44
TomekPhone Aufgabenstellung Tomek ist mit den neuen Handytastaturen unzufrieden und hat sich überlegt, ein Handy mit alter Tastatur herauszubringen Er möchte aber eine Tastatur erstellen, die für eine Sprache mit N verschiedenen Buchstaben gilt Es ist schon vorher geplant, wie viele Tasten die Tastatur haben wird und auch, wie viele Buchstaben höchstens eine Taste belegen dürfen Ziel ist, sich eine Tastatur zu überlegen, mit der man so wenig wie möglich Tasten drücken muss Jennifer Naumann Gierige Algorithmen 11.Juni 2013 40 / 44
TomekPhone Beispiel: 7 Zeichen, 3 Tasten, max. 3 Zeichen/Taste s n t h d i u 3 1 5 8 4 3 1 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 41 / 44
TomekPhone Beispiel: 7 Zeichen, 3 Tasten, max. 3 Zeichen/Taste s n t h d i u 3 1 5 8 4 3 1 Zeichen sortiert h t d s i n u 8 5 4 3 3 1 1 Jennifer Naumann Gierige Algorithmen 11.Juni 2013 41 / 44
TomekPhone Beispiel: 7 Zeichen, 3 Tasten, max. 3 Zeichen/Taste s n t h d i u 3 1 5 8 4 3 1 Zeichen sortiert h t d s i n u 8 5 4 3 3 1 1 fertige Tastatur h,s,u d,n t,i Jennifer Naumann Gierige Algorithmen 11.Juni 2013 41 / 44
Zusammenfassung Vor- und Nachteile Laufzeit fast immer O(nlogn) Meist einfach und intuitiv zu entwickeln Aber findet nicht immer optimales Ergebnis Allgemeines Vorgehen zum Lösen gieriger Problemstellungen 1 Sortiere die gegebenen Elemente nach einem passenden Kriterium 2 Solange die Menge der Elemente noch nicht leer: Wähle lokales Optimum und füge es der Lösungsmenge hinzu Entferne das Element aus der Menge 3 Gib Lösungsmenge zurück Das funktioniert zwar nicht immer, aber viele Probleme lassen sich nach diesem Schema lösen. Jennifer Naumann Gierige Algorithmen 11.Juni 2013 42 / 44
Fragen Fragen? Jennifer Naumann Gierige Algorithmen 11.Juni 2013 43 / 44
Quellen Cormen: Introduction to algorithms, Chapter 16 Uwe Schöning: Algorithmik, Kapitel 5 HalloWelt-Vortragsfolien von früheren Semestern http://de.wikipedia.org/wiki/greedy-algorithmus http://www.cs.princeton.edu/ wayne/kleinberg-tardos/ 04GreedyAlgorithms.pdf http://programmingwiki.de/auk/greedy-algorithmen SS10 http://de.wikipedia.org/wiki/euromünzen Bild auf Folie 1: http://wemeantwell.com/blog/wp-content/uploads/2011/04/ ScroogeMcDuck.jpg Jennifer Naumann Gierige Algorithmen 11.Juni 2013 44 / 44