Dynamisches Huffman-Verfahren

Ähnliche Dokumente
16 - Kompressionsverfahren für Texte

Übrigens: um den Algorithmus im Unterricht einzuführen, sind keine Formeln notwendig! Warum reicht die normale ASCII-Codierung nicht aus?

Algorithmus zur komprimierten Übertragung von Textdaten an mobile Endgeräte

2.7 Der Shannon-Fano-Elias Code

Huffman-Kodierung. Fachbereich Medieninformatik. Hochschule Harz. Huffman-Kodierung. Referat. Henner Wöhler. Abgabe:

Seminar über Algorithmen, SS2004. Textkompression. von Christian Grümme und Robert Hartmann

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

Proseminar WS 2002/2003

Proseminar Kodierverfahren bei Dr. Ulrich Tamm Sommersemester 2003 Thema: Codierung von Bäumen (Prüfer Codes...)

Arithmetisches Codieren

15 Optimales Kodieren

Eine Baumstruktur sei folgendermaßen definiert. Eine Baumstruktur mit Grundtyp Element ist entweder

Datenkompression. 1 Allgemeines. 2 Verlustlose Kompression. Holger Rauhut

Wie muss der Eingabetext beschaffen sein, damit er sich gut komprimieren lässt?

Einleitung. Kapitel 1

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss.

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

2. Woche Eindeutige Entschlüsselbarleit, Sätze von Kraft und McMillan, Huffmancodierung

a) Fügen Sie die Zahlen 39, 38, 37 und 36 in folgenden (2, 3)-Baum ein:

Eigenschaften von Kompressionsverfahren

11.1 Grundlagen - Denitionen

Algorithmen und Datenstrukturen Heapsort

Datenstrukturen und Algorithmen

Einführung in die Informatik II Aus der Informationstheorie: Datenkompression

Seminar Kompressionsalgorithmen Huffman-Codierung, arithmetische Codierung

Gierige Algorithmen Interval Scheduling

Vorlesung Datenstrukturen

Ziv-Lempel-Kompression von André Lichei

13 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

Mathematik für Information und Kommunikation

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Rotation. y T 3. Abbildung 3.10: Rotation nach rechts (analog links) Doppelrotation y

1. Woche Einführung in die Codierungstheorie, Definition Codes, Präfixcode, kompakte Codes

Seminar. Codierungstheorie

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

7. Sortieren Lernziele. 7. Sortieren

Technische Informatik - Eine Einführung

Kodierungsalgorithmen

12 (2-4)-Bäume Implementierbare Funktionen. (2-4)-Bäume sind durch folgende Eigenschaften deniert: 1. Alle Äste sind gleich lang

14. Rot-Schwarz-Bäume

6. Komprimierung. (Text)komprimierung ist ein Wechsel der Repräsentation von Daten, so daß sie weniger

3 Quellencodierung. 3.1 Einleitung

Algorithmische Bioinformatik 1

Textkompression: Burrows-Wheeler-Transformation

Informatik II, SS 2014

Programmiertechnik II

Strings. Stringsuche, Boyer-Moore, Textkompression, Huffman Codes.

ContainerDatenstrukturen. Große Übung 4

Referat zum Thema Huffman-Codes

Greedy Algorithms - Gierige Algorithmen

Binäre Suchbäume. Mengen, Funktionalität, Binäre Suchbäume, Heaps, Treaps

PPM - Prediction by Partial Matching

Algorithmen und Datenstrukturen

Effiziente Algorithmen 2

Die Digitalisierung von Musik

Übung: Algorithmen und Datenstrukturen SS 2007

Informationssysteme SS 2013 Lösungsvorschläge zu Übungsblatt 2. Übungsblatt 2. Für die Übungen in der Woche vom 29. April bis 03.

Übungen zu Programmierung I - Blatt 8

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

Klausur Informatik-Propädeutikum (Niedermeier/Hartung/Nichterlein, Wintersemester 2012/13)

Informatik II, SS 2014

Datenstrukturen und Algorithmen

Wiederholung. Datenstrukturen und. Bäume. Wiederholung. Suchen in linearen Feldern VO

Algorithmen und Datenstrukturen 2

Computer Science Unplugged Algorithmen zur Textkompression

Bäume Jiri Spale, Algorithmen und Datenstrukturen - Bäume 1

Algorithmische Graphentheorie

13. Binäre Suchbäume

368 4 Algorithmen und Datenstrukturen

Isomorphie von Bäumen

Algorithmen und Datenstrukturen

