Gierige Algorithmen. Tilman Adler Tilman Adler Gierige Algorithmen / 46

Ähnliche Dokumente
Gierige Algorithmen Marcel Henninger. Hallo Welt -Seminar - LS 2 Gierige Algorithmen

Gierige Algorithmen. Seminar Hallo Welt! für Fortgeschrittene. Jennifer Naumann. 11.Juni 2013

Algorithmentheorie. 10 Greedy Verfahren

Hallo Welt für Fortgeschrittene

Greedy Algorithms - Gierige Algorithmen

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

Methoden für den Entwurf von Algorithmen

Algorithmen und Datenstrukturen. Organisatorisches. Christian Komusiewicz Ernst-Abbe-Platz 2, R3315

Informatik II Greedy-Algorithmen

Hallo Welt für Fortgeschrittene

9 Minimum Spanning Trees

Polygontriangulierung

ADS: Algorithmen und Datenstrukturen 2

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

3. Übungsblatt zu Algorithmen I im SoSe 2017

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

Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 2

Primzahlen und Programmieren

Informatik II Greedy-Algorithmen

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

INFORMATIK FÜR BIOLOGEN

Algorithmen und Datenstrukturen 2

Polygontriangulierung

Geometrie I. Sebastian Redinger Informatik 2 Programmiersysteme Martensstraße Erlangen

Referat zum Thema Huffman-Codes

Gierige Algorithmen Interval Scheduling

Die Formel für die Standardabweichung lautet (ohne die Wurzel haben wir die Varianz):

Dynamisches Huffman-Verfahren

Berechnung minimaler Spannbäume. Beispiel

Graphalgorithmen 2. Dominik Paulus Dominik Paulus Graphalgorithmen / 47

Babeș-Bolyai Universität Cluj Napoca Fakultät für Mathematik und Informatik Grundlagen der Programmierung MLG5005. Paradigmen im Algorithmenentwurf

Voronoi-Diagramme INSTITUT FÜR THEORETISCHE INFORMATIK FAKULTÄT FÜR INFORMATIK. Dr. Martin Nöllenburg Vorlesung Algorithmische Geometrie

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Übungen zur Vorlesung Datenstrukturen und Algorithmen SS 2006 Blatt 13

Algorithmen II Vorlesung am

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

Uberblick 1. Kurzeste Wege 2. Sichtbarkeitsgraphen 3. Berechnung des Sichtbarkeitsgraphen 4. Kurzeste Wege fur polygonale Roboter 1

Tutoraufgabe 1 (Hoare-Kalkül):

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

Erinnerung: das Knapsack-Problem

15. Elementare Graphalgorithmen

Konvexe Hülle. Abbildung: [Wikipedia]: Nicht-konvexe Menge (links), konvexe Menge (rechts) KIT Institut für Theoretische Informatik 510

4. Sortieren 4.1 Vorbemerkungen

5.4 Das Rucksackproblem

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

Der Branching-Operator B

Aufgabe (Schreibtischtest, Algorithmenanalyse)

Krawatterätsel - Verbesserung der oberen Schranke

Inhalt. 1. Flußprobleme. 2. Matching. 3. Lineares Programmieren. 4. Ganzzahliges Programmieren. 5. NP-Vollständigkeit. 6. Approximationsalgorithmen

Wann sind Codes eindeutig entschlüsselbar?

Objektorientierte Programmierung VL: Prof. Dr. Marco Block-Berlitz - Freie Universität Berlin Proinformatik III

BUBBLE SORT. Können wir die gefundenen Algorithmen auch auf Listen mit mehr als drei Elementen ausdehnen?

Kapiteltests zum Leitprogramm Binäre Suchbäume

Aufgabe 8. 1 Arbeitsweise illustrieren. 2 Korrektheitsbeweis führen. 3 Laufzeitanalyse durchführen.

Klausur Algorithmen und Datenstrukturen II 29. Juli 2013

Informatik I Übung, Woche 47: Nachtrag zur dynamischen Programmierung

Mergeable Heaps. C. Komusiewicz 7.1 Fibonacci-Heaps: Überblick 117

Kombinatorische Optimierung

Vorlesung Datenstrukturen

5. Übungsblatt zu Algorithmen I im SoSe 2016

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Theoretische Grundlagen der Informatik

