13 Optimales Kodieren Es soll ein optimaler Kodierer (z.B. Text T) C(T ) entworfen werden, welcher eine Information mit möglichst geringer Bitanzahl eindeutig überträgt. Die Anforderungen an den optimalen Kodierer • sollte schnell kodieren • sollte eindeutig dekodieren (präx-frei) • minimale Kodelänge C(T ) sind: 13.1 Nötige Denitionen Als Beispiel soll der Text='Susanne' kodiert werden. Folgende Denitionen werden benötigt: • T = 'SUSANNE' ist der zu kodierende Text (im allg. eine Information, welche kodiert werden sollte) • Z = {S, U, A, N, E} • |Z| = 5 das Alphabet ist die Gröÿe des Alphabets • fi ist die Auftrittsfrequenz. z.B.: • pi ist die Auftrittswahrscheinlichkeit - z.B.: • Die Entropie der Text T fS = 2, fU = 1 pS = 2 7 , oder pU = 1 7 H(T ) (Pseudoeinheit 'bit') ist die eigentlich Information, die pro Zeichen enthält: H(T ) = − |Z| X pj · log2 pj j=1 Wenn man den Text 'SUSANNE' naiv kodiert, dann benötigt man 3 Bits pro Buchstabe. Für den ganzen Text benötigt man 3 · 7 = 21 Bits. Die Entropie 2.24 Bits pro Buchstabe, (der eigentliche Informationsgehalt) beträgt aber nur was auch die theoretische untere Grenze darstellt. 1 Idee: Zeichen die häuger vorkommen, werden mit weniger Bits belegt. Ein Problem, dass dabei auftritt, ist das Präx-Problem. Damit der Kode eindeutig interpretierbar bleibt, darf kein Buchstabe kodiert ein Präx eines anderen Buchstaben sein. Zum Beispiel wenn 100 C(x1 ) = 10 für 'S' und für 'A' gegeben wäre, dann wäre das Kodestück ...100... dekodierbar! 1 C(x2 ) = nicht eindeutig 13.2 Darstellung des Kodierers Mit der Darstellung des Kodieres (und gleichzeitig des Dekodierers) als Binärbaum kann man präx-Freiheit garantieren. Die Datenstruktur hat dabei folgende Eigenschaften: • Binärbaum (sog. Kodebaum) • Werte sind blattorientiert (daher präxfrei) • Die Wortlänge entspricht der Astlänge li Eine Methode einen solchen Kodebaum zu generieren ist die Methode nach Human. 13.3 Human Die Methode nach Human liefert garantiert einen optimalen Kodebaum. Mit folgender Vorgangsweise wird der Kodebaum konstruiert: • Erstelle einen 'Wald' mit jeweils einen Baum pro Zeichen. • Suche die beiden Bäume mit den kleinsten Wahrscheinlichkeiten und verbinde sie zu einen neuen Baum, welche nun die Summe der Wahrscheinlichkeiten der Unterbäume besitzt. • 1 In Wiederhole den Vorgang, bis nur noch ein Baum übrig ist. der Literatur wird oft der Begri 'prex codes' verwendet. Damit sind aber genau präx-freie Kodes gemeint sind. 2 13.3.1 Implementierung Der Human-Algorithmus kann sehr eektiv mit einer Warteschlange Q mit Pri- oritäten implementiert werden, und zwar mit der Datenstruktur Halde. Dabei wird inverse geordnet - d.h. das Minimum liegt an der Wurzel der Halde. Dem Algorithmus wird das Alphabet fi 's Z mit den zugehörigen Auftrittsfrequenzen übergeben . HUFFMAN (Z,f) 1: n=|Z| 2: INIT_Q (Z) 3: FOR i=1 TO (n-1) 4: z=NEUER_KNOTEN 5: LINKS(z) = MINIMUM(Q), ENTFERNE_MIN 6: RECHTS(z)= MINIMUM(Q), ENTFERNE_MIN 7: f(z) = f(x)+f(y) 8: EINFÜGEN(Q,z) 9: RETURN MINIMUM(Q) Analyse: Alle Operationen der Warteschlange mit Prioritäten (mit einer Halde implementiert) können in nerhalb der Schleife n-mal O(log n) durchgeführt werden. Dabei werden sie in- aufgerufen, d.h. 3 T (n) = O(n · log n).