13 Optimales Kodieren

Werbung
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).
Herunterladen