Freiwillige Übung zum Thema: Adaptive Huffman-Kodierung

Ähnliche Dokumente
Dynamisches Huffman-Verfahren

15 Optimales Kodieren

Wann sind Codes eindeutig entschlüsselbar?

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

Einleitung. Kapitel 1

Datenstrukturen und Algorithmen (SS 2013)

Programmiertechnik II

7. Sortieren Lernziele. 7. Sortieren

1 AVL-Bäume. 1.1 Aufgabentyp. 1.2 Überblick. 1.3 Grundidee

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

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

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

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

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

Datenkompression. 1 Allgemeines. 2 Verlustlose Kompression. Holger Rauhut

Gierige Algorithmen Interval Scheduling

Übersicht. Aktivitäten-Auswahl-Problem. Greedy Algorithmen. Aktivitäten-Auswahl-Problem. Aktivitäten-Auswahl-Problem. Datenstrukturen & Algorithmen

Proseminar WS 2002/2003

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

Grundbegriffe der Informatik Tutorium 3

TU München. Hauptseminar: WS 2002 / Einführung in Suffix - Bäume

Referat zum Thema Huffman-Codes

Informatik-Seminar Thema 6: Bäume

Algorithmen und Komplexität Lösungsvorschlag zu Übungsblatt 8

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

Datenkompression. Kommunikationstechnik, SS 08, Prof. Dr. Stefan Brunthaler 167

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Suchen und Sortieren Sortieren. Heaps

Übungsblatt Nr. 7. Lösungsvorschlag

Klausur Digitale Medien

ContainerDatenstrukturen. Große Übung 4

Arithmetisches Codieren

18.5 "Richtige" B-Bäume

Totosoftware TotoMaxII Tipp-Plan und Tipp-Basis - ab (S)mall-Version

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

Klausur über den Stoff der Vorlesung Grundlagen der Informatik II (90 Minuten)

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

Probeklausur Digitale Medien

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

Datenstrukturen & Algorithmen Lösungen zu Blatt 4 FS 15

Algorithmen und Datenstrukturen Tafelübung 14. Jens Wetzl 8. Februar 2012

Algorithmen und Datenstrukturen 1

Effiziente Algorithmen und Komplexitätstheorie

Molekulare Bioinformatik

Algorithmen und Datenstrukturen 12

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

Algorithmen und Datenstrukturen 13

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

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

Wintersemester 2004/ Februar 2005

Literatur: Kapitel 2.1 des Skripts Rot-Schwarz-Bäume Kapitel 2.2 des Skripts Treaps Cormen. Kapitel 13, Red-Black-Trees

Daten zusammenfügen und erste Datenbereinigung

Pädagogische Hochschule Schwäbisch Gmünd

1.8 Shift-And-Algorithmus

Vorlesung Datenstrukturen

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Übungen zur Vorlesung Modellierung WS 2003/2004 Blatt 11 Musterlösungen

Programmiertechnik II

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Maschinelles Lernen: Symbolische Ansätze

Sortieralgorithmen. Selection Sort

Algorithmen und Datenstrukturen 1-5. Seminar -

Primzahlen und Programmieren

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

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

Beliebige Anzahl von Signaturen

Teil 1: Suchen. Problemstellung Elementare Suchverfahren Hashverfahren Binäre Suchbäume Ausgeglichene Bäume. B-Bäume Digitale Suchbäume Heaps

6. Sich selbst organisierende Datenstrukturen

10. Übungsblatt zu Algorithmen I im SS 2010

Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16

28 4. DIE MATHEMATIK HINTER DER COMPACT DISC. Abbildung 4.1: Selbstkorrigierende Codes

Isomorphie von Bäumen

Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Esparza)

Algorithmische Graphentheorie

Diskrete Strukturen Wiederholungsklausur

Problem: Finde für Alphabet mit n Zeichen einen Binärcode, der die Gesamtlänge eines Textes (über diesem Alphabet) minimiert.

Übung: Algorithmen und Datenstrukturen SS 2007

Mehrband-Turingmaschinen und die universelle Turingmaschine

Aufgabe 2 Konstruktion von Binärbäumen Tafelübung

Algorithmische Geometrie: Schnittpunkte von Strecken

Algorithmen und Datenstrukturen 1

In diesem Newsletter möchte ich Ihnen die Verwendung von Namen näher bringen.

