Modul 3 Darstellung von Information und Datenkompression Wörterbuchkompression MOTIVATION Das Feuer (James Krüss) Auszug, leicht verändert, oft im Deutsch-Lesebuch der Klasse 5 zu finden. Hörst du, wie die Flammen flüstern, Knicken, knacken, krachen, knistern, Wie das Feuer rauscht und saust, Brodelt, brutzelt, brennt und braust? Siehst du, wie die Flammen lecken, Züngeln und die Zunge blecken, Wie das Feuer tanzt und zuckt, Trockne Hölzer schlingt und schluckt? Riechst du, wie die Flammen rauchen, Brenzlig, brutzlig, brandig schmauchen, Wie das Feuer, rot und schwarz, Duftet, schmeckt nach Pech und Harz? ÜBERSICHT Wörterbuchkompression - LZ77 Der Algorithmus wurde von Abraham Lempel und Jacob Ziv 1977 vorgestellt, daher der Name. Er arbeitet normalerweise in linearer Laufzeit. Technisch ist LZ77 nicht aktuell, er dient jedoch als Grundlage für viele Kompressionsverfahren, die sich einer Wörterbuchtechnik bedienen. Von LZ77 abgeleitete und erweiterte Kompressionen finden sich z.B. in png, pdf und zip wieder. Beispiel: "regenbogenfarben" (Zur Vereinfachung werden alle hier behandelten Beispielwörter klein geschrieben.) Schritt 1 Trage das Wort in ein durchnummeriertes Feld ein 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 r e g e n b o g e n f a r b e n Schritt 2 Das Wort wird nun Buchstabe für Buchstabe von links nach rechts "abgearbeitet". Dabei werden 2 Fälle für die Ausgabe unterschieden: Fall 1: Der Buchstabe ist bisher noch nicht vorgekommen --> Ausgabe: (0,0,Buchstabe) Fall 2: Der Buchstabe (bzw. eine mit dem Buchstaben beginnende folgende Buchstabenkette) war vorher schon einmal da. Buchstaben bzw. Kette unterstreichen: --> Ausgabe: (Startposition der Kette, Länge der Kette, nächster Buchstabe) r e g e b --> --> --> --> --> (0,0,R) (0,0,e) (0,0,g) (2,1,n) (0,0,b) Fall Fall Fall Fall Fall 1 1 1 2 {"e" bei 2, nächster Buchstabe n} 1 1 Modul 3 Darstellung von Information und Datenkompression o --> gen > a --> r --> en -> (0,0,o) (3,3,f) (0,0,a) (1,1,b) (9,2,e) Fall Fall Fall Fall Fall Wörterbuchkompression 1 2 {"gen" bei 3, Länge 3, nächster f} 1 2 {"r" bei 1, Länge 1, nächster b} 2 {"en" bei 9, Länge 2, nächste e} Ausgabe: 0,0,R 0,0,e 0,0,g 2,1,n 0,0,b 0,0,o 3,3,f 0,0,a 1,1,b 9,2,e Anmerkung 1 Die Ausgabekette scheint erstmal länger zu sein als die Eingabekette. Der Vorteil des Algorithmus liegt darin, dass die Zahlen zur Codierung weniger Bit brauchen als die Buchstaben und dass bei längeren Texten (oder Bildern) die Zeichen- und Wortwiederholungen mehr werden Anmerkung 2 – wichtig! Die hier vorgestellte Version ist vereinfacht dargestellt. Der richtige Algorithmus arbeitet mit einem Datenfenster mit begrenzter Länge und einem Vorschaufenster. Die zu codierende Zeichen werden durch beide Fenster durchgeschoben. Dadurch hat der Algorithmus eine lineare Laufzeitentwicklung O(n). Datenfenster und Vorschaufenster wurden hier aus Gründen der Vereinfachung und Reduktion auf die wesentliche Verständnisgrundlage weggelassen, das Prinzip des Algorithmus' bleibt dabei unangetastet. Nur die Laufzeit wird dadurch quadratisch O(n²). TRAINIEREN Aufgabe 1 Codiere mit der LZ77-Codierung die Zeichenketten a) "rosarote rose" und b) "mississippi" c) "von zeit zu zeit" Aufgabe 2 Decodiere: a) (0,0,s) (0,0,o) (0,0,m)(3,1,e) (0,0,r) (0,0,_)(2,1,d) (5,3,s) (2,1,n) (15,1,e) b) (0,0,m) (0,0,a) (0,0,t)(0,0,h) (0,0,e) (1,3,i)(0,0,k) 2