Arithmetische Kodierung

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmentheorie 08 – Dynamische Programmierung (1)
Advertisements

der Universität Oldenburg
Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Christian Scheideler SS 2009
Perceptrons and the perceptron learning rule
Motivation Bisher: Codes mit möglichst kurzer Codelänge.
Leistung.
Schwierigkeit von Aufgabenstellungen
Sortieren I - Bubblesort -
Rekursion vs. Iteration
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Claudio Moraga; Gisbert Dittrich
Information - syntaktisch
Suche in Texten (Stringsuche )
3. Kapitel: Komplexität und Komplexitätsklassen
3. Berechenbarkeit Wann ist eine Funktion (über den natürlichen Zahlen) berechenbar? Intuitiv: Wenn es einen Algorithmus gibt, der sie berechnet! Was heißt,
Übung 2.1 Information Wieviele Fragen benötigen Sie beim „Zahlenraten“
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
Christian Schindelhauer
Christian Schindelhauer
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Arithmetische Kodierung
Algorithmentheorie 6 – Greedy-Verfahren
Prof.Dr.S. Albers Prof. Dr. Th. Ottmann
Kompressionsverfahren für Texte
WS Algorithmentheorie 02 - Polynomprodukt und Fast Fourier Transformation Prof. Dr. Th. Ottmann.
Dynamische Programmierung (2) Matrixkettenprodukt
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Kapitel 5 Stetigkeit.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Zusammenfassung Vorwoche
PG 520 Intelligence Service – gezielte Informationen aus dem Internet
DVG Methoden 1 Methoden. 2 int dezi = Integer.parseInt(args[0]); boolean vz = (dezi>=0); dezi = Math.abs(dezi); String Bin = ""; do { } while.
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Verschlüsselung.
20:00.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 1 SS 2001 Algorithmus von Dijkstra.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation
Information und Kommunikation
Information und Kommunikation Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation
Polynome und schnelle Fourier-Transformation
Einführung in die Programmierung
Kennwerte und Boxplots
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz.
Jamshid Azizi: Folie Isomorphietest Jamshid Azizi
Symmetrische Blockchiffren DES – der Data Encryption Standard
Arne Vater Wintersemester 2006/ Vorlesung
1 Albert-Ludwigs-Universität Freiburg Rechnernetze und Telematik Prof. Dr. Christian Schindelhauer Informatik III Christian Schindelhauer Wintersemester.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Suche des kürzesten Weges in einem Netz.
Information - syntaktisch
 Präsentation transkript:

