Referat zum Thema Huffman-Codes Huffman-Codes

Werbung
Referat zum Thema
Huffman-Codes
Darko Ostricki
Yüksel Kahraman
05.02.2004
1
Huffman-Codes
Huffman-Codes ( David A. Huffman, 1951) sind Präfix-Codes und das
beste - optimale - Verfahren für die Codierung einzelner Zeichen,
denen bestimmte Auftrittswahrscheinlichkeiten zugeordnet sind.
Huffman-Codes sind bei der Datenkompression sehr
effektiv.
Einspaarungen von bis zu 20% bis 90 % sind möglich.
05.02.2004
2
1
Eigenschaften optimaler PräfixCodes
Der Huffman-Algorithmus basiert auf den folgenden zwei
Eigenschaften zur Charakterisierung optimaler Präfix-Codes:
1.Bei einem optimalen Code besitzen Zeichen, die häufiger
auftreten, d.h. eine größere Wahrscheinlichkeit für das Auftreten
besitzen, kürzere Codeworte als Zeichen, die weniger häufig
auftreten.
2. Bei einem optimalen Code besitzen die beiden am seltensten
auftretenden Zeichen, d.h. die beiden Zeichen mit den geringsten
Auftrittswahrscheinlichkeiten, Codewörter gleicher Länge.
05.02.2004
3
Was sind Präfix-Codes?
Fano- oder Präfixbedingung:
Ein Code ist eindeutig umkehrbar -decodierbar-, falls keines der
Codewörter den Anfang eines anderen Wortes des Codes bildet
(hinreichende Bedingung), d.h. kein Wort w des Codes ist Anfang eines
anderen Wortes w´:
Jeder Code der diese Eigenschaft besitzt, heißt Präfixcode.
Beispiel:
Binärcodierung von 4 Zeichen,
C = { 0 , 10 , 110 , 111 } ist eindeutig decodierbar,
C = { 0 , 10 , 100 , 111 }
05.02.2004
dagegen nicht!
4
2
Wozu Huffman-Codes?
Das Ziel kommerzieller Codierung ist die Ermöglichung
der Kommunikation, der Datenverarbeitung und speicherung über technische Systeme mit möglichst hoher
Effizienz.
Die Huffman-Codierung ermöglicht es auf Grundlage des
Alphabets und der Auftritts-Wahrscheinlichkeit der zu
codierenden Symbole eine optimale Codierung zu
ermitteln.
Grundsätzlich gibt es für jede Nachrichtenquelle einen
optimalen Code variabler Länge ( Symbol-Code ), der die
Präfixbedingung erfüllt.
05.02.2004
5
Huffman-Code Beispiel
Angenommen wir haben eine Datei mit 100.000
Charaktern welche wir Kompakt sichern wollen.
Die zu Codierenden Zeichen stammen aus dem Alphabet
A = { a,b,c,d,e,f }, |A| = 6
FÜR WEITERE INFOS...
16.3 Coremen introductions to algorithms 2 th edition
05.02.2004
6
3
Wahrscheinlichkeiten
a
b
c
d
e
f
Häufigkeit
(in 1000)
45
13
12
16
9
5
Fixedlegth
codeword
000
001
010
011
100
101
Variablelength
codeword
0
101
100
111
1101
1100
Eine Datei von 100.000 Charakters enthält nur die Zeichen a-f und ihre Häufigkeiten.
Als 3 – Bit Cordwort kann die Datei in 300,000 Bits verschlüsselt werden und mit der
„variable-length codeword“ Methode kann die Datei sogar in 224.000 Bits verschlüsselt werden.
05.02.2004
7
Fixer Längen-Code
Wenn wir einen fixen Längen-Code verwenden,benötigen
wir mindestens 3 Bits für 6 zu codierende Zeichen.
a= 000, b=001, ... , f= 101.
=> (45*3+13*3+12*3+16*3+9*3+5*3)*1000= 300,000 Bits
Diese Methode erfordert 300.000 Bits um die gesamte
Datei zu codieren. Gibt es bessere Möglichkeiten?
05.02.2004
8
4
Variabler Längen-Code (Huffman)
Beim variablen Längen-Code werden die häufig auftretende
Zeichen über kurze Binärsequenzen codiert und selten
auftretende Zeichen über längere Codeworte dargestellt.
Das 1 – Bit Codewort „0“ repräsentiert a und das 4 Bit
Codewort „1100“ repräsentiert f.
Dieser Code erfordert:
(45*1+13*3+12*3+16*3+9*4+5*4)*1000= 224,000 Bits
für die Datei und spart einen geschätzten Wert von 25%.
05.02.2004
9
Präfix-Codes
Man kann zeigen das die optimale Datenkompression von
eines Charakter-Codes immer von einem Präfix-Code
erreicht werden kann. Die Verschlüsselung ist immer für jeden
Binären Charakter einfach. Wir Konkatenieren einfach die Codewörter
die jeden Charakter der Datei repräsentieren und verfassen somit
die codierte Nachricht.
Beispiel – 3 Zeichen File abc als
0*101*100 = 0101100
Wobei * als Konkatenationsoperator dient
05.02.2004
10
5
Präfix-Codes
Umgekehrt kann die codierte Nachricht
ebenso simpel wieder decodiert werden.
Decodieren des Strings :
001011101 wird geparst als 0*0*101*1101
anschließend gelesen „aabe“.
05.02.2004
11
Präfix-Codes
Der optimale Code kann immer durch einen
vollen binären Baum repräsentiert werden,
wobei jeder Nicht-Blatt-Knoten zwei Kinder hat.
Der „fixed-length code“ ist nicht optimal
solange dieser nicht einen vollen binären Baum
Repräsentiert.
05.02.2004
12
6
Präfix-Codes – Fixed lenght
Abb. 16.4 (a)“ fixed length code “ a = 000,... f = 101.
05.02.2004
13
Präfix-Codes – Variable length
Abb. 16.4 (b) Baum mit optimalem prefix code a= 0 , b=101, ..., f = 1100.
05.02.2004
14
7
Präfix-Codes
Die Anzahl der Bits sind zum
Verschlüsseln einer Datei erforderlich
sind, werden auch Kosten des Baumes
B(T) genannt.
B(T) = ∑ f (c) dt (c)
cεC
dt (c) = Baumtiefe von c oder länge des Codewortes
f (c) = Häufigkeit von c in der Datei
C
= Das Alphabet aus dem die Zeichen
stammen und deren Häufigkeit positiv ist.
05.02.2004
15
Konstruieren eines Huffman
Codes
In dem Pseudocode welcher gleich folgt , ist C das Alphabet n
Zeichen, sodass jedes Zeichen c ε C ein Objekt mit einer definierten
Häufigkeit f [c] ist.
Der Algorithmus erstellt einen Baum T, welcher zum optimalen
Code korrespondiert. Es beginnt mit einer Gesamtmenge von | C |
Blättern, und vollzieht eine Sequenz von | C | - 1 Operationen um
den endgültigen Baum zu erstellen. Ein min–priority Queue Q,
sortiert nach f wird benutzt um die 2 Objekte mit den niedrigsten
Häufigkeiten miteinander zu verbinden. Beim Verbinden der 2
Objekte resultiert ein neues Objekt dessen Häufigkeit die Summe der
Häufigkeiten der eben 2 verbundenen Objekte ist.
05.02.2004
16
8
Pseudo-Code des Huffman Algorithmus
Huffman ( c )
1. n Å |C|
2. Q Å C
3. for i Å 1 to n –1
4. do allocate a new node node z
5. left[z] Å x Å Extract-Min(Q)
6. right[z] Å y Å Extract-Min (Q)
7. f[z] Å f[x] + f[y]
8. INSERT (Q,z)
9. Return Extract- Min (Q)
05.02.2004
17
Erklärung zum Pseudocode:
In Zeile 2 findet die Initialisierung der min-priority Queue mit
den Charakteren in C statt .Die for Schleife in den Zeilen 3-8
extrahiert wiederholend 2 Knoten x und y ,die niedrigsten
Häufigkeiten in der Queue , und ersetzt diese als neuen Knoten z
in die Queue. Die Häufigkeit von z berechnet sich in der Summe
der Häufigkeit von x und y in der Zeile 7.Der Knoten z hat x als
sein linkes und y als sein rechte Kind. Nach n – 1
Zusammenschlüssen (engl. mergers) wird der Knoten links in der
Queue in der Zeile 9, was der Root des Code Baumes ist
zurückgegeben.
05.02.2004
18
9
Beispiel Huffman Codes
05.02.2004
19
Beispiel Huffman Codes
05.02.2004
20
10
Beispiel Huffman Codes
05.02.2004
21
Beispiel Huffman Codes
05.02.2004
22
11
Dokumentation zum Beispiel
Die Abbildungen a-f zeigen die Inhalte der Queue welche nach der
Häufigkeit sortiert sind. Bei jedem Schritt werden die 2 Bäume mit den
niedrigsten Häufigkeiten zusammengefaßt. Die übrig gebliebenen
Objekte werden als Rechtecke dargestellt und beinhalten ihr Zeichen
sowie dessen Häufigkeit.Interne Knoten werden als Kreise dargestellt,
welche als Wert die Summe der Häufigkeiten ihrer Kinder enthalten.
Eine Kante verbindet die internen Konten mit seinen Kindern, die mit 0
gekennzeichneten zu einem linken Kind und die mit 1 gekennzeichneten
zu einem rechten Kind.Beginnend bei der Wurzel ist das Codewort
die Sequenz der Kantenbeschriftungen.
(a) Initialisierende Menge von n = 6 Knoten .
(b) (b)-(e) Zwischenschritte
(c) (f) Der finale Baum.
05.02.2004
23
Das Laufzeitverhalten des Huffman Codes bertägt O(n log n)
Wir nehmen an das Q als binärer min-heap implementiert wäre.
( Kapitel 6 ,2 edition introductions to algorithms by cormen).
Für die Summe von n Zeichen aus dem Alphabet C, beträgt die
Laufzeit der Initialisierung des min-heaps (in der Zeile 2 ) O(n).
Die For Schleife in den Zeilen 3-8 wird exakt n –1 mal ausgeführt
und im Worst Case erfordert jede Heap Operation eine Laufzeit von
O(lg n); Somit beträgt die Performance des Huffman Algorithmus
bei n Zeichen O(n log n).
05.02.2004
24
12
Korrektheit des Huffman-Codes
•Der Code repräsentiert einen vollständigen Baum T .
•Enthält die Zeichen a und b mit den geringsten Häufigkeiten an
der tiefsten Stelle des Baumes.
•Die Blätter a und b und sind Geschwister.
•Das Zeichen mit der höchsten Häufigkeit ist das linke (bzw.
rechte) Kind von der Wurzel.
•Der Baum ist vollständig.
•Ein tiefer gelegenes Blatt hat stets eine geringere oder gleiche
Wahrscheinlichkeit wie die höheren Blätter.
05.02.2004
25
Lemma Theorem
Nach dem Lemma-Theorem kann nachgewiesen werden das
ein durch den Huffman-Algorithmus erstellter Code besser
oder mindestens gleich so gut ist wie ein anderer Präfix-Code
der ebenfalls durch einen vollständigen Baum repräsentiert
werden kann.
(für nähere Informationen siehe Kapitel 6 ,2nd Edition
Introductions to Algorithms by Cormen)
05.02.2004
26
13
Quellen
Titel: Introductions to Algorithms 2nd Edition
Autor: Cormen
Auszüge aus Kapitel 6
Titel: Ausarbeitung zur Vorlesung - Theoretische Informatik I
Autor: Heribert Koch
Auszüge aus Kapitel 2.6 Informationstheorie und Datenkompression
05.02.2004
27
14
Herunterladen