V15 ALPI Huffman-Kodierung 2013 - inf.fu-berlin.de · sich Huffman einen optimalen Algorithmus...

59
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

Transcript of V15 ALPI Huffman-Kodierung 2013 - inf.fu-berlin.de · sich Huffman einen optimalen Algorithmus...

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

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

Erzeugung des Huffman-Baumes

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

V

1

?

1

2

4

Prof. Dr. Margarita Esponda

Erzeugung des Huffman-Baumes

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

V

1

?

1

2

4

Prof. Dr. Margarita Esponda

Erzeugung des Huffman-Baumes

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

V

1

?

1

2

4

M

2

B

2

4

Prof. Dr. Margarita Esponda

Erzeugung des Huffman-Baumes

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

V

1

?

1

2

44

Prof. Dr. Margarita Esponda

Erzeugung des Huffman-Baumes

M

2

B

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

V

1

?

1

2

44

U

2

I

2

4

Prof. Dr. Margarita Esponda

Erzeugung des Huffman-Baumes

M

2

B

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

V

1

?

1

2

44

U

2

I

2

4

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

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

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

71

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