Zentralübung zur Vorlesung Diskrete Strukturen (Prof. Mayr)

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

B*-BÄUME. Ein Index ist seinerseits wieder nichts anderes als eine Datei mit unpinned Records.

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

3 Quellencodierung. 3.1 Einleitung

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 2. Spezifikation Schrittweise Verfeinerung

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

Optimalcodierung. Thema: Optimalcodierung. Ziele

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Datenformat zum Import von CSV-Dateien

Datenstrukturen & Algorithmen Lösungen zu Blatt 6 FS 12

Programmierpraktikum WS 13/14

Vorlesung Datenstrukturen

Konzepte der Informatik

Digitale Medien. Übung zur Vorlesung. Vorlesung: Heinrich Hußmann Übung: Renate Häuslschmid

Technische Informatik - Eine Einführung

Transkript:

Freiwillige Übung zum Thema: Adaptive Huffman-Kodierung Hintergrund-Info: Adaptive Verfahren (Quelle: Uni Karlsruhe) Die einfache Huffman-Kodierung verwendete für die Konstruktion der Kodes die Häufigkeiten aus dem gesamten Text. Das machte es notwendig, diese Häufigkeiten mit der kodierten Nachricht zu übermitteln. Die Idee eines sogenannten adaptiven Verfahrens ist, zu jedem Zeitpunkt nur den Baum zu verwenden, der sich aus den bis dahin kodierten bzw. dekodierten Zeichen ergibt. Das bedeutet, daß nach der Kodierung bzw. nach der Dekodierung jedes Zeichens die Häufigkeiten aktualisiert werden und der zugehörige Baum überprüft werden müssen. Im Gegensatz zum herkömmlichen (links) wird beim adaptiven Verfahren der Kode ständig verändert Diese Vorgehensweise läßt sich nicht nur bei der Huffman-Kodierung anwenden, wie wir sehen werden, läßt sie sich hier aber besonders günstig einsetzen. Aktualisieren des Baumes Den Baum nach jedem verarbeiteten Zeichen neu zu konstruieren ist dabei glücklicherweise nicht nötig, würde es doch Kodierung und Dekodierung extrem verlangsamen. Statt dessen nutzt man eine besondere Eigenschaft von zu einem Huffman-Kode gehörigen Bäumen: Es existiert eine Numerierung der Knoten, so daß erstens die Numerierung eine der Gewichtung entsprechende Sortierung der Knoten darstellt, und zweitens jeweils zwei Knoten mit gleichem Vorgänger in der Sortierung aufeinander folgen: Numerierung der Knoten (rot) Daß ein Huffman-Baum eine solche Numerierung besitzt, läßt sich leicht dadurch zeigen, daß man die Knoten eben mit der höchsten Nummer beginnend in der Reihenfolge numeriert, in der man sie zusammenfaßt. Wichtig ist aber vor allem, daß, solange man solch eine Numerierung ermöglicht, ein gültiger Baum vorliegt. Das ermöglicht einem, einen gültigen Baum sehr schnell umzustrukturieren: Wird ein Zeichen kodiert oder dekodiert, werden vom entsprechenden Blatt beginnend die Häufigkeiten bis zur Wurzel schrittweise erhöht.

Nach Kodierung eines B sind die Eigenschaften nicht verletzt Wird dabei die Eigenschaft verletzt, daß die Numerierung eine Sortierung darstellt, müssen zwei Knoten vertauscht werden: Nach einem weiteren B müssen die Knoten mit den Nummern 2 und 3 vertauscht werden Rescaling Nach dem Vertauschen der beiden Knoten ist der Baum wieder gültig Zunächst aus einer praktischen Not heraus ist man dennoch gezwungen, in regelmäßigen Abständen den Baum neu zu konstruieren: Die Zähler für die Häufigkeiten müssen begrenzt werden, zum einen, weil die gewählten Datentypen immer nur einen begrenzten Wertebereich haben, zum zweiten garantiert eine Begrenzung der Zähler eine Begrenzung der Länge der Kodes, die bei der Implementierung der Bitoperationen oft notwendig ist. Deshalb wird nun in regelmäßigen Abständen ein 'Rescaling' der Häufigkeiten vorgenommen, d.h. die Häufigkeiten werden, sobald ihre Summe einen bestimmten Wert erreicht, durch eine Integerdivision halbiert. Dabei muß, weil die Eigenschaften des Huffman-Baumes dann nicht mehr zugesichert werden können, der gesamte Baum neu konstruiert werden. In den üblichen Abständen verlangsamt das die Kodierung aber nur unwesentlich. Die Reskalierung hat einen interessanten Nebeneffekt: Ein Häufiges Auftreten bestimmter Zeichen an einzelnen Stellen einer Nachricht verblaßt gewissermaßen mit jeder Reskalierung; wenig zurückliegende Vorkommnisse bekommen so ein höheres Gewicht. Auch wenn sich dieser Effekt mathematisch schwer fassen läßt, führt er doch eher zu einer weiteren Verbesserung des Verfahrens,