Arithmetische Kodierung 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Motivation Ziel des Verfahrens: beliebige Daten verlustfrei komprimieren Mittel und Weg: Sequenzen durch Codes ersetzen Methode: Symbole durch Codes ersetzen (Huffman) Sequenzen durch Codes ersetzen (Arithmetische Kodierung) Kodierung im Intervall [0,1) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Geschichte 1960: Elias, Abramson – Erste Ansätze 1976: Pasco, Rissanen – Beweis, das endlich genaue Arithmetik ausreicht 1980: Rubin, Guazzo, Rissanen, Langdon - Erster praktikabler Algorithmus Scaling FIFO-Prinzip Erste hardwarenahe Realisierungen 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Definition: Alphabet, Symbol, Sequenz endliche, nichtleere Menge z.B. A = {a,b,c,d} Symbol: Element des Alphabets z.B. a  A Sequenz: Symbolfolge z.B. S = abaabcda  A* 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Definition: Modell Modell: Abbildung A  [0,1): ai  PM(ai) PM(ai) ist angenommene Wahrscheinlichkeit Nicht zwingend gleich mit P(ai), der korrekten Wahrscheinlichkeit Im Folgenden: Annahme eines einfachen Modells 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Beispiel: Modell a 6,51 % h 4,76 % o 2,51 % v 0,67 % b 1,89 % i 7,55 % p 0,79 % w c 3,06 % j 0,27 % q 0,02 % x 0,03 % d 5,08 % k 1,21 % r 7,00 % y 0,04 % e 17,40 % l 3,44 % s 7,27 % z 1,13 % f 1,66 % m 2,53 % t 6,15 % g 3,01 % n 9,78 % u 4,35 % 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Definition: Entropie Entropie H ist Maß für Informationsgehalt einer Sequenz S Definition: Beachte: [H] = Bits / Symbol 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Definition: Modellabhängige Entropie Problem: Korrekte Wahrscheinlichkeiten nicht bekannt Also Differenzierung nötig Modellabhängige Entropie Definition: 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Beispiel: Entropie (1) Angepaßte Entropie der Sequenz „abaabcda“ unter dem Modell a=50%, b=25%, c=12,5%, d=12,5%. (Modell mit korrektem PM) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Beispiel: Entropie (2) Angepaßte Entropie der Sequenz „abaabcda“ unter dem Modell a=12,5%, b=12,5%, c=50%, d=25% (Modell mit schlechtem PM) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Definition: Kodierer/Dekodierer Algorithmus, der eine gegebene Sequenz S kodiert Ausgabe: Code(S) Dekodierer: Algorithmus, der S wieder aus Code(S) herstellt 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Einführung: Kodierung Relative Häufigkeiten aller Symbole über Alphabet A ergeben addiert 1 Einzelne relative Häufigkeiten können als Teilintervalle von [0,1) aufgefasst werden Logische Konsequenz: Überschneidungsfreies Verteilen der Teilintervalle über das Gesamtintervall Resultat: Partition von [0,1) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Kodierung in R: Grundidee Intervallbildung Idee: Wahrscheinlichkeiten werden kumuliert Dies liefert Teilintervall von [0,1) für jedes Symbol des Alphabets 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Kodierung in R: Kumulierte Wahrscheinlichkeiten Intervall aufteilen durch kumulierte Wahrscheinlichkeiten dazu Definition von K(ak) für ak  A: 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Intervallschachtelung Für das erste Symbol ordnen wir diesem ein Teilintervall zu Für das zweite betrachten wir dann dieses Teilintervall und partitionieren dies Iterieren bis Sequenzende... Ergebnis: Teilintervall von [0,1) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Kodierung in R: Die Grenzen low und high Bezeichnung der Intervallgrenzen: untere Grenze: low obere Grenze: high Grenzen werden im weiteren Verlauf nach dem Lesen jeden Symbols aktualisiert: 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Kodierung in R: Baumartige Partitionierung daraus resultiert: Baumartige Partitionierung von [0,1) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Kodierung in R: Beispiel (1) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Kodierung in R: Beispiel (2) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Kodierung in R: Algorithmus in Pseudocode low =0; high=1; do { temp = lies_zeichen(); low‘ = Modell-> untere_Grenze(temp,low,high); high‘ = Modell-> obere_Grenze (temp,low,high); low = low‘; high = high‘; } while ( !ende_der_sequenz() ); return( wert_im_intervall(low,high) ); 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Abschluß der Codesequenz Sequenzende muß dem Dekodierer mitgeteilt werden Möglichkeiten: Intervallgrenzen übertragen Länge der Sequenz übertragen Endsymbol mit minimaler Wahrscheinlichkeit im Modell bereitstellen 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Einführung: Dekodierung Idee: Schritte des Kodierers nachvollziehen Schritte laufen genau parallel zum Kodierungsvorgang Eingabe: Code in Form einer Zahl aus dem Zielintervall des Kodierers Verfahren: Überprüfen, in welches Teilintervall diese Zahl fällt, Teilintervall neu aufteilen und iterieren bis Sequenzende erreicht 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Dekodierung in R: Beispiel (1) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Dekodierung in R: Beispiel (2) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Dekodierung in R: Algorithmus in Pseudocode Eingabe: „Zahl“ seq =''; low =0; high =1; do { low‘ = modell->untere_grenze(Zahl,low,high); high‘ = modell->obere_grenze (Zahl,low,high); low = low‘; high = high‘; seq .= modell->symbol_zu_intervall(low,high); } while ( !ende_der_sequenz() ); return(seq); 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Zusammenfassung Bisher: Kodierung über reellen Zahlen [0,1) in Teilintervalle aufteilen sukzessive Intervalle aufziehen Problem: unendliche Genauigkeit vorausgesetzt 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Kodierung mittels Integers (Implementierung) Warum Integers? keine unendlichen reellen Zahlen im Rechner Integer in einfachen CPU schneller als Float geringer Speicherbedarf Konsequenz diskretes Intervall: [0,max_int] , max_int  N max_int: größter darstellbarer Integerwert 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Die Wahrscheinlichkeitsgrenzen low_count und high_count Wahrscheinlichkeitsgrenzen entsprechend anpassen: low_count = low * total high_count = high * total total = Summe der Häufigkeiten der Symbole 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Der Kodierer 3 statische Variablen mLow = untere Grenze (0) mHigh = obere Grenze (max_int) mStep = Schrittweite Interface void Encoder( unsigned int low_count, unsigned int high_count, unsigned int total ); 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Grenze 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Beispiel: Kodierung „a“:Encode( 0, 4, 8 ); [Pa=4,Pb=2,Pc=1,Pd=1] mStep = ( mHigh - mLow + 1 ) / total; = ( 127 - 0 + 1) / 8 = 128 / 8 = 16 mHigh = mLow + mStep * high_count - 1; = 0 + 16 * 4 - 1 = 64 – 1 = 63 mLow = mLow + mStep * low_count; = 0 + 16 * 0 = 0 eventuell noch ein bild dazu. 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Der Dekodierer Interface: Wahrscheinlichkeitsintervall bestimmen uint Decode_Target( unsigned int total ); Encoder nachbilden void Decode( unsigned int low_count, unsigned int high_count ); todo grafik 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Beispiel: Dekodierung (1) Decode_Target( 8 ); [Pa=4,Pb=2,Pc=1,Pd=1] mStep = ( mHigh - mLow + 1 ) / total; = ( 127 - 0 + 1 ) / 8 = 128 / 8 = 16 value = ( mBuffer - mLow ) / mStep; = ( 40 - 0 ) / 16 = 40 / 16 = 2 return value; // 2  [0,4) = „a“ 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Beispiel: Dekodierung (2) Decode( 0, 4 ); [Pa=4,Pb=2,Pc=1,Pd=1] mHigh = mLow + mStep * high_count - 1; = 0 + 16 * 4 - 1 = 64 – 1 = 63 mLow = mLow + mStep * low_count; = 0 + 16 * 0 = 0 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Problem: Begrenzt genaue Arithmetik Bei bisherigem Verfahren wird betrachtetes Intervall beliebig klein. Folge: total > mHigh – mLow also: (mHigh – mLow + 1) / total = 0 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Lösung: Skalierung des Intervalls Aber: Führende Stellen von mHigh und mLow gleich, also unveränderlich Also: Führende Stellen schon senden/speichern Intervall entsprechend vergrößern Mittel dazu: Skalierungsfunktionen 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Definition: E1-Skalierung while( mHigh < g_Half ) { SetBit( 0 ); mLow = mLow * 2; mHigh = mHigh * 2 + 1; } * 2 entspricht Shift nach links 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Definition: E2-Skalierung while( mLow >= g_Half ) { SetBit( 1 ); mLow = 2*(mLow-g_Half); mHigh = 2*(mHigh-g_Half)+1; } 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Problem: Was tun bei Intervallmitte? Problem bei mittig liegendem Intervall: führende Stellen von mLow und mHigh bleiben längere Zeit invers zueinander Folge: E1/E2-Skalierung nicht anwendbar Also: gleiches Problem wie zuvor 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Lösung Bei mittig liegendem Intervall: Intervall mittig aufziehen iterieren bis obere bzw. untere Hälfte festliegt Folge: E3-Skalierung 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Definition: E3-Skalierung while( ( g_1Q <= mLow ) && ( mHigh < g_3Q ) ) { mScale++; mLow = 2*(mLow-g_1Q); mHigh= 2*(mHigh-g_1Q) + 1; } 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Beispiel: E3-Skalierung E3, E3, E1 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Beispiel: Gleichheit von E1 E3^n und E2^n E1 Anwendung von E1, E2, E2 (also 011) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Beweis der Gleichheit (1) Formalisierung dieser Gleichheit durch Hintereinanderausführung der Abbildungen: 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Beweis der Gleichheit (2) Text überlegen 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Beweis der Gleichheit (3) Text überlegen 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Auflösung E3-Skalierung (1) Bisher nur E3-Skalierungen mitgezählt. Nun, wo die Hälfte feststeht, noch entsprechende Bits ausgeben: while( ( mHigh < g_Half ) || ( mLow >= g_Half ) ) { if( mHigh < g_Half ) // E1 { SetBit( 0 ); mLow = mLow * 2; mHigh = mHigh * 2 + 1; for(; mScale > 0; mScale-- ) SetBit( 1 ); // 1 == !0 } ... 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Auflösung E3-Skalierung (2) while( ( mHigh < g_Half ) || ( mLow >= g_Half ) ) { ... else if(mLow >= g_Half ) // E2 { SetBit( 1 ); mLow = 2 * ( mLow - g_Half ); mHigh = 2 * ( mHigh - g_Half ) + 1; for(; mScale > 0; mScale-- ) SetBit( 0 ); // 0 == !1 } 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Dekodierer: Buffer auch skalieren Im Dekoder muß der Buffer noch nachskaliert werden: // E1 mBuffer = 2 * mBuffer + GetBit(); // E2 mBuffer = 2 * (mBuffer-g_Half) + GetBit(); // E3 mBuffer = 2 * (mBuffer-g_1Q) + GetBit(); 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Zusammenfassung Kodierer void Encode( unsigned int low_count, unsigned int high_count, unsigned int total ); void EncodeFinish(); EncodeFinish() schließt die Sequenz korrekt ab. 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Abschluß der Codesequenz if( mLow < g_1Q ) // mLow < 1Q < Half <= mHigh { SetBit( 0 ); // 1 + e3-Skalierung abbauen for( int i=0; i<mScale+1; i++ ) SetBit( 1 ); } else // mLow < Half < 3Q <= mHigh // der Decoder fügt die Nullen automatisch an 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Zusammenfassung Dekodierer void DecodeStart()= for( int i=0; i<31; i++ ) mBuffer = ( mBuffer << 1 ) | GetBit(); uint DecodeTarget(unsigned int total ); void Decode(unsigned int low_count, unsigned int high_count ); 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Effizienzbetrachtung (1) Länge des Codes für jedes Symbol ai  A kann wie folgt beschränkt werden: Im folgenden: Wahrscheinlichkeiten über Sequenzen anstatt Symbolen betrachten.  l(x) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Effizienzbetrachtung (2) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Effizienzbetrachtung (3) Durchschnittliche Länge >= Entropie  Also durchschnittliche Länge pro Symbol: 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Effizienzbetrachtung (4) Entropie der Sequenz S(m) mit |S(m)|=m ist m-fache Entropie der Symbole x: Es folgt: 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Effizienzbetrachtung – Vergleich Huffman Für Huffman bekannt: Für Extended Huffman: 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Nachteile gegenüber der Huffman-Kodierung Nachteil bei sequentieller Kodierung: Wird ein Bit falsch empfangen, so ist der gesamte nachfolgende Code nicht korrekt dekodierbar. Huffman unter Umständen speicher-effizienter bei: großen Alphabeten und kurzen Sequenzen [(0,086+Pmax)* HM(S) ] oder Wahrscheinlichkeiten von P(a)=2n Arithmetische Kodierung i.a. etwas langsamer als Huffman 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Vorteile gegenüber der Huffman-Kodierung Meist höhere Speichereffizienz, auch in Bezug auf Arbeitsspeicher Grund: Vergabe unganzzahliger Bitlängen sowie Nutzung konstant großen Arbeitsspeichers Noch effizienter für kleine Alphabete Leichtes Aufsetzen verschiedener Modelle möglich Adaptive Modelle leichter zu implementieren 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Alternative Modelle Statische Modelle Feste angenommene Wahrscheinlichkeitsverteilung Adaptive Modelle Wahrscheinlichkeiten werden beim Lesen jedes Symbols neu berechnet Vorteile: Modell muss nicht übertragen werden Modell passt sich den Daten an ab hier Malte 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Order-n-Modelle Betrachtung der Wahrscheinlichkeiten im Kontext der letzten n Symbole Beispiel: „u“ an sich: Wahrscheinlichkeit 4,35 % „u“ nach „q“: Wahrscheinlichkeit 99 %  genauere Vorhersage durch Kontext 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis PPM Order „0..n“ Symbol in Order-n-Kontext: Kodiere Symbol Sonst: Wechsel zu n-1-Kontext Order -1: Speichere Symbole in Gleichverteilung  Für jeden Kontext eigene Verteilung 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis PPM (2) Probleme Order-Wechsel für Decoder kennzeichnen hoher Speicherbedarf Vorteile praktisch bestmögliche Kompression (neben BWT) gut auch bei kleinen Dateien ( < 1 Mb ) 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Zusammenfassung Arithmetische Kodierung ist zur Kompression geeignet Implementierung mit Integers oder Floats möglich Sequentielles Arbeiten ist möglich und sinnvoll Dazu Methode des Scaling erforderlich Verfahren sehr effizient für realistische Quellen Möglichkeit des modularen Austauschs von Modellen Sehr gut für adaptive Modelle, Erweiterungen wie PPM 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Ausblicke Range Coder: Benutzt ganze Bytes statt Bits für Skaling-Methoden Resultat: Bis zu 50% schneller bei nur 0,01% längerem Code In Zukunft: aufgrund schnellerer Float-Operationen (z.B. Itanium) eher Entwicklung in diese Richtung, weg von Integer-Arithmetik 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis

Eric Bodden, Malte Clasen, Joachim Kneis Implementierung Implementierung in C++ Einfacher Kodierer / Dekodierer Auswahl verschiedener Modelle möglich Visualisierung mit Kodierer als DLL Download möglich unter: http://ac.bodden.de 18.03.2002 Eric Bodden, Malte Clasen, Joachim Kneis