Run Length Coding und Variable Length Coding

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

3.1 Konstruktion von minimalen Spannbäumen Es gibt zwei Prinzipien für die Konstruktion von minimalen Spannbäumen (Tarjan): blaue Regel rote Regel

3. Minimale Spannbäume. Definition 99 T heißt minimaler Spannbaum (MSB, MST) von G, falls T Spannbaum von G ist und gilt:

Clausthal C G C C G C. Informatik II Bäume. G. Zachmann Clausthal University, Germany Beispiele. Stammbaum.

(Prüfungs-)Aufgaben zur Codierungstheorie

3. Binäre Suchbäume. 3.1 Natürliche binäre Suchbäume. EADS 3.1 Natürliche binäre Suchbäume 78/598 ľernst W. Mayr

Kryptographie und Codierung für den Mathematikunterricht

Textkompression. Komprimierung von Daten. Runlength Komprimierung (2) Runlength Komprimierung (1) Herkömmliche Kodierung. Runlength Komprimierung (3)

Algorithmen und Datenstrukturen

LZSS und Deflate. Lars Kunert. April 18, Seminar Kompressionsalgorithmen RWTH Aachen

Definition 15 Rot-Schwarz-Bäume sind externe Binärbäume (jeder Knoten hat 0 oder 2 Kinder) mit roten und schwarzen Kanten, so dass gilt:

22. Algorithmus der Woche Partnerschaftsvermittlung Drum prüfe, wer sich ewig bindet

Kapiteltests zum Leitprogramm Binäre Suchbäume

Motivation Binäre Suchbäume

Algorithmen und Datenstrukturen (für ET/IT)

Häufige Mengen ohne Kandidatengenerierung. FP-Tree: Transaktionen. Konstruktion eines FP-Trees. FP-Tree: Items

Datenstrukturen. einfach verkettete Liste

Untersuchung des Huffman- Algorithmus auf seine Effizienz

Informatik II, SS 2014

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Algorithmen und Datenstrukturen (für ET/IT)

Datenkompression. Vortrag von Markus Durzinsky Student der Otto-von-Guericke-Universität Magdeburg

Algorithmen und Datenstrukturen I AVL-Bäume

Kapitel Andere dynamische Datenstrukturen

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Transkript:

Dynamisches Huffman-Verfahren - Adaptive Huffman Coding - von Michael Brückner 1. Einleitung 2. Der Huffman-Algorithmus 3. Übergang zu einem dynamischen Verfahren 4. Der FGK-Algorithmus 5. Überblick über weitere Algorithmen 6. Zusammenfassung 7. Quellen 1. Einleitung Das dynamische Huffman-Verfahren basiert auf einem der bekanntesten Kompressionsverfahren, dem Huffman-Algorithmus, welcher 1951 von D. A. Huffman entwickelt wurde. Das Prinzip dieses Verfahrens beruht darauf, dass das Vorkommen unterschiedlicher Zeichen (z.b. Buchstaben, Satzzeichen usw.) verschieden wahrscheinlich ist. Ordnet man demnach dem Zeichen mit der höchsten Wahrscheinlichkeit einen sehr kurzen, und dem Zeichen geringerer Wahrscheinlichkeit einen vergleichsweise langen Code zu, verringert sich die durchschnittliche Anzahl zu speichernder Bits pro Zeichen - der Text wird komprimiert. 1

2. Der Huffman-Algorithmus Voraussetzungen: - gegeben ist ein Text mit n unterschiedlichen Zeichen - die Zeichen a 1, a 2,..., a n bilden das Alphabet A des Textes - die Wahrscheinlichkeit des Auftretens eines Zeichens wird mit P i (mit i = 1, 2,..., n) bezeichnet, wobei P 1 + P 2 + + P n = 1 Algorithmus: - sortieren der Wahrscheinlichkeit P i, so dass P 1 = P 2 =... = P n - ersetzen der letzten beiden Zeichen a n-1 und a n durch a n-1,n, wobei P n-1,n = P n-1 + P n - wiederholen des Algorithmus bis lediglich zwei Zeichen verblieben sind Implementierung: Speichere die k Blätter in einer Liste L; while (L enthält mindestens zwei Elemente) do begin Entferne aus L die Elemente x und y mit der geringsten Wertigkeit; Erzeuge ein neues Element p, wobei p der Vater von x und y ist; Wertigkeit(p) := Wertigkeit(x) + Wertigkeit(y); Füge p in L ein; end; Beispiel: - Sortieren der Zeichen nach deren Wahrscheinlichkeit Zeichen: x 1 x 2 x 3 x 4 x 5 x 6 Wahrscheinlichkeit: 0.3 0.2 0.2 0.15 0.1 0.05 - Zeichen x 5 und x 6 zusammenfassen zu x 56 mit P 56 = 0.15 Zeichen: x 1 x 2 x 3 x 4 x 56 Wahrscheinlichkeit: 0.3 0.2 0.2 0.15 0.15 - Zeichen x 4 und x 56 zusammenfassen zu x 456 mit P 456 = 0.3 Zeichen: x 1 x 456 x 2 x 3 Wahrscheinlichkeit: 0.3 0.3 0.2 0.2 - Zeichen x 2 und x 3 zusammenfassen zu x 23 mit P 23 = 0.4 Zeichen: x 23 x 1 x 456 Wahrscheinlichkeit: 0.4 0.3 0.3 - Zeichen x 1 und x 456 zusammenfassen zu x 1456 mit P 1456 = 0.6 Zeichen: x 1456 x 23 Wahrscheinlichkeit: 0.6 0.4 2