weil Zeichen in der Praxis oft eine lokal erhöhte Wahrscheinlichkeit aufweisen. Initialisierung und Einfügen Ließe sich der Baum nur umordnen, müssten von Anfang an Blätter für alle möglichen Zeichen im Baum vorhanden sein. Damit würde er aber gezwungenermaßen auch Zeichen enthalten, die eventuell nie auftreten und für sie Kodes reservieren. Eine wesentlich bessere Lösung ist es dagegen, im Baum ein Zeichen bereitzustellen, das einem bisher nicht vorhandenen Zeichen vorangestellt werden kann (sog. Escape-Sequenz). Tritt ein Zeichen zum ersten Mal beim Kodieren auf, wird es kodiert als Kode des Sonderzeichens gefolgt von dem unkodierten Zeichen. Danach wird das neue Zeichen in den Baum eingefügt, indem der Knoten mit der höchsten Nummer aufgespalten wird: Das Zeichen D wird aufgenommen (vor dem Aktualisieren des Zählers) Zu Beginn der Kodierung und Dekodierung muss also kein Zeichen aus der Eingabe im Baum integriert sein, neben dem Escape-Zeichen muss allerdings noch ein anderes Sonderzeichen zur Verfügung stehen, nämlich eines, um das Ende der Nachricht zu kodieren, somit sieht der Baum zu Beginn so aus: Initialbaum, Eof=End of file, Esc=Escape

Beispiel zum adaptiven Huffman-Code: Eingabe-Text: sein seil sinkt (natürlich völlig sinnfrei) Häufigkeiten (nur zur Kontrolle): iii 3 sss 3 blank 2 ee 2 nn 2 k 1 l 1 t 1 15 Erwartetes Ergebnis: Initialbaum: Vorgehensweise: 1. Initialbaum zeichnen, Knoten nummerieren, EOF und NYT (=Esc) bekommen Häufigkeit=1 sowie die o.a. Ordnungsnummern. 2. <NYT><neuer Buchstabe> hinzufügen: Den Knoten mit der höchsten Ordnungsnummer splitten, in diesem Fall ist das NYT. Der Knoten behält die Ordnungsnummer, darunter werden Nr. 3 und 4 angehängt, 3 = NYT, 4 = s. NYT Häufigkeit + 1, s Häufigkeit = 1.

3. Bekannter Code: Knoten suchen, Häufigkeit erhöhen. 4. Der Baum muss sortiert bleiben, d.h. je kleiner die Ordnungsnummer, desto größer die Häufigkeit. Dies jeweils von hinten nach vorne überprüfen, und wenn die Sortier- Reihenfolge nicht mehr stimmt, zwei Knoten entsprechend austauschen. Die Knoteninhalte bzw. die unter dem Knoten hängenden Unterknoten / Blätter werden bewegt, die Ordnungsnummern der getauschten Knoten bleiben bestehen! 5. Nach dem Tauschen die Häufigkeiten neu berechnen und ggf. nochmal die Sortierung prüfen und Knoten tauschen. 6. Je Schritt einen neuen Baum zeichnen, bis der komplette Text verarbeitet ist: NYTsNYTeNYTiNYTnNYT seinytl sinnytknytteof 7. Code-Tabelle erstellen; zu erwarten ist: NYT 9 11 s 3 11 i 3 100 e 2 1010 n 2 1011 (leer) 2 0 l 1 10 k 1 11 t 1 100 EOF 1 101 Hinweis: Das Codieren dieses kurzen Textes mit Hilfe handgezeichneter Bäume ist sehr aufwändig, fehleranfällig und eventuell frustrierend, aber wie man so sagt: Where the going gets rough, the tough get going!