Datenkompression • Idee 2 (Shannon-Fano): Vorteile: • Das Verfahren ist sehr günstig zu rechnen <strong>–</strong> die Knoten werden sortiert (n log n) und dann werden n-1 Splitpunkte bestimmt (schlimmstenfalls wird immer bis zur „Mitte“+1 jeder Liste aufsummiert, O(log n * (n/2 + 1)), insgesamt also O(n log n). Nachteile: • Das Verfahren ist NICHT optimal! • Beispiel s. Übung 11.06.2008 (c) W. <strong>Conen</strong>, FH GE, <strong>ADS</strong> 32
Datenkompression • Idee 3 (Huffman): Wir ordnen Knoten, die die einzelnen Buchstaben repräsentieren, nach Häufigkeit AUFSTEIGEND in einer Liste an, z.B. [a/1,b/2,c/2,d/3,e/4,f/9,g/13], Ablage am besten in einer PQueue Jetzt entnehmen wir die beiden vorderen Knoten und erzeugen daraus einen neuen Vaterknoten für die beiden entnommenen Knoten. Der neue Knoten erhält als Gewicht die Summen der Gewichte seiner beiden Kinder. Er wird in die PQueue eingefügt! Das wiederholen wir solange, bis nur noch ein Knoten in der PQueue ist. • Machen wir das einmal „abstrakt“ für die Liste oben: Initial: [a/1,b/2,c/2,d/3,e/4,f/9,g/13], a und b entnehmen, (a,b) mit Gewicht 1+2=3 einstellen (kann vor oder auch hinter d/3 landen <strong>–</strong> das ist nicht festgelegt!) [c/2,d/3,(a,b)/3,e/4,f/9,g/13], c und d entnehmen, (c,d) mit Gewicht 5 einstellen [(a,b)/3,e/4,(c,d)/5,f/9,g/13], (a,b) und e entnehmen, (a,b,e) mit Gewicht 7 einstellen [(c,d)/5,(a,b,e)/7,f/9,g/13], (c,d) und (a,b,e) entnehmen, (a,b,c,d,e) mit Gewicht 12 einstellen [f/9,(a,b,c,d,e)/12,g/13], f und (a,b,c,d,e) entnehmen, (a,b,c,d,e,f) mit Gewicht 21 einstellen [(a,b,c,d,e,f)/21,g/13], (a,b,c,d,e,f) und g entnehmen, (a,b,c,d,e,f,g) mit Gewicht 34 einstellen Fertig! 11.06.2008 (c) W. <strong>Conen</strong>, FH GE, <strong>ADS</strong> 33