Huffman-Kodierung

Werbung
Funktionale Programmierung
Huffman-Kodierung
Bildquelle: http://www.fim.uni-linz.ac.at/lva/Rechtliche_Aspekte/2001SS/Stegano/bilder/huffman.gif
Prof. Dr. Margarita Esponda
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
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
Datenkompression
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:
original
XXXXXXXBBBQTTTTTTTTTTTTKKKKK
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
10 10 13 6
000000011111111111100000000000000001111
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
0
1
2
3
4
5
6
7
8
9
2
2
2
2
2
2
2
2
2
2
gut für GIF-Kompression
Prof. Dr. Margarita Esponda
1
8
1
1
1
1
8
1
1
1
4
3
6
6
6
6
1
1
1
1
4
4
4
3
3
3
2
2
2
*2
*2
*2
*1
2
*0
*0
1
8
1
4
3
6
1
1
4
3
schlecht für GIF-Kompression
Funktionale Programmierung
Kodierung mit variabler Länge
Frage
Wie können Zeichen kodiert werden, sodass die Bit-Länge
eines Textes minimiert wird?
Wenn wir n verschiedene Zeichen mit einer festen BitLänge kodieren möchten, brauchen wir mindestens
⎡log2 n⎤ Bits für die Kodierung jedes Zeichens.
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
Entropie
Informationstheorie
A Mathematical Theory of Communication
1948
Claude Shannon
Die Entropie eines Zeichensystems
ist ein Maß für den mittleren
Informationsgehalt des Systems.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Entropie
Nachricht
z1..z2..z1..z3……z7
Quelle
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)
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Entropie
Nachricht
z1..z2..z1..z3……z7
Quelle
Der mittlere Informationsgehalt der gesamten Quelle wird als die
Entropie der Nachricht bezeichnet und wie folgt definiert:
n
H(A) =
Σ pi log (1/pi)
i=1
Wir brauchen
Prof. Dr. Margarita Esponda
log2 (1/pi ) Bits um zi zu kodieren
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:
Keine Bitkodierung eines Zeichens darf als Präfix in
der Kodierung eines anderen Zeichens vorkommen.
Beispiel:
Wenn die Kodierung von A 101 ist,
darf keine andere Zeichenkodierung die Bits 101 am
Anfang haben.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Code
Trie
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.
C
A
Prof. Dr. Margarita Esponda
B
D
E
Funktionale Programmierung
Erzeugung des Huffman-Code
1. Die Häufigkeiten der Zeichen werden berechnet
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?
Häufigkeiten
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
3
2
2
2
1
1
1
1
Prof. Dr. Margarita Esponda
4
3 2
Funktionale Programmierung
Erzeugung des Huffman-Code
2. Der Trie-Baum wird wie folgt erzeugt.
L
1
P
1
V
1
?
M
1
2
B
2
U
2
I
W A
S
C
H
R D
T
N _
2
3
4
4
4
4
4
6
3
4
E
9 14
L
P
V
?
M
B
U
I
W
A
S
C
H
R
D
T
N
_
E
1
1
1
1
2
2
2
2
3
3
4
4
4
4
4
4
6
9
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.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Baumes
L
P
V
?
M
B
U
I
W
A
S
C
H
R
D
T
N
_
E
1
1
1
1
2
2
2
2
3
3
4
4
4
4
4
4
6
9
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.
V
?
M
B
U
I
W
A
S
C
H
R
D
T
N
_
E
1
1
2
2
2
2
3
3
4
4
4
4
4
4
6
9
14
2
L
P
1
1
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Baumes
V
?
1
1
2
L
P
1
1
M
B
U
I
W
A
S
C
H
R
D
T
N
_
E
2
2
2
2
3
3
4
4
4
4
4
4
6
9
14
3. Zum Schluss wird die Wurzel des neuen Binärbaums wieder in die
priority-queue eingefügt.
Prof. Dr. Margarita Esponda
Funktionale Programmierung
Erzeugung des Huffman-Baumes
2
2
V
?
1
1
L
P
1
1
Prof. Dr. Margarita Esponda
M
B
U
I
W
A
S
C
H
R
D
T
N
_
E
2
2
2
2
3
3
4
4
4
4
4
4
6
9
14
Erzeugung des Huffman-Baumes
2
2
V
?
L
P
1
1
1
1
Prof. Dr. Margarita Esponda
M
B
U
I
W
A
S
C
H
R
D
T
N
_
E
2
2
2
2
3
3
4
4
4
4
4
4
6
9
14
Erzeugung des Huffman-Baumes
4
2
2
V
?
L
P
1
1
1
1
Prof. Dr. Margarita Esponda
M
B
U
I
W
A
S
C
H
R
D
T
N
_
E
2
2
2
2
3
3
4
4
4
4
4
4
6
9
14
Erzeugung des Huffman-Baumes
M
B
U
I
W
A
2
2
2
2
3
3
4
2
Prof. Dr. Margarita Esponda
S
C
H
R
D
T
N
_
E
4
4
4
4
4
4
6
9
14
2
V
?
L
P
1
1
1
1
Erzeugung des Huffman-Baumes
U
I
W
A
2
2
3
3
4
S
C
H
R
D
T
N
_
E
4
4
4
4
4
4
6
9
14
4
2
M
B
2
2
Prof. Dr. Margarita Esponda
2
V
?
L
P
1
1
1
1
Erzeugung des Huffman-Baumes
U
I
W
A
2
2
3
3
Prof. Dr. Margarita Esponda
4
4
M
B
2
2
2
S
C
H
R
D
T
N
_
E
4
4
4
4
4
4
6
9
14
2
V
?
L
P
1
1
1
1
Erzeugung des Huffman-Baumes
W
A
3
3
4
4
S
C
H
R
D
T
N
_
E
4
4
4
4
4
4
6
9
14
4
U
I
2
2
Prof. Dr. Margarita Esponda
M
B
2
2
2
2
V
?
L
P
1
1
1
1
Erzeugung des Huffman-Baumes
W
A
3
3
Prof. Dr. Margarita Esponda
4
4
4
U
I
M
B
2
2
2
2
2
S
C
H
R
D
T
N
_
E
4
4
4
4
4
4
6
9
14
2
V
?
L
P
1
1
1
1
Erzeugung des Huffman-Baumes
4
4
4
S
C
H
R
D
T
N
_
E
4
4
4
4
4
4
6
9
14
6
W
A
3
3
Prof. Dr. Margarita Esponda
U
I
M
B
2
2
2
2
2
2
V
?
L
P
1
1
1
1
Erzeugung des Huffman-Baumes
4
Prof. Dr. Margarita Esponda
4
4
U
I
M
B
2
2
2
2
2
S
C
H
R
D
T
4
4
4
4
4
4
2
V
?
L
P
1
1
1
1
6
W
A
3
3
N
_
E
6
9
14
Erzeugung des Huffman-Baumes
4
S
C
H
R
D
T
4
4
4
4
4
4
8
2
4
4
U
I
M
B
2
2
2
2
Prof. Dr. Margarita Esponda
2
V
?
L
P
1
1
1
1
6
W
A
3
3
N
_
E
6
9
14
Erzeugung des Huffman-Baumes
4
2
S
C
H
R
D
T
4
4
4
4
4
4
2
V
?
L
P
1
1
1
1
Prof. Dr. Margarita Esponda
N
6
8
6
W
A
3
3
4
_
E
9
14
4
U
I
M
B
2
2
2
2
Erzeugung des Huffman-Baumes
C
H
R
D
T
4
4
4
4
4
N
6
8
6
_
E
9
14
8
S
4
2
W
A
3
3
4
4
4
2
V
?
L
P
1
1
1
1
Prof. Dr. Margarita Esponda
U
I
M
B
2
2
2
2
Erzeugung des Huffman-Baumes
C
H
R
D
T
4
4
4
4
4
N
6
8
6
W
A
3
3
E
9
14
S
4
2
Prof. Dr. Margarita Esponda
8
_
4
4
2
V
?
L
P
1
1
1
1
4
U
I
M
B
2
2
2
2
Erzeugung des Huffman-Baumes
8
C
H
4
4
R
D
T
4
4
4
N
6
8
6
W
A
3
3
E
9
14
S
4
2
Prof. Dr. Margarita Esponda
8
_
4
4
2
V
?
L
P
1
1
1
1
4
U
I
M
B
2
2
2
2
Erzeugung des Huffman-Baumes
R
D
T
4
4
4
N
6
8
6
8
W
A
C
H
3
3
4
4
E
9
14
S
4
2
Prof. Dr. Margarita Esponda
8
_
4
4
2
V
?
L
P
1
1
1
1
4
U
I
M
B
2
2
2
2
Erzeugung des Huffman-Baumes
T
N
6
4
8
6
8
8
_
E
9
14
8
R
D
4
4
W
A
C
H
3
3
4
4
S
4
2
Prof. Dr. Margarita Esponda
4
4
2
V
?
L
P
1
1
1
1
4
U
I
M
B
2
2
2
2
Erzeugung des Huffman-Baumes
T
N
6
4
8
6
8
8
W
A
R
D
C
H
3
3
4
4
4
4
E
9
14
S
4
2
Prof. Dr. Margarita Esponda
8
_
4
4
2
V
?
L
P
1
1
1
1
4
U
I
M
B
2
2
2
2
Erzeugung des Huffman-Baumes
N
8
6
10
8
8
R
D
C
H
4
4
4
4
8
_
E
9
14
S
4
4
4
4
T
6
4
2
W
A
3
3
Prof. Dr. Margarita Esponda
2
V
?
L
P
1
1
1
1
U
I
M
B
2
2
2
2
Erzeugung des Huffman-Baumes
N
_
8
6
8
8
R
D
C
H
4
4
4
4
4
V
?
L
P
1
1
1
1
14
T
4
4
2
10
9
S
2
Prof. Dr. Margarita Esponda
8
E
4
6
4
U
I
M
B
W
A
2
2
2
2
3
3
Erzeugung des Huffman-Baumes
_
8
8
8
E
10
9
14
14
N
6
Prof. Dr. Margarita Esponda
C
H
4
4
S
4
T
4
4
4
6
4
8
R
D
4
4
2
2
V
?
L
P
1
1
1
1
U
I
M
B
W
A
2
2
2
2
3
3
Erzeugung des Huffman-Baumes
E
_
8
8
C
H
4
4
4
V
?
L
P
1
1
1
1
14
4
4
14
N
T
4
2
10
9
S
2
Prof. Dr. Margarita Esponda
8
6
4
6
8
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Erzeugung des Huffman-Baumes
_
8
E
10
9
14
14
16
N
T
4
8
C
H
4
4
6
4
6
8
8
S
4
2
4
2
V
?
L
P
1
1
1
1
Prof. Dr. Margarita Esponda
4
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Erzeugung des Huffman-Baumes
_
8
E
10
9
14
N
T
4
4
16
14
6
4
6
8
8
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
C
H
4
4
8
S
4
2
Prof. Dr. Margarita Esponda
4
2
V
?
L
P
1
1
1
1
Erzeugung des Huffman-Baumes
E
10
14
16
14
17
N
T
_
8
4
6
4
6
8
8
9
W
A
R
D
3
3
4
4
C
H
4
4
8
S
4
4
4
U
I
M
B
2
2
2
2
Prof. Dr. Margarita Esponda
2
2
V
?
L
P
1
1
1
1
Erzeugung des Huffman-Baumes
E
10
14
16
14
_
N
T
6
4
6
8
8
W
A
R
D
3
3
4
4
C
H
4
4
8
8
9
S
4
2
Prof. Dr. Margarita Esponda
17
4
4
2
V
?
L
P
1
1
1
1
4
U
I
M
B
2
2
2
2
Erzeugung des Huffman-Baumes
E
16
14
17
24
_
8
10
14
N
T
6
4
6
H
4
4
A
R
D
3
3
4
4
9
S
4
2
4
4
8
W
Prof. Dr. Margarita Esponda
C
8
8
2
V
?
L
P
1
1
1
1
4
U
I
M
B
2
2
2
2
Erzeugung des Huffman-Baumes
E
16
14
24
17
_
8
C
H
4
4
4
V
?
L
P
1
1
1
1
14
N
T
4
4
2
10
9
S
2
Prof. Dr. Margarita Esponda
8
8
6
4
4
6
8
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Erzeugung des Huffman-Baumes
24
17
30
_
8
E
16
14
C
H
4
4
N
6
4
4
6
8
8
S
4
2
Prof. Dr. Margarita Esponda
14
T
4
8
10
9
4
2
V
?
L
P
1
1
1
1
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Erzeugung des Huffman-Baumes
24
17
30
E
_
8
10
9
N
T
4
6
4
4
16
14
14
6
8
8
U
I
M
B
W
A
R
D
C
H
2
2
2
2
3
3
4
4
4
4
8
S
4
2
Prof. Dr. Margarita Esponda
4
2
V
?
L
P
1
1
1
1
Erzeugung des Huffman-Baumes
30
41
E
16
14
24
17
8
8
_
8
10
9
14
6
4
4
H
4
4
S
4
6
8
2
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Prof. Dr. Margarita Esponda
4
N
T
4
C
2
V
?
L
P
1
1
1
1
Erzeugung des Huffman-Baumes
41
30
E
16
14
24
17
_
8
C
H
4
4
4
V
?
L
P
1
1
1
1
14
N
T
4
2
10
9
S
2
Prof. Dr. Margarita Esponda
8
8
4
6
4
4
6
8
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Erzeugung des Huffman-Baumes
71
41
30
E
16
14
24
17
_
8
C
H
4
4
8
8
S
4
2
V
?
L
P
1
1
1
1
14
N
T
4
2
10
9
4
6
4
4
6
8
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Kodierung der Zeichen
Der Code jedes
Zeichens wird aus dem
Weg von der Wurzel
des Baumes bis zu
dem entsprechenden
0
Buchstaben aus den
E
Kanten abgelesen.
14
71
0
1
30
0
1
16
0
0
8
0
C 0100
C
H
H 0101
.
4
4
.
.
0
0
S
4
10
9
1
4
1
2
0
1 0
1
V 011000
V
?
L
P
? 011001
1
1
1
1
Prof. Dr. Margarita Esponda
1
14
1
0
0
0
1 0
U
I
M
2
2
2
6
4
4
1
N
T
4
2
0
1
8
1
0
24
_
8
1
1
17
1
E 00
_ 101
41
6
8
0
1
0
1
B
W
A
R
D
2
3
3
4
4
1
Dekodierung
0010110010111010111100101
E
71
0
1
30
0
0
1
41
1
E
14
16
0
24
17
1
0
0
1
1
_
0
8
8
1
C
H
4
4
0
0
S
4
1
2
0
2
1 0
1
V
?
L
P
1
1
1
1
Prof. Dr. Margarita Esponda
10
9
1
14
1
0
4
1 0
N
6
4
1
1
0
T
4
4
0
0
8
1
6
8
0
1
0
1
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Dekodierung
0010110010111010111100101
E
71
0
1
30
0
_
0
1
41
1
E
14
16
0
24
17
1
0
0
1
1
_
0
8
8
1
C
H
4
4
0
0
S
4
1
2
0
2
1 0
1
V
?
L
P
1
1
1
1
Prof. Dr. Margarita Esponda
10
9
1
14
1
0
4
1 0
N
6
4
1
1
0
T
4
4
0
0
8
1
6
8
0
1
0
1
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Dekodierung
0010110010111010111100101
E
71
0
M
1
30
0
_
0
1
41
1
E
14
16
0
24
17
1
0
0
1
1
_
0
8
8
1
C
H
4
4
0
0
S
4
1
2
0
2
1 0
1
V
?
L
P
1
1
1
1
Prof. Dr. Margarita Esponda
10
9
1
14
1
0
4
1 0
N
6
4
1
1
0
T
4
4
0
0
8
1
6
8
0
1
0
1
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Dekodierung
0010110010111010111100101
_
E
_
M
N
H
N
71
0
Damit die Information später
dekodiert werden kann, muss
1
30
0
0
1
der dazu gehörige Huffman-
41
Baum in der komprimierten
Datei beinhaltet sein.
1
E
14
16
0
24
17
1
0
0
1
1
_
0
8
8
1
C
H
4
4
0
0
S
4
1
2
0
2
1 0
1
V
?
L
P
1
1
1
1
Prof. Dr. Margarita Esponda
10
9
1
14
1
0
4
1 0
N
6
4
1
1
0
T
4
4
0
0
8
1
6
8
0
1
0
1
U
I
M
B
W
A
R
D
2
2
2
2
3
3
4
4
Herunterladen