V15 ALPI Huffman-Kodierung 2013 - inf.fu-berlin.de · sich Huffman einen optimalen Algorithmus ausgedacht, mit dem die Kodierung und Dekodierung von Information realisiert werden
Post on 10-Oct-2019
1 Views
Preview:
Transcript
Huffman-Kodierung
Prof. Dr. Margarita Esponda
Bildquelle: http://www.fim.uni-linz.ac.at/lva/Rechtliche_Aspekte/2001SS/Stegano/bilder/huffman.gif
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Motivation
Wir möchten Nachrichten komprimieren:
- Speicherplatzreduzierung =>
Energie und Zeit bei Übertragung sparen
- ohne Informationsverlust
- mit einer effizienten Wiederherstellung der
originalen Information
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Zwei Lösungen
Datenkompression
Lauflängenkodierung
Lange Folgen sich wiederholender Zeichen können
in einer kompakten Form kodiert werden, indem
jede Folge durch die Anzahl der Wiederholungen
und eine einmalige Angabe des sich
wiederholenden Zeichens ersetzt wird.
Kodierung mit variabler Länge
Häufige Zeichen werden mit möglichst kurzen
Bitfolgen kodiert und längere Bitfolgen werden für
nicht sehr häufige Zeichen benutzt.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Datenkomprimierung
Lauflängenkodierung
Beispiele:
XXXXXXXBBBQTTTTTTTTTTTTKKKKK
original Kompakte Form
7X3B1Q12T5K
Bei binär kodierten Dateien brauchen wir nicht einmal die Zeichen
anzugeben, weil wir wissen, dass die Läufe sich nur zwischen 0
und 1 abwechseln.
000000000011111111110000000000000111111
000000011111111111100000000000000001111
10 10 13 6
7 12 16 4
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Lauflängenkodierung
compress :: (Eq a) => [a] -> [(a, Int)]
compress [] = []compress (x:xs) = enc [] (x,1) xs
where enc :: (Eq a) => [(a, Int)] -> (a, Int) -> [a] -> [(a, Int)]
enc ls (x,n) [] = ls ++ [(x,n)] enc ls (x,n) (y:ys)
| x==y = enc ls (x, n+1) ys | otherwise = enc (ls ++ [(x,n)]) (y,1) ys
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Lauflängenkodierung
GIF-Kompression
2 1 4 32 82 1 6 12 1 6 12 1 6 12 1 6 12 82 1 4 32 1 4 32 1 4 3
123456789
0 2 1 4 32 82 1 6 1*2*2*2*12 1 4 3*0*0
gut für GIF-Kompression schlecht für GIF-Kompression
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Kodierung mit variabler Länge
Wie können Zeichen kodiert werden, sodass die Bit-Länge
eines Textes minimiert wird?
Wenn wir n verschiedene Zeichen mit einer festen Bit-
Länge kodieren möchten, brauchen wir mindestens
⎡log2 n⎤ Bits für die Kodierung jedes Zeichens.
Frage
Zeichen werden normalerweise mit 8 Bits (ASCII-Code) oder 16 Bits
(UNICODE) kodiert.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Kodierung mit variabler Länge
Grundlegende Idee:
Die Anzahl der Bits für die Kodierung der einzelnen Zeichen
an die Häufigkeit innerhalb des Textes anzupassen.
Kürzere Bitfolgen für häufige Zeichen und längere Bitfolgen
für seltene Zeichen.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
EntropieInformationstheorie
1948
Claude Shannon Die Entropie eines Zeichensystems
ist ein Maß für den mittleren
Informationsgehalt des Systems.
A Mathematical Theory of Communication
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Entropie
Die Information, die ein Zeichen trägt, hängt von seiner Häufigkeit
ab. Seltene Zeichen vermitteln mehr Information als häufige
Zeichen.
Beispiel:
Beim Worträtsel hilft es viel mehr, zu wissen, dass ein seltener
Buchstabe vorkommt als einer, der sehr häufig auftritt.
Wenn die Wahrscheinlichkeit des Auftretens eines bestimmten
Zeichens zi gleich pi ist,
wird der Informationsgehalt von zi wie folgt definiert:
Hi = log (1/pi)
Quelle z1..z2..z1..z3……z7
Nachricht
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Entropie
Der mittlere Informationsgehalt der gesamten Quelle wird als die
Entropie der Nachricht bezeichnet und wie folgt definiert:
Quelle z1..z2..z1..z3……z7
Nachricht
Wir brauchen log2 (1/pi ) Bits um zi zu kodieren
H(A) = Σ pi log (1/pi) i=1
n
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Datenkomprimierung
Kodierung mit variabler Länge
Die Häufigkeit der Zeichen hängt von der Art der Information ab.
Beispiel:WELCHE BUCHSTABEN WERDEN IN DER DEUTSCHEN
SPRACHE AM HÄUFIGSTEN VERWENDET?
E _ N S C H R D T W A M B U I L P V ?
14 9 6 4 4 4 4 4 4 3 3 2 2 2 2 1 1 1 1
00 101 . . . . 0100 0101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 011000 011001
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Kodierung mit variabler Länge
Wie kann man für eine beliebige Zeichenfolge die optimale
Kodierung mit variabler Länge festlegen?
Ich will die Bitfolge dekodieren. Wie kann ich wissen,
wann die Kodierung eines Zeichens zu Ende ist?
01001101011111000001110101010101000100001111
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Huffman-Kodierung
David A. Huffman stellte 1952 einen Algorithmus,
der aus einer gegebenen Nachricht einen
Präfixkode erstellt, der die Länge einer kodierten
Nachricht minimiert.
Eine konstante Wahrscheinlichkeitsverteilung der
einzelnen Zeichen wird verwendet.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Kodierung mit variabler Länge
Für diese Art der Komprimierung mit variabler Länge hat
sich Huffman einen optimalen Algorithmus ausgedacht,
mit dem die Kodierung und Dekodierung von Information
realisiert werden kann.
Die Huffman-Kodierung wird überall für die
Datenkomprimierung verwendet, und je nachdem, welche
Eigenschaften die Daten haben, spart man meistens
zwischen 10% und 90% des ursprünglichen Platzes.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Kodierung mit variabler Länge
Präfix-Kodierung
Um aus einer Bitfolge Zeichen mit einer variablen Bitlänge
eindeutig zu erkennen, muss die Kodierung die Eigenschaft
haben:
Wenn die Kodierung von A 101 ist,
darf keine andere Zeichenkodierung die Bits 101 am
Anfang haben.
Beispiel:
Keine Bitkodierung eines Zeichens darf als Präfix in
der Kodierung eines anderen Zeichens vorkommen.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Code
Für die Dekodierung brauchen wir eine effiziente allgemeine
Darstellung der Kodierung aller Zeichen, und das wird mit einer
Trie-Datenstruktur gemacht.
Ein Trie ist eine Baumstruktur mit der Eigenschaft, dass die
Information sich nur in den Blättern befindet. Die inneren Knoten
sind nur Verkettungsknoten.
Trie
A B
C
D E
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Code
Nehmen wir an, wir wollen eine Textdatei komprimieren.
Zuerst zählen wir, wie oft jedes Zeichen in der Datei vorkommt.
Beispiel:
WELCHE BUCHSTABEN WERDEN IN DER DEUTSCHEN SPRACHE AM HÄUFIGSTEN VERWENDET?
E _ N S C H R D T W A M B U I L P V ?
14 9 6 4 4 4 4 4 4 3 3 2 2 2 2 1 1 1 1
Häufigkeiten
1. Die Häufigkeiten der Zeichen werden berechnet
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Code
L P V ? M B U I W A S C H R D T N _ E
2. Der Trie-Baum wird wie folgt erzeugt.
L
1
P
1
V
1
?
1
M
2
B
2
U
2
I
2
W
3
A
3
S
4
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
Die Häufigkeiten werden in einer Min-Priority-Queue gespeichert.
Eine Min-Priority-Queue ist nichts anderes als eine Datenstruktur, auf der die Operationen Extract-Min und Insert definiert sind.
1 1 1 1 2 2 2 2 3 3 4 4 4 4 4 4 6 9 14
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Baumes
L
1
P
1
V
1
?
1
M
2
B
2
U
2
I
2
W
3
A
3
S
4
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
1. Die zwei Knoten mit den kleinsten Häufigkeiten in der prioriry-queue werden extrahiert und deren Häufigkeiten addiert.
2. Die Summe wird in einem neu erzeugten Knoten gespeichert, der als linkes und rechtes Kind die zwei extrahierten Knoten hat.
L
1
P
1
2
V
1
?
1
M
2
B
2
U
2
I
2
W
3
A
3
S
4
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
L
1
P
1
2
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Baumes
3. Zum Schluss wird die Wurzel des neuen Binärbaums wieder in die
priority-queue eingefügt.
L
1
P
1
2
V
1
?
1
M
2
B
2
U
2
I
2
W
3
A
3
S
4
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Baumes
L
1
P
1
2
V
1
?
1
2
M
2
B
2
U
2
I
2
W
3
A
3
S
4
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Baumes
M
2
B
2
S
4
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
L
1
P
1
2
V
1
?
1
2
44
U
2
I
2
4
W
3
A
3
6
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
M
2
B
2
S
4
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
L
1
P
1
2
V
1
?
1
2
44
U
2
I
2
4
W
3
A
3
6
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
S
4
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
L
1
P
1
2
V
1
?
1
2
4
W
3
A
3
6
M
2
B
2
4
U
2
I
2
4
8
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
S
4
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
L
1
P
1
2
V
1
?
1
2
4
W
3
A
3
6
M
2
B
2
4
U
2
I
2
4
8
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
S
4
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
L
1
P
1
2
V
1
?
1
2
4
W
3
A
3
6
M
2
B
2
4
U
2
I
2
4
8
8
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
C
4
H
4
R
4
D
4
T
4
N
6
_
9
E
14
W
3
A
3
6
M
2
B
2
4
U
2
I
2
4
8
S
4
L
1
P
1
2
V
1
?
1
2
4
8
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
R
4
D
4
T
4
N
6
_
9
E
14
W
3
A
3
6
M
2
B
2
4
U
2
I
2
4
8
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
R
4
D
4
T
4
N
6
_
9
E
14
W
3
A
3
6
M
2
B
2
4
U
2
I
2
4
8
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
T
4
N
6
_
9
E
14
W
3
A
3
6
M
2
B
2
4
U
2
I
2
4
8
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
R
4
D
4
8
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
T
4
N
6
_
9
E
14
W
3
A
3
6
M
2
B
2
4
U
2
I
2
4
8
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
R
4
D
4
8
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
T
4
N
6
_
9
E
14
W
3
A
3
6M
2
B
2
4
U
2
I
2
4
8
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
R
4
D
4
8
10
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
N
6
_
9
E
14
M
2
B
2
4
U
2
I
2
4
8
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
R
4
D
4
8
T
4
W
3
A
3
6
10
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
_
9
E
14
M
2
B
2
4
U
2
I
2
4
8
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
_
9
E
14
M
2
B
2
4
U
2
I
2
4
8
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
_
9
E
14
M
2
B
2
4
U
2
I
2
4
8
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
_
9
E
14
M
2
B
2
4
U
2
I
2
4
8
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
E
14
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
_
9
M
2
B
2
4
U
2
I
2
4
8
17
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
E
14
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
_
9
M
2
B
2
4
U
2
I
2
4
8
17
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
30
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
30
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
30
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
41
Prof. Dr. Margarita Esponda
Erzeugung des Huffman-Baumes
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
30
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
41
Prof. Dr. Margarita Esponda
Kodierung der Zeichen
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
30
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
41
710 1
0
0
0 0
0
0 0
0 0 0 0
00
0
0
0
0
1 1
1
1
1111
1
1
1
1
1
1
1
1
E 00
Der Code jedes Zeichens wird aus dem Weg von der Wurzel des Baumes bis zu dem entsprechenden Buchstaben aus den Kanten abgelesen.
C 0100
_ 101
H 0101
1
.
.
.
V 011000
? 011001
Prof. Dr. Margarita Esponda
Dekodierung
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
30
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
41
710 1
0
0
0 0
0
0 0
0 0 0 0
00
0
0
0
0
1 1
1
1
1111
1
1
1
1
1
1
1
11
0 0 1 0 1 1 0 0 1 0 1 1 1 0 1 0 1 1 1 1 0 0 1 0 1E
Prof. Dr. Margarita Esponda
Dekodierung
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
30
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
41
710 1
0
0
0 0
0
0 0
0 0 0 0
00
0
0
0
0
1 1
1
1
1111
1
1
1
1
1
1
1
11
0 0 1 0 1 1 0 0 1 0 1 1 1 0 1 0 1 1 1 1 0 0 1 0 1
E _
Prof. Dr. Margarita Esponda
Dekodierung
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
30
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
41
710 1
0
0
0 0
0
0 0
0 0 0 0
00
0
0
0
0
1 1
1
1
1111
1
1
1
1
1
1
1
11
0 0 1 0 1 1 0 0 1 0 1 1 1 0 1 0 1 1 1 1 0 0 1 0 1
E _ M
Prof. Dr. Margarita Esponda
Dekodierung
E
14
S
4
L
1
P
1
2
V
1
?
1
2
4
8
C
4
H
4
8
16
30
_
9
M
2
B
2
4
U
2
I
2
4
8
17
T
4
W
3
A
3
6
10
N
6
R
4
D
4
8
14
24
41
710 1
0
0
0 0
0
0 0
0 0 0 0
00
0
0
0
0
1 1
1
1
1111
1
1
1
1
1
1
1
11
0 0 1 0 1 1 0 0 1 0 1 1 1 0 1 0 1 1 1 1 0 0 1 0 1
E _ M N _ N H
Damit die Information später dekodiert werden kann, muss
der dazu gehörige Huffman-
Baum in der komprimierten Datei beinhaltet sein.
Prof. Dr. Margarita Esponda
top related