Algorithmen und Datenstrukturen Heapsort

Geometrische Algorithmen Voronoi-Diagramme. Lernmodul 7: Geo-Algorithmen und -Datenstrukturen - Voronoi-Diagramme

Suchen und Sortieren Sortieren. Heaps

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Kostenmaße. F3 03/04 p.188/395

Abschnitt: Algorithmendesign und Laufzeitanalyse

Denition: Rang eines Elements e einer Folge s = Position von e in sort(s) (angefangen bei 1). Frage: warum ist r nicht notwendig eindeutig?

Theoretische Informatik 1

Algorithmen I - Tutorium 28 Nr. 11

Datenstrukturen und Algorithmen D-INFK

Suchen und Sortieren

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Übung Algorithmen und Datenstrukturen

2. Effizienz von Algorithmen

Algorithmen und Datenstrukturen Tutorium Übungsaufgaben

Begriffsklärung: Dominanz

Sortierverfahren für Felder (Listen)

Sortieren. Eine Testmenge erstellen

Datenstrukturen & Algorithmen

10. Übung Algorithmen I

Übrigens: um den Algorithmus im Unterricht einzuführen, sind keine Formeln notwendig! Warum reicht die normale ASCII-Codierung nicht aus?

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 9, Donnerstag 18.

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Vorlesung 2 KÜRZESTE WEGE

Informatikgrundlagen (WS 2016/2017)

Algorithmen und Datenstrukturen

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

5. Bäume und Minimalgerüste

Erinnerung VL vom

Algorithmen mit Python

Algorithmen und Datenstrukturen I Grundlagen

Übung Algorithmen und Datenstrukturen

Transkript:

Gierige Algorithmen Tilman Adler 13.06.2012 Tilman Adler Gierige Algorithmen 13.06.2012 1 / 46

Ziel Nach diesem Vortrag solltet ihr verstanden haben: Was gierige Algorithmen von stupider DP abgrenzt Wie gierige Algorithmen bei der Lösung eines Problems vorgehen Wann gierige Algorithmen zur Lösung eines Problems eingesetzt werden können Tilman Adler Gierige Algorithmen 13.06.2012 2 / 46

Überblick 1 Theoretische Grundlagen Definition gieriger Algorithmen Notwendige Problemeigenschaften Abgrenzung zu DP Beispiel: Knapsack vs. fractional Knapsack 2 Praktische Ausführung - Beispiele Scheduling LKW-Fahrer-Problem Münzwechselproblem Huffman-Encoding HeatDeath (TopCoder) Tilman Adler Gierige Algorithmen 13.06.2012 3 / 46

Definition Gierige Algorithmen zerlegen ein Optimierungsproblem in gleichartige Teilprobleme, lösen diese mit der lokal intuitiv besten Lösung und setzen die Teilllösungen zu einer Gesamtlösung zusammen. Tilman Adler Gierige Algorithmen 13.06.2012 4 / 46

Notwendige Problemeigenschaften Optimale Substruktur Ein Problem muss sich in gleichartige Unterprobleme zerlegen lassen und die Lösungen dieser müssen sich zu einer (korrekten) Gesamtlösung zusammensetzen lassen. Gierige-Wahl-Eigenschaft Lokal optimale Lösungen eines Teilproblem müssen zusammengenommen eine optimale Lösung des Gesamtproblems ergeben. Tilman Adler Gierige Algorithmen 13.06.2012 5 / 46

Abgrenzung zu DP DP GA Findet globales Optimum Findet lokales Optimum entscheidet abhängig von Sublösungen ( Zwischenwertspeicher nötig) keine Vorverbeitung Lösung häufig nicht trivial entscheidet nach lokal günstigster Lösung (kein extra Speicher) oft zb Listensortierung Ansatz oft intuitiv Tilman Adler Gierige Algorithmen 13.06.2012 6 / 46

Knapsack MaxFragg veranstaltet mal wieder eine seine berühmt-berüchtigten Bergwanderungen. Vom letzten Mal hat Qui Sum gelernt, dass er nicht zu viel einpacken darf. Daher hat er seine Lieblingsgetränke nach Zufriedenheit geordnet und sie gewogen. Er will nicht mehr als 100 Gewichtseinheiten mitschleppen. Tilman Adler Gierige Algorithmen 13.06.2012 7 / 46

