Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

G.Heyer Algorithmen und Datenstrukturen II 1 Greedy-Algorithmus Greedy-Algorithmen sind mit dem dynamischen Programmieren verwandt, jedoch einfacher. Die.

Ähnliche Präsentationen


Präsentation zum Thema: "G.Heyer Algorithmen und Datenstrukturen II 1 Greedy-Algorithmus Greedy-Algorithmen sind mit dem dynamischen Programmieren verwandt, jedoch einfacher. Die."—  Präsentation transkript:

1 G.Heyer Algorithmen und Datenstrukturen II 1 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.

2 G.Heyer Algorithmen und Datenstrukturen II 2 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 l 1,..., l k führen, wähle diejenige Teillösung l i mit w (l i ) 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.

3 G.Heyer Algorithmen und Datenstrukturen II 3 Huffman-Codes Gegeben: = {a 1,..., a n } Alphabet, p i Wahrscheinlichkeit oder Häufigkeit von a i. Gesucht: optimaler Präfixcode, d. h. c : -> {0,1}*, so daß 1) kein Codewort c(a i) Anfangsstück des Codes eines anderen Zeichens c(a j ) ist, und 2) die mittlere Codewortlänge Beispiel: {a,b,c,d,e,f} p:Code: a0,450 b0,13101 c0,12100 d0,16111 e0, f0, p i * |c(a i )| minimal ist. n i = 1

4 G.Heyer Algorithmen und Datenstrukturen II 4 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.

5 G.Heyer Algorithmen und Datenstrukturen II 5 Code läßt sich als Codebaum darstellen: (nach links 0, nach rechts 1) a f bc 1 e d

6 G.Heyer Algorithmen und Datenstrukturen II 6 Wenn beispielsweise die Folge 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: Präfixcodes sind nicht die einzigen eindeutig entzifferbaren Codes c a f f e e

7 G.Heyer Algorithmen und Datenstrukturen II 7 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%!

8 G.Heyer Algorithmen und Datenstrukturen II 8 Der Huffman-Algorithmus konstruiert einen optimalen Codebaum. Behauptung: Seien a 1,..., a n so durchnummeriert, dass p (a 1 ) p(a 2 )... p(a n ). Dann gibt es einen optimalen Codebaum B, so dass die beiden Blätter a 1 und a 2 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 (a 1, a 2, a 3,... a n ) mit p ((a 1, a 2 ))= p (a 1 ) + p(a 2 ) optimal. Das Ergebnis ist der Baum B. Indem wir das Blatt (a 1, a 2 ) expandieren und die zwei neuen Blätter a 1 und a 2 anfügen, erhalten wir als Ergebnis genau einen Baum B. Wenn es nun einen optimalen Codebaum C für (a 1, a 2, a 3,... a n ) gäbe, dann wäre dieser Baum identisch mit B, d.h. a 1 und a 2 haben einen gemeinsamen Vaterknoten.

9 G.Heyer Algorithmen und Datenstrukturen II 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 G.Heyer Algorithmen und Datenstrukturen II 10 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 ( e 1 )... w (e n ) T = 0; for ( k = 1; k = n; k++) if ( T {e k } U ) T = T {e k }; 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.

11 G.Heyer Algorithmen und Datenstrukturen II 11 Beispiel: Sei E = { e 1, e 2, e 3 } U = { 0, {d 1 }, {e 2 }, {e 3 }, {e 2,e 3 } } mit w(e 1 ) = 3 w(e 2 ) = w(e 3 ) = 2 Dann liefert der kanonische Greedy-Algorithmus die Lösung T = {e 1 } mit w(T) = 3, während die optimale Lösung dagegen T = {e 2,e 3 } mit w(T) = 4 ist.

12 G.Heyer Algorithmen und Datenstrukturen II 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 = { e 1 } und B = { e 2, e 3 } verletzt.

13 G.Heyer Algorithmen und Datenstrukturen II 13 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 w(x) = r + 1,x A, r,x B - A, 0,sonst

14 G.Heyer Algorithmen und Datenstrukturen II 14 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) = r Wählt man stattdessen eine Lösung T B, so hat diese den Wert w(T) r * |B| = r 2. 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.

15 G.Heyer Algorithmen und Datenstrukturen II 15 Auftragsplanung: Gegeben: Menge A von n "Aufträgen", jeweils in einer Zeiteinheit zu bewältigen, zu jedem Auftrag i gibt es Gewinn p i und Termin d i, 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 G.Heyer Algorithmen und Datenstrukturen II 16 Beispiel: Auftragsplanung JobGewinnDeadline LösungGewinn 3,2,440 4,230 1,2,450 beste Lösung

17 G.Heyer Algorithmen und Datenstrukturen II 17 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.

18 G.Heyer Algorithmen und Datenstrukturen II 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.


Herunterladen ppt "G.Heyer Algorithmen und Datenstrukturen II 1 Greedy-Algorithmus Greedy-Algorithmen sind mit dem dynamischen Programmieren verwandt, jedoch einfacher. Die."

Ähnliche Präsentationen


Google-Anzeigen