Greedy-Algorithmus Greedy-Algorithmen sind mit dem dynamischen Programmieren verwandt, jedoch einfacher. Die Grundsituation ist dieselbe: Es geht um ein.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

8. Termin Teil B: Wiederholung Begriffe Baum
Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Christian Scheideler SS 2009
Motivation Bisher: Codes mit möglichst kurzer Codelänge.
Man bestimme den „minimalen aufspannenden Baum“ des Graphen.
Definition [1]: Sei S eine endliche Menge und sei p eine Abbildung von S in die positiven reellen Zahlen Für einen Teilmenge ES von S sei p definiert.
Minimum Spanning Tree: MST
Vorlesung Programmieren II
7.2 B-Bäume / B*-Bäume als Hilfsmittel zur Indexorganisation
Das LCA – Problem in Suffixbäumen
Prof. Dr. W. Conen 15. November 2004
Kapitel 6: Klassifizierung von Sortiertechniken
7. Natürliche Binärbäume
Suche in Texten (Stringsuche )
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
5. Sortier-Algorithmen Vorbemerkungen:
Algorithmen und Komplexität Teil 1: Grundlegende Algorithmen
REKURSION + ITERATION. Bemerkung: Die in den folgenden Folien angegebenen "Herleitungen" sind keine exakten Beweise, sondern Plausibilitätsbetrachtungen.
Algorithmentheorie 04 –Hashing
Algorithmentheorie 6 – Greedy-Verfahren
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
Prof.Dr.S. Albers Prof. Dr. Th. Ottmann
Dynamische Programmierung (2) Matrixkettenprodukt
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (23 – Sortieren vorsortierter Daten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
Sortieren vorsortierter Daten
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (06 – Reduktion endlicher Automaten) Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 3 Einführung in die Theoretische Informatik (04 – Automaten mit ε-Transitionen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (18 - Bäume: Durchlaufreihenfolgen, Analyse nat. Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - AVL-Bäume: Entfernen, Bruder-Bäume) Prof. Th. Ottmann.
Kapitel 5 Stetigkeit.
Kapitel 1 Die natürlichen und die ganze Zahlen. Kapitel 1: Die natürlichen und die ganzen Zahlen © Beutelspacher/Zschiegner April 2005 Seite 2 Inhalt.
Kapitel 2 Die rationalen und die irrationalen Zahlen.
Huffmans Kompressionsverfahren
Christian Schindelhauer
Minimum Spanning Tree: MST
Huffman Entropie-Codierung Codierung mit variabler Länge
Maschinelles Lernen Bayessche Verfahren (Mitchell Kap. 6), Teil 1.
Beweissysteme Hartmut Klauck Universität Frankfurt WS 06/
§24 Affine Koordinatensysteme
Effiziente Algorithmen
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Quantum Computing Hartmut Klauck Universität Frankfurt WS 05/ /23.1.
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Fuzzymengen – Was ist das?
ENDLICHE KÖRPER RSA – VERFAHREN.
Automaten, formale Sprachen und Berechenbarkeit II SoSe 2004 Prof. W. Brauer Teil 3: Potenzreihen und kontextfreie Sprachen (Vgl. Buch von A. Salomaa)
Analyse der Laufzeit von Algorithmen
Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar?
WS03/041 Dynamische Programmierung (3) Konstruktion optimaler Suchbäume Prof. Dr. S. Albers Prof. Dr. Th. Ottmann.
Binärbäume.
Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1.
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 3 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 1 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Wiederholung TexPoint fonts used in EMF.
 Präsentation transkript:

Greedy-Algorithmus Greedy-Algorithmen sind mit dem dynamischen Programmieren verwandt, jedoch einfacher. Die Grundsituation ist dieselbe: Es geht um ein Optimierungsproblem; es soll sukzessiv eine optimale Lösung - in Bezug auf eine gegebene Bewertungsfunktion - konstruiert werden. Während man beim dynamischen Programmieren solche optimale Lösung für alle kleineren Teilprobleme konstruiert und mit Hilfe dieser in einer Tabelle eingetragenen Daten die nächst größere optimale Lösung konstruiert, verzichtet man bei Greedy auf die Buchführung mittels einer Tabelle. Stattdessen wird der nächste Erweiterungsschritt zu einer (hoffentlich) optimalen Lösung lediglich auf Grund der lokal verfügbaren Informationen getätigt.

Annahme: Es gibt eine Gewichtsfunktion w, die die „Güte“ einer Lösung (auch einer Teillösung) misst. Es soll eine Lösung mit maximalen w-Wert konstruiert werden. 1. Starte mit der leeren Lösung. 2. Erweitere die bisher konstruierte Teillösung wie folgt: Wenn zur Erweiterung dieser Teillösung k Erweiterungs-möglichkeiten zur Verfügung stehen, die auf die vergrößerten Teillösungen l1, ... , lk führen, wähle diejenige Teillösung li mit w (li) maximal. Der Name Greedy = gefräßig erklärt sich dadurch, dass ein Greedy-Algorithmus nach der Methode „Nimm immer das größte Stück“ vorgeht. Dieses Greedy-Prinzip kann in vielen Fällen funktionieren und tatsächlich auf eine optimale Lösung führen - ohne den Aufwand, der bei dynamischem Programmieren betrieben werden muss.

Gesucht: optimaler Präfixcode, d. h. c : S -> {0,1}*, so daß Huffman-Codes Gegeben: S = {a1, ..., an} Alphabet, pi Wahrscheinlichkeit oder Häufigkeit von ai. Gesucht: optimaler Präfixcode, d. h. c : S -> {0,1}*, so daß 1) kein Codewort c(ai) Anfangsstück des Codes eines anderen Zeichens c(aj) ist, und 2) die mittlere Codewortlänge n i = 1 S pi * |c(ai)| minimal ist. Beispiel: {a,b,c,d,e,f} p: Code: a 0,45 0 b 0,13 101 c 0,12 100 d 0,16 111 e 0,09 1101 f 0,05 1100

Dieser Code hat eine mittlere Codewortlänge - bezogen auf die gegebene Wahrscheinlichkeitsverteilung - von: 0,45*1 + 0,13*3 + 0,12*3 + 0,16*3 + 0,09*4 + 0,05*4 = 2, 24 Tatsächlich ist dieser Präfixcode optimal. Ein Präfixcode zeichnet sich dadurch aus, dass Codewörter nur an den Blättern anzutreffen sind. Ein Präfixcode ist eindeutig entzifferbar; das heißt, in einer fortlaufenden Folge von Nullen und Einsen können die Codewörter ( deren Beginn und Ende) eindeutig identifiziert werden.

Code läßt sich als Codebaum darstellen: (nach links 0, nach rechts 1) a 1 1 1 c b d 1 f e

Wenn beispielsweise die Folge 10001100110011011101 gegeben ist, so ist die Decodierung eindeutig möglich, indem man den Codebaum wie einen endlichen Automaten verwendet; man startet in der Wurzel und jedesmal wenn man auf ein eckiges Kästchen stößt, hat man ein Codewort erkannt: 100 0 1100 1100 1101 1101 c a f f e e Präfixcodes sind nicht die einzigen eindeutig entzifferbaren Codes.

Greedy-Algorithmus generiert diesen Baum auf folgende Weise: Initialisierung: pro Zeichen 1 Baum mit 1 Blatt, Label ist die Wahrscheinlichkeit der Zeichen Konstruktion: wähle die beiden Bäume mit niedrigstem Label, verknüpfe sie durch neue Wurzel. Label des neuen Baumes ist Summe der Labels der ursprünglichen Bäume. Die Konstruktion ist abgeschlossen, wenn nur noch 1 Baum übrig ist. Codierung von Texten: 1. Im 1. Durchlauf Häufigkeit der Symbole zählen (oder von Standardhäufigkeiten ausgehen). 2. Codebaum als Bitstring codieren und mit Code abspeichern. Beim Decodieren den Codebaum decodieren und dann den Text rekonstruieren. Platzersparnis für Deutsch oder Englisch ca 40%!

Der Huffman-Algorithmus konstruiert einen optimalen Codebaum . Behauptung: Seien a1, ... , an so durchnummeriert, dass p (a1)  p(a2)  ...  p(an) . Dann gibt es einen optimalen Codebaum B, so dass die beiden Blätter a1 und a2 einen gemeinsamen Vaterknoten haben. Beweis: Durch Induktion nach n. Idee: Für n=1 ist der Huffmann-Codebaum optimal. Für n>1 löst der Huffmann-Algorithmus nach Induktionsvoraussetzung die Aufgabenstellung (a1 , a2 , a3 , ... an) mit p ((a1, a2 ))= p (a1) + p(a2) optimal. Das Ergebnis ist der Baum B. Indem wir das Blatt (a1, a2 ) expandieren und die zwei neuen Blätter a1 und a2 anfügen, erhalten wir als Ergebnis genau einen Baum B‘. Wenn es nun einen optimalen Codebaum C für (a1 , a2 , a3 , ... an) gäbe, dann wäre dieser Baum identisch mit B‘, d.h. a1 und a2 haben einen gemeinsamen Vaterknoten.

Sei E eine endliche Menge, U eine Menge von Teilmengen von E. Teilmengensystem Sei E eine endliche Menge, U eine Menge von Teilmengen von E. (E,U) heißt Teilmengensystem, falls gilt: 1. {} Î U; 2. A subseteq B, B Î U => A Î U Das zu (E, U) gehörige Optimierungsproblem besteht darin, für eine beliebige Gewichtsfunktion w : E   eine in U maximale Menge T ( bzgl.  ) zu finden, deren Gesamtgewicht w (T) =  w ( e ) maximal ist. e  T

Der einem Teilmengensystem (E, U) und Gewichtsfunktion w : E   zugeordnete kanonische Greedy-Algorithmus für diese Aufgabe arbeitet wie folgt: Ordne alle Elemente in E nach absteigendem Gewicht: w ( e1 )  ...  w (en ) T = 0; for ( k = 1; k = n; k++) if ( T  {ek}  U ) T = T  {ek}; Ausgabe der Lösung T; (Soll alternativ eine maximale Menge in U mit minimalem Gewicht gefunden werden, so ordne man zu Beginn die Elemente von E nach aufsteigendem Gewicht). Dieser Algorithmus liefert allerdings nicht immer die optimale Lösung.

Beispiel: Sei E = { e1 , e2 , e3 } U = { 0, {d1 }, {e2 }, {e3 }, {e2,e3 } } mit w(e1) = 3 w(e2) = w(e3) = 2 Dann liefert der kanonische Greedy-Algorithmus die Lösung T = {e1} mit w(T) = 3, während die optimale Lösung dagegen T‘ = {e2,e3} mit w(T‘) = 4 ist.

Austauscheigenschaft Der kanonische Greedy-Algorithmus funktioniert ( in Bezug auf jede mögliche Gewichtsfunktion) genau dann, wenn das Teilmengensystem (E,U) ein Matroid ist. Diese algebraische Struktur verlangt ein zusätzliches Axiom, nämlich die Austauscheigenschaft: A, B  U, |A| < |B|   x  B - A : A { x }  U Das obige Beispiel stellt kein Matroid dar, denn die Austauscheigenschaft ist bei A = { e1 } und B = { e2 , e3 } verletzt.

Satz: Sei (E,U) ein Teilmengensystem. Der kanonische Greedy-Algorithmus liefert für das zugehörige Optimierungsproblem ( in Bezug auf jede beliebige Gewichtsfunktion w : E  ) die optimale Lösung, genau dann wenn (E, U) ein Matroid ist. Beweis: () Annahme, die Austauschbarkeit gelte nicht. Dann gibt es A und B in U mit |A| < |B| , so dass für alle b B - A gilt A  { b } U. Sei r = |B|. Die Gewichtsfunktion w : E   sei definiert durch r + 1, x  A, r, x  B - A, 0, sonst w(x) =

Der Greedy-Algorithmus wählt dann eine Menge T mit A  T und T  (B - A) = 0. Also ist w (T) = ( r + 1) * |A|  (r + 1) ( r - 1) = r2 - 1. Wählt man stattdessen eine Lösung T‘  B, so hat diese den Wert w(T‘)  r * |B| = r2. Der Greedy-Algorithmus liefert in diesem Fall also nicht die optimale Lösung. Wenn man also bei einem Problem, bei dem sich der Greedy-Ansatz anbietet, feststellt, dass die zugrundeliegende algebraische Struktur ein Matroid ist, dann hat man mit Hilfe dieses Satzes „automatisch“ gezeigt, dass Greedy die optimale Lösung liefert.

Auftragsplanung: Gegeben: Menge A von n "Aufträgen", jeweils in einer Zeiteinheit zu bewältigen, zu jedem Auftrag i gibt es Gewinn pi und Termin di , an dem er abgeschlossen sein muß (sonst kein Gewinn) Gesucht: Menge M von Aufträgen, so daß a) M sich so sortieren läßt, dass jeder Auftrag vor seinem Abschlußtermin erledigt wird und b) der Gesamtgewinn maximal ist.

Beispiel: Auftragsplanung Job Gewinn Deadline 1 20 2 2 25 2 3 10 1 4 5 3 Lösung Gewinn 3,2,4 40 4,2 30 1,2,4 50 beste Lösung

Greedy Algorithmus: Ordne Aufträge nach absteigenden Gewinnen: p1  p2  ...  pn; A := {}; for ( i= 1; i = n ; i++) if ( A È {i} ist zulässige Lösung) A = A È {i}; Gib A aus Bemerkung: 1. Es ist wesentlich, daß eine Menge von Aufträgen erzeugt wird, die dann noch in Reihenfolge gebracht werden muß, nicht direkt eine Folge. 2. Aus diesem Algorithmus erhält man den kanonischen Greedy-Algorithmus, wenn man statt der Gewinne eine entsprechende Wertefunktion w verwendet.

Die Korrektheit des Auftragsplanungs-Algorithmus ergibt sich direkt aus der entsprechenden Matroideigenschaft: E: Menge A von Aufträgen U: Menge L(A) von zulässigen Lösungen, d.h. Aufträgen, so daß Sortierung entsprechend deadline möglich ist Es gilt offensichtlich (A, L(A)) ist Teilmengensystem. Nachweis der Austauscheigenschaft: Sei b ein Element in Y-X mit größter (= spätester) deadline. Dieses Element kann zu X hinzugefügt werden, ohne Lösungseigenschaft zu verletzen.