Knapsack Wie kann er folgende Getränke in seinen Rucksack packen, und dabei eine möglichst hohe Zufriedenheit erreichen? Getränk Mate Bier Spezi Kaffee Gewicht 20 20 30 40 Wert 70 70 90 100 rel. Wert 3,5 3,5 3,0 2,5 Tilman Adler Gierige Algorithmen 13.06.2012 8 / 46

Beispiel: Knapsack - Dynamisch Für ganzzahlige Dinge lässt sich das Knapsack-Problem lediglich dynamisch lösen. Wert = 240 Tilman Adler Gierige Algorithmen 13.06.2012 9 / 46

Beispiel: Knapsack - Gierig Ich verwende mathematische Mengen im Pseudocode als Listen bzw. Arrays. Die Vereinigung liest sich als hinten anfügen. Tilman Adler Gierige Algorithmen 13.06.2012 10 / 46 CALC-AND-SORT bereitet die Liste vor, indem sie den relativen Wert berechnet und aufsteigend sortiert. GREEDY-KNAPSACK(i, m): 1: list CALC-AND-SORT(i) 2: result 3: while elem list, elem.gewicht m do 4: result result {elem}; 5: m m elem.gewicht; 6: end while 7: return result;

Beispiel: Knapsack - Gierig Getränk Mate Bier Spezi Kaffee Gewicht 20 20 30 40 Wert 70 70 90 100 rel. Wert 3,5 3,5 3,0 2,5 Wert = 70 Tilman Adler Gierige Algorithmen 13.06.2012 11 / 46

Beispiel: Knapsack - Gierig Getränk Mate Bier Spezi Kaffee Gewicht 20 20 30 40 Wert 70 70 90 100 rel. Wert 3,5 3,5 3,0 2,5 Wert = 140 Tilman Adler Gierige Algorithmen 13.06.2012 11 / 46

Beispiel: Knapsack - Gierig Getränk Mate Bier Spezi Kaffee Gewicht 20 20 30 40 Wert 70 70 90 100 rel. Wert 3,5 3,5 3,0 2,5 Wert = 230 Tilman Adler Gierige Algorithmen 13.06.2012 11 / 46

Beispiel: Knapsack - Gierig Getränk Mate Bier Spezi Kaffee Gewicht 20 20 30 40 Wert 70 70 90 100 rel. Wert 3,5 3,5 3,0 2,5 Wert = 230 < 240 Tilman Adler Gierige Algorithmen 13.06.2012 11 / 46

Beispiel: Fractional Knapsack Jetzt kommt Qui Sum auf die Idee, auf vorkonfektionierte Flaschen zu verzichten und Plastikflaschen zu verwenden: Die wiegen nichts und außerdem kann er dann das Problem gierig lösen, indem er Flaschen nur teilweise füllt. Tilman Adler Gierige Algorithmen 13.06.2012 12 / 46

Beispiel: Fractional Knapsack Getränk Mate Bier Spezi Kaffee Gewicht 20 20 30 40 Wert 70 70 90 100 rel. Wert 3,5 3,5 3,0 2,5 Wert = 70 Tilman Adler Gierige Algorithmen 13.06.2012 13 / 46

Beispiel: Fractional Knapsack Getränk Mate Bier Spezi Kaffee Gewicht 20 20 30 40 Wert 70 70 90 100 rel. Wert 3,5 3,5 3,0 2,5 Wert = 140 Tilman Adler Gierige Algorithmen 13.06.2012 13 / 46

Beispiel: Fractional Knapsack Getränk Mate Bier Spezi Kaffee Gewicht 20 20 30 40 Wert 70 70 90 100 rel. Wert 3,5 3,5 3,0 2,5 Wert = 230 Tilman Adler Gierige Algorithmen 13.06.2012 13 / 46

Beispiel: Fractional Knapsack Getränk Mate Bier Spezi Kaffee Gewicht 20 20 30 40 Wert 70 70 90 100 rel. Wert 3,5 3,5 3,0 2,5 Wert = 305 Tilman Adler Gierige Algorithmen 13.06.2012 13 / 46

Beispiel: Fractional Knapsack Wert = 305 Warum geht das jetzt?! Nur, weil wir die Getränke nicht mehr als Integer betrachten, können wir den Kaffee aufteilen und zu 3 4 mitnehmen! Tilman Adler Gierige Algorithmen 13.06.2012 14 / 46

Beispiel: Fractional Knapsack FRACTIONAL-KNAPSACK(i, m): 1: list CALC-AND-SORT(i) 2: result 3: while elem list, elem.gewicht > m do 4: result {elem}; 5: m m elem.gewicht; 6: end while 7: if m 0 then 8: result { m elem.gewicht elem} 9: end if 10: return result; Tilman Adler Gierige Algorithmen 13.06.2012 15 / 46

Beispiel: Fazit Obwohl sowohl Knapsack als auch Fractional Knapsack optimale Substuktur aufweisen, erfüllt lediglich letzterer auch die Gierige-Wahl-Eigenschaft. Dass ein Problem beide Eigenschaften hat, ist im Zweifel zu beweisen. Ein Beweis ist im Cormen als Theorem 16.1 zu finden. Tilman Adler Gierige Algorithmen 13.06.2012 16 / 46

Übersichtskarte 1 Theoretische Grundlagen Definition gieriger Algorithmen Notwendige Problemeigenschaften Abgrenzung zu DP Beispiel: Knapsack vs. fractional Knapsack 2 Praktische Ausführung - Beispiele Scheduling LKW-Fahrer-Problem Münzwechselproblem Huffman-Encoding HeatDeath (TopCoder) Tilman Adler Gierige Algorithmen 13.06.2012 17 / 46

Scheduling Grundsätzlich bezeichnet Scheduling das (möglichst optimale) Verteilen von Ereignissen auf der Zeitachse. Dabei können verschiedene Kriterien ausschlaggebend für die Auswahl der Reihenfolge sein: Maximale Anzahl an Veranstaltungen (activity selection, zb Belegungsplan eines Raumes) Maximale Gleichzeitigkeit (interval partitioning, zb Raumvergabe an gleichzeitige Veranstaltungen) Maximale Pünklichkeit (minimize lateness, minimiere die maximale Verspätung verschiedener Termine. zb Deutsche Bahn) uvm Tilman Adler Gierige Algorithmen 13.06.2012 18 / 46

activity selection Maximale Anzahl an Veranstaltungen (zb Belegungsplan eines Raumes) Idee Wähle immer diejenige Veranstaltung aus, die die meiste Zeit für andere Veranstaltungen übrig lässt und mit keiner anderen kollidiert. Tilman Adler Gierige Algorithmen 13.06.2012 19 / 46

activity selection a 1 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 20 / 46

activity selection a 1 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 20 / 46

activity selection a 1 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 20 / 46

activity selection a 1 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 20 / 46

activity selection a 1 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 20 / 46

activity selection a 1 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 20 / 46

activity selection a 1 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 20 / 46

activity selection SORT sortiert die Liste aufsteigend nach Endzeit der Veranstaltungen INTERVAL-SCHEDULING(veranstaltungen): 1: liste SORT(veranstaltungen); 2: result ; 3: endzeit 0; 4: for veranstaltung liste do 5: if veranstaltung.beginn >= endzeit then 6: result result {veranstaltung}; 7: endzeit veranstaltung.ende; 8: end if 9: end for 10: return result; Tilman Adler Gierige Algorithmen 13.06.2012 21 / 46

interval partitioning Maximale Anzahl an Überschneidung (zb Raumanzahl für Vorträge) Idee Lege die Vorlesungen zeitlich nacheinander in einen Raum, in den sie passen. Gibt es keinen Raum dafür, lege einen neuen an. Tilman Adler Gierige Algorithmen 13.06.2012 22 / 46

interval partitioning a 1 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 23 / 46

interval partitioning 1 a 1 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 23 / 46

interval partitioning 1 a 1 2 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 23 / 46

interval partitioning 1 a 1 2 a 2 a 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 23 / 46

interval partitioning 1 a 1 2 a 2 a 3 3 a 4 a 5 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 23 / 46

interval partitioning 1 a 1 a 5 2 a 2 a 3 3 a 4 a 6 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 23 / 46

interval partitioning 1 a 1 a 5 2 a 2 a 3 a 6 3 a 4 0 1 2 3 4 5 6 7 8 9 10 Tilman Adler Gierige Algorithmen 13.06.2012 23 / 46

interval partitioning SORT sortiert die Liste aufsteigend nach Anfangszeit der Veranstaltungen INTERVAL-PARTITIONING(veranstaltungen): 1: liste SORT(veranstaltungen); 2: räume ; 3: for veranstaltung liste do 4: if raum FINDE-KOMPATIBLEN(räume) then 5: raum raum {veranstaltung}; 6: else 7: räume räume {veranstaltung}; 8: end if 9: end for 10: return r äume; Tilman Adler Gierige Algorithmen 13.06.2012 24 / 46

minimize lateness Maximale Pünklichkeit (minimize lateness, minimiere die maximale Verspätung verschiedener Termine) Idee Sortiere aufsteigend nach Fälligkeitsdatum??? PROFIT! Tilman Adler Gierige Algorithmen 13.06.2012 25 / 46

minimize lateness Beispielsweise für folgende unsortierte Aufgaben (maximale Verspätung: 4): 17 00 15 00 12 00 19 00 18 00 10 00 11 00 12 00 13 00 14 00 15 00 16 00 17 00 18 00 19 00 20 00 Tilman Adler Gierige Algorithmen 13.06.2012 26 / 46

minimize lateness Beispielsweise für folgende unsortierte Aufgaben (maximale Verspätung: 4): 17 00 15 00 12 00 19 00 18 00 10 00 11 00 12 00 13 00 14 00 15 00 16 00 17 00 18 00 19 00 20 00 Und sortiert (maximale Verspätung: 1). 12 00 15 00 17 00 18 00 19 00 10 00 11 00 12 00 13 00 14 00 15 00 16 00 17 00 18 00 19 00 20 00 Tilman Adler Gierige Algorithmen 13.06.2012 26 / 46

Übersichtskarte 1 Theoretische Grundlagen Definition gieriger Algorithmen Notwendige Problemeigenschaften Abgrenzung zu DP Beispiel: Knapsack vs. fractional Knapsack 2 Praktische Ausführung - Beispiele Scheduling LKW-Fahrer-Problem Münzwechselproblem Huffman-Encoding HeatDeath (TopCoder) Tilman Adler Gierige Algorithmen 13.06.2012 27 / 46

LKW-Fahrer-Problem Ein gieriger LKW Fahrer, der von A-Stadt nach B-Stadt fährt muss mindestens alle n Kilometer nachtanken. Wie oft und an welchen Tankstellen sollte er tanken, um möglichst wenig Zeit zu verlieren? Denn Zeit ist Geld. LKW-Fahrer-Problem An welchen Tankstellen aus einer Liste muss ich tanken, um möglichst selten zu halten? Die Reichweite des LKW ist mindestens so groß wie der größte Abstand zwischen zwei Tankstellen. Tilman Adler Gierige Algorithmen 13.06.2012 28 / 46

LKW-Fahrer-Problem SORT-LIST bereitet die Tankstellenliste vor, indem sie sie aufsteigend in eine verkettete Liste einsortiert. LKW-Fahrer(reichweite, zielkm, tankstellen): 1: tankstelle SORT-LIST(tankstellen).first 2: strecke reichweite 3: while strecke < zielkm do 4: while tankstelle.next.km strecke do 5: tankstelle = tankstelle.next 6: end while 7: result tankstelle 8: strecke = tankstelle.km + reichweite 9: end while 10: return result; Tilman Adler Gierige Algorithmen 13.06.2012 29 / 46

Übersichtskarte 1 Theoretische Grundlagen Definition gieriger Algorithmen Notwendige Problemeigenschaften Abgrenzung zu DP Beispiel: Knapsack vs. fractional Knapsack 2 Praktische Ausführung - Beispiele Scheduling LKW-Fahrer-Problem Münzwechselproblem Huffman-Encoding HeatDeath (TopCoder) Tilman Adler Gierige Algorithmen 13.06.2012 30 / 46

Griechenlandproblem Nach einem europaweiten Bankencrash war viele Jahre Tauschhandel gang und gäbe. Weil das reichlich aufwändig ist, wird in Deutschland eine neue Währung - die NDM - eingeführt. Die Staffelung der Münzen ist 5, 2, 1, 0.5, 0.1, 0.05, 0.02, 0.01. Leider kann damit noch niemand richtig umgehen. Münzwechselproblem Wie gibt man am einfachsten, das heißt mit so wenig Münzen wie möglich, einen bestimmten Betrag heraus? Tilman Adler Gierige Algorithmen 13.06.2012 31 / 46

Münzwechselproblem - Beispiel Herausgeben von 7,64 DM: Verfügbare Münzen: Wechselgeld: Tilman Adler Gierige Algorithmen 13.06.2012 32 / 46

Münzwechselproblem - Beispiel Herausgeben von 2,64 DM: Verfügbare Münzen: Wechselgeld: Tilman Adler Gierige Algorithmen 13.06.2012 32 / 46

Münzwechselproblem - Beispiel Herausgeben von 0,64 DM: Verfügbare Münzen: Wechselgeld: Tilman Adler Gierige Algorithmen 13.06.2012 32 / 46

Münzwechselproblem - Beispiel Herausgeben von 0,14 DM: Verfügbare Münzen: Wechselgeld: Tilman Adler Gierige Algorithmen 13.06.2012 32 / 46

Münzwechselproblem - Beispiel Herausgeben von 0,04 DM: Verfügbare Münzen: Wechselgeld: Tilman Adler Gierige Algorithmen 13.06.2012 32 / 46

Münzwechselproblem - Beispiel Herausgeben von 0,02 DM: Verfügbare Münzen: Wechselgeld: Tilman Adler Gierige Algorithmen 13.06.2012 32 / 46

Münzwechselproblem - Beispiel Herausgeben von 0,00 DM: Verfügbare Münzen: Wechselgeld: Tilman Adler Gierige Algorithmen 13.06.2012 32 / 46

Münzwechselproblem SORT bereitet die Liste vor, indem sie nach Wert der Münzen aufsteigend sortiert. CASHIERS-ALGORITHM(wert, liste): 1: coins SORT(liste); 2: result ; 3: for coin coins do 4: while coin n do 5: result coin; 6: n n coin; 7: end while 8: if n = 0 then 9: return result; 10: end if 11: end for 12: return Tilman Adler Gierige Algorithmen 13.06.2012 33 / 46

Münzwechselproblem Warnhinweis In Verbindung mit außergewöhnlichen Staffelungen kann es zu Fehlern kommen. Beispielsweise kennt das US-Briefmarkensystem die Einheiten 1, 10, 21, 34, 70, 100... Bei 140 liefert og Algorithmus falsche Ergebnisse. Ein nicht ganz triviales Verfahren zur Überprüfung einer Staffelung findet sich unter unter http://www.cs.uwaterloo.ca/~shallit/papers/change2.pdf (08.06.12). Tilman Adler Gierige Algorithmen 13.06.2012 34 / 46

Übersichtskarte 1 Theoretische Grundlagen Definition gieriger Algorithmen Notwendige Problemeigenschaften Abgrenzung zu DP Beispiel: Knapsack vs. fractional Knapsack 2 Praktische Ausführung - Beispiele Scheduling LKW-Fahrer-Problem Münzwechselproblem Huffman-Encoding HeatDeath (TopCoder) Tilman Adler Gierige Algorithmen 13.06.2012 35 / 46

Huffman-Encoding Der Huffman-Code ist ein optimaler Präfixcode, der gegenüber der Speicherung mit fester Codewortlänge Einsparungen von 20-90% ermöglicht. Für nähere Betrachtungen siehe GTI. Problem Wie erzeuge ich einen Huffman-Code? k:12 c:5 k:7 a:3 b:4 Tilman Adler Gierige Algorithmen 13.06.2012 36 / 46

Huffman-Encoding a:3 b:4 c:5 Tilman Adler Gierige Algorithmen 13.06.2012 37 / 46

Huffman-Encoding c:5 k:7 a:3 b:4 Tilman Adler Gierige Algorithmen 13.06.2012 37 / 46

Huffman-Encoding k:12 c:5 k:7 a:3 b:4 Tilman Adler Gierige Algorithmen 13.06.2012 37 / 46

Huffman-Encoding PRIORITY bereitet die Liste der Worte vor, indem sie sie aufsteigend nach Häufigkeit in eine Priority-Queue speichert. HUFFMAN(C): 1: Q = PRIORITY(C); 2: for i = 1 C 1 do 3: erstelle neuen Knoten k; 4: k.links = EXTRACT-MIN(Q); 5: k.rechts = EXTRACT-MIN(Q); 6: k.haeufig = k.links.haeufig + k.rechts.haeufig; 7: INSERT(Q, k); 8: end for 9: return EXTRACT-MIN(Q); Tilman Adler Gierige Algorithmen 13.06.2012 38 / 46

Übersichtskarte 1 Theoretische Grundlagen Definition gieriger Algorithmen Notwendige Problemeigenschaften Abgrenzung zu DP Beispiel: Knapsack vs. fractional Knapsack 2 Praktische Ausführung - Beispiele Scheduling LKW-Fahrer-Problem Münzwechselproblem Huffman-Encoding HeatDeath (TopCoder) Tilman Adler Gierige Algorithmen 13.06.2012 39 / 46

HeatDeath In dieser TopCoder Aufgabe war nach einem Weg gesucht, das Universum möglichst lange am Leben zu erhalten: Ein Array arr repräsentiert die Temperatur im Universum. Energie kann von a nach b springen, wenn arr[b] + 2 arr[a], jedoch nur eine Energieeinheit pro Zeiteinheit. Problem Wie kann ich ein Array von Zahlen möglichst lange unausgeglichen halten, wenn pro Zeiteinheit eine größere Zahl dekrementiert und eine kleinere inkrementiert wird, deren Unterschied mindestens 2 betrug? Tilman Adler Gierige Algorithmen 13.06.2012 40 / 46

HeatDeath Durchlauf mit drei Schritten: 9 5 5 9 6 Tilman Adler Gierige Algorithmen 13.06.2012 41 / 46

HeatDeath Durchlauf mit drei Schritten: 9 5 8 6 5 9 6 6 8 6 Tilman Adler Gierige Algorithmen 13.06.2012 41 / 46

HeatDeath Durchlauf mit drei Schritten: 9 5 8 6 5 9 6 6 8 6 6 7 7 Tilman Adler Gierige Algorithmen 13.06.2012 41 / 46

HeatDeath Idee Wir gleichen nur möglichst dicht beieinander liegende Elemente aus, sodass ein Ausgleich so oft wie möglich durchgereicht wird. Algorithmus Sortiere Array absteigend Ausgleich jeweils zwischen zwei benachbarten a, b mit a b 2 und gehe zu 2. Wenn keine solchen Elemente, dann zwischen zwei beliebigen a, b mit a b = 2 und gehe zu 2. Wenn auch keine solchen, fertig. Tilman Adler Gierige Algorithmen 13.06.2012 42 / 46

HeatDeath Optimierter Durchlauf mit vier Schritten: 9 6 9 6 5 Tilman Adler Gierige Algorithmen 13.06.2012 43 / 46

HeatDeath Optimierter Durchlauf mit vier Schritten: 9 6 7 5 9 6 5 8 7 5 Tilman Adler Gierige Algorithmen 13.06.2012 43 / 46

HeatDeath Optimierter Durchlauf mit vier Schritten: 9 6 7 5 8 6 9 6 5 8 7 5 8 6 6 Tilman Adler Gierige Algorithmen 13.06.2012 43 / 46

HeatDeath Optimierter Durchlauf mit vier Schritten: 9 6 7 5 8 6 9 6 5 8 7 5 8 6 6 7 7 6 Tilman Adler Gierige Algorithmen 13.06.2012 43 / 46

Obligatorische Schlussfolien Fragen? Tilman Adler Gierige Algorithmen 13.06.2012 44 / 46

Obligatorische Schlussfolien Vielen Dank für eure Aufmerksamkeit Tilman Adler Gierige Algorithmen 13.06.2012 45 / 46

Obligatorische Schlussfolien Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Introduction To Algorithms http://www.cs.princeton.edu/~wayne/ kleinberg-tardos/04greedy-2x2.pdf (7. Juni) http://community.topcoder.com/stat?c=problem_ statement&pm=2982&rd=5881 (11. Juni) http://community.topcoder.com/tc?module= Static&d1=match_editorials&d2=tco04_online_rd_4 (11. Juni) Daniel Danner: Gierige Algorithmen (2010) Tilman Adler Gierige Algorithmen 13.06.2012 46 / 46