Auswertung: Stellt man dies nun als binären Baum dar und interpretiert jeweils den linken Ast einer Verzweigung als 0 (entspricht Zeichen höherer Wahrscheinlichkeit) und den rechten Ast als 1 (entspricht Zeichen geringerer Wahrscheinlichkeit) erhält man beim Durchlaufen des Baumes von der Wurzel zu den Blättern den Code für jedes einzelne Zeichen. Wurzel / \ x 1456 x 23 / \ / \ x 1 x 456 x 2 x 3 / \ x 4 x 56 / \ x 5 x 6 Zeichen Code x 1 00 x 2 10 x 3 11 x 4 010 x 5 0110 x 6 0111 3. Übergang zu einem dynamischen Verfahren Die Umsetzung dieses Prinzip wirft jedoch die Frage auf, wie die Wahrscheinlichkeit des Auftretens jedes Zeichens ermittelt werden kann. Die einfachste Lösung kann wie folgt beschrieben werden. 1. Durchlauf: - Zählen des Vorkommens eines jeden Zeichens innerhalb des Textes - Ermittlung der Wahrscheinlichkeitsverteilung - Erzeugen des Huffman-Baumes - Speichern bzw. Übertragen des Huffman-Baumes 2. Durchlauf: - Komprimieren des Textes mittels Huffman-Baum Diese Lösung wird als Statisches Huffman-Verfahren bezeichnet. Sie hat jedoch einen entscheidenden Nachteil: werden die Daten oft verändert oder werden immer neue Daten hinzugefügt (z.b. sequentielle Übertragung von Daten) muss der gesamte oben beschriebene Prozess regelmäßig durchgeführt werden. Die Kompression wird langsam und die Datenmenge erhöht sich (da der erzeugte Baum nach jedem Prozess erneut gespeichert bzw. übertragen werden muss). Ziel musste es somit sein, ein Verfahren zu finden, bei dem der Huffman-Baum dynamisch, bei gleichzeitiger Codierung der Zeichen, erzeugt wird. Dadurch wäre nur ein Durchlauf notwendig und der Algorithmus somit schneller und effektiver. 3

Das Problem dabei war: der Empfänger (Decodierer) benötigt den Huffman-Baum zum Dekomprimieren, ohne dass dieser jedoch übertragen bzw. gespeichert wird. In den siebziger Jahren versuchten Faller (1973) und Gallager (1978) eine Lösung für das Problem zu finden. Sie entwickelten unabhängig von einander Schemata für ein dynamisches Verfahren, welche 1985 von Donald E. Knuth aufgegriffen und überarbeitet wurden. Das Ergebnis war der FGK-Algorithmus (Faller-Gallager-Knuth), welcher 1987 von Vitter nochmals verbessert wurde (V-Algorithmus). 4. Der FGK-Algorithmus Eigenschaften des Huffman-Baumes: 1. Die Geschwister eines Huffman-Baumes sind durch Kanten mit ihren gemeinsamen Vorgänger (Vater) verbunden, wobei dem Element mit der höheren Wahrscheinlichkeit (Wertigkeit) 0 und dem geringerer Wahrscheinlichkeit (Wertigkeit) 1 zugeordnet wird (= geordneter Huffman-Baum). 2. Für jede Ebene l = 1 ist die Wahrscheinlichkeit (Wertigkeit) der einzelnen Elemente kleiner bzw. gleich der Wahrscheinlichkeit (Wertigkeit) der Elemente in Ebene l 1 (= lexikografisch geordneter Huffman-Baum). Voraussetzungen: - Leerer Huffman-Baum mit einem Element (Wurzel), dem Null-Element - Blätter des Baumes entsprechen den k verschiedenen Zeichen, welche bereits bekannt sind - Kanten des Baumes entsprechen der Wertigkeit des zugehörigen Elements (Wertigkeit von Blättern = Vorkommen des Zeichens im bereits codierten Text) - Teilbäume/Äste des Huffman-Baumes können vertauscht werden wenn die Wertigkeit der Wurzel-Elemente (dieser Teilbäume/Äste) gleich ist (folgt aus den Eigenschaften des Huffman-Baumes) Algorithmus: - Einlesen des Zeichens a j(t+1) (Nachfolger des Zeichens a j zum Zeitpunkt t+1) - Wenn das Zeichen nicht im Baum enthalten ist - Sende/Speichere Zeichen mittels vorher definierten Code, z.b. ASCII - Gehe zum Null-Element des Baumes und ersetze es durch ein Element mit zwei Söhnen, wobei der linke Sohn das neue Null-Element ist, und der rechte Sohn (Wertigkeit zunächst Null) dem Zeichen a j(t+1) entspricht sonst - Sende/Speichere das (durch den Hufmann-Baum) codierte Zeichen - Erhöhe die Wertigkeit der Elemente vom Blatt (welches a j(t+1) repräsentiert) dem Pfad entlang, bis zur Wurzel um 1 - Verändere den Baum zuvor (wenn nötig) so, dass der, durch die Erhöhung der Wertigkeit einzelner Elemente, neu erzeugte Baum wieder ein Huffman-Baum ist (Aktualisierung des Huffman-Baumes) - Wiederhole den Algorithmus bis alle Zeichen eingelesen worden sind 4

Implementierung (Aktualisierung des Huffman-Baumes): Grundlage der Implementierung ist die Nummerierung aller Elemente des Huffman-Baumes von links nach rechts, und von unten nach oben. Dadurch kann jedem Element neben der Wertigkeit auch eine Position innerhalb des Baumes zugeordnet werden. Das Zeichen links außen, in der untersten Ebene, hat somit die Position 1 und die Wurzel somit die zahlenmäßig höchste Position (siehe Beispiel im Anhang). q := Element welches a j(t+1) entspricht; {dieses Element ist immer ein Blatt} if (q = Null-Element) then begin Ersetze q durch ein Element mit zwei Blättern; {zunächst beide Blätter Null-Elemente} q := rechtes {gerade erzeugtes} Blatt; end; if (q = Bruder des Null-Elements) then begin Vertausche q mit dem Blatt zahlenmäßig höchster Position, gleicher Wertigkeit; Erhöhe Wertigkeit(q) um 1; q := Vater von q; end; while (q <> Wurzel des Huffman-Baumes) do begin Vertausche q mit dem Element zahlenmäßig höchster Position, gleicher Wertigkeit; Erhöhe Wertigkeit(q) um 1; q := Vater von q; end; 5. Überblick über weitere Algorithmen Neben den FGK-Algorithmus gibt es zahlreiche weitere Algorithmen, die das dynamische Huffman-Verfahren verwenden. Der am häufigsten verwendete ist der bereits erwähnte V-Algorithmus. Im Unterschied zum FGK-Algorithmus werden beim V-Algorithmus alle Äste des Huffman-Baumes als Blöcke von Elementen, und die Wurzel eines Astes als erstes Element des zugehörigen Blockes betrachtet. In Abhängigkeit von der Wertigkeit des ersten Elementes, können dann die einzelnen Blöcke zu Äquivalenz-Klassen zusammengefasst werden. Innerhalb einer Äquivalenz-Klasse werden die einzelnen Blöcke nach ihrer Tiefe sortiert, d.h. Blöcke, bestehend aus einem Blatt stehen beispielsweise am Anfang, während Blöcke, welche aus einem sehr tiefen Ast hervorgegangen sind, am Ende einer Äquivalenz- Klassen stehen. Bezogen auf den FGK-Algorithmus bedeutet dies, dass beim Tauschen der Teilbäume nicht nur darauf geachtet wird, dass der neu erzeugte Baum ein Huffman-Baum ist, sondern auch darauf, dass der erzeugte Baum eine möglichst geringe Tiefe hat. 5

Die Konsequenz dieses Algorithmus ist eine höhere Aktualisierungsrate auf der einen, jedoch eine geringere Baum-Tiefe auf der anderen Seite (was sich mathematisch beweisen lässt). Dies bewirkt eine geringere, durchschnittliche Codewortlänge: FGK-Algorithmus S-n+1 = x = 2S+t-4n+2 V-Algorithmus S-n+1 = x = 2S+t-2n+1 S Performance der statischen Methode n Anzahl verschiedener Zeichen t Länge des Textes x Anzahl benötigter Bits (zum Speichern des komprimierten Textes) Weitere Algorithmen, die das dynamische Huffman-Verfahren verwenden sind der N-Algorithmus, welcher eine sehr geringe Update-Rate hat und somit wesentlich schneller ist (jedoch eine geringere Kompression liefert) und der B-Algorithmus, der sehr leicht zu Implementieren ist, und somit besonders bei Hardware-Codierern zum Einsatz kommt. 6. Zusammenfassung Wie die oben genannten, verschiedenen Algorithmen bereits andeuten, gibt es eine hohe Zahl von Variationen des dynamischen Huffman-Verfahrens. Beispielsweise muss der Huffman-Baum nicht unbedingt nach jedem Zeichen aktualisiert werden, es ist auch eine Aktualisierung nach jedem n-ten Zeichen (wobei n zuvor festgelegt wird) möglich, ohne dass dabei die Performance stark beeinträchtigt wird. Aber auch die Kombination von statischen Verfahren und dem dynamischen Huffman-Verfahren ist möglich. Ein Beispiel hierfür ist gzip. Die Vorteile des dynamischen Verfahrens sind offensichtlich, allerdings gibt es auch Nachteile. Tritt beispielsweise eine konstante Verteilung der Wahrscheinlichkeiten (der einzelnen Zeichen) auf, liefert das statische Huffman-Verfahren weit bessere Ergebnisse; tritt gar eine (nahezu) Gleichverteilung der Wahrscheinlichkeiten auf ist die erzielte Kompressionsrate sowohl mit statischen, als auch mit dynamischen Huffman-Verfahren sehr gering. Ein Beispiel hierfür sind Bilder, bei denen die Wahrscheinlichkeit für die einzelnen Farben in der Regel gleich ist. Die Einsatzmöglichkeiten des dynamischen Huffman-Verfahrens sind somit begrenzt, weshalb heutzutage oftmals auch andere Kompressionstechniken Einsatz finden. 6

7. Quellen Huffman- und FGK-Algorithmus: - Diplomarbeit: Universal Lossless Data Compression, D. Nehring, Universität Bielefeld, 1997 V-Algorithmus: - Design and Analysis of Dynamic Huffman Codes, J. S. Vitter, 1987 - Dynamic Huffman Coding, J. S. Vitter, 1987 7

Anhang Beispiele für den FGK-Algorithmus 12 q 11 5 q 9 7 q 10 2 q 5 3 q 6 3 q 7 4 q 8 2 q 3 2 q 4 0 q 1 2 q 2 Fig. 1: Beispiel eines Huffman-Baumes vor der Aktualisierung 12 q 11 5 q 9 7 q 10 2 q 5 3 q 6 3 q 7 4 q 8 2 q 3 2 q 4 0 q 1 2 q 2 0 q w 0 q 0 Fig. 2: Nach dem ersten Schritt (a j(t+1) nicht im Baum enthalten) 8

12 q 11 5 q 9 7 q 10 2 q 5 3 q 6 3 q 7 4 q 8 2 q 3 2 q 4 0 q 1 2 q 2 0 q w 1 q 0 Fig. 3: Wertigkeit von q 0 erhöht, gehe zu q 1 12 q 11 5 q 9 7 q 10 2 q 4 3 q 6 3 q 7 4 q 8 1 q 1 2 q 2 2 q 3 2 q 5 0 q w 1 q 0 Fig. 4: Wertigkeit von q 1 erhöht, q 4 mit q 5 getauscht 9

13 q 11 6 q 9 7 q 10 3 q 4 3 q 6 3 q 7 4 q 8 1 q 1 2 q 2 2 q 3 2 q 5 0 q w 1 q 0 Fig. 5: Wertigkeit von q 4, q 9 und q 11 erhöht, Wurzel erreicht 13 q 13 6 q 11 7 q 12 3 q 7 3 q 8 3 q 9 4 q 10 1 q 3 2 q 4 2 q 5 2 q 6 0 q 1 1 q 2 Fig. 6: Nach der Aktualisierung, erneute Nummerierung der Elemente 10