1 / 18

Greedy-Algorithmus

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.

Télécharger la présentation

Greedy-Algorithmus

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Greedy-Algorithmus Greedy-Algorithmen sind mit dem dynamischenProgrammieren 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 Greedyauf 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.

  2. die die „Güte“ einer Lösung (auch einer Teillösung) misst. Es soll eine Lösung mitmaximalen 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 limit 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. Annahme: Es gibt eine Gewichtsfunktion w,

  3. 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 Huffman-Codes 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

  4. 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örternur an den Blättern anzutreffen sind. Ein Präfixcodeist 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. Dieser Code hat eine mittlere Codewortlänge - bezogen auf die

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

  6. 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: Wenn beispielsweise die Folge 100 0 1100 1100 1101 1101 c a f f e e Präfixcodes sind nicht die einzigen eindeutig entzifferbaren Codes.

  7. Greedy-Algorithmus generiert diesen Baum auf folgende Weise: Initialisierung: pro Zeichen 1 Baum mit 1 Blatt, Label ist dieWahrscheinlichkeit 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%!

  8. 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. Der Huffman-Algorithmus konstruiert einen optimalen Codebaum .

  9. 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

  10. 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. Der einem Teilmengensystem (E, U) und Gewichtsfunktion

  11. 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.

  12. 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.

  13. 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 Gewichtsfunktionw : E   sei definiert durch Satz: Sei (E,U) ein Teilmengensystem. Der kanonische r + 1, x  A, r, x  B - A, 0, sonst w(x) =

  14. 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. Der Greedy-Algorithmus wählt dann eine Menge T

  15. Auftragsplanung: Gegeben: Menge A von n "Aufträgen", jeweils in einer Zeiteinheit zu bewältigen, zu jedem Auftrag i gibt es Gewinn piund 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.

  16. 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 Beispiel: Auftragsplanung

  17. 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. Greedy Algorithmus:

  18. 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.

More Related