Funktionale Programmierung Huffman-Kodierung Bildquelle: http://www.fim.uni-linz.ac.at/lva/Rechtliche_Aspekte/2001SS/Stegano/bilder/huffman.gif Prof. Dr. Margarita Esponda Prof. Dr. Margarita Esponda Funktionale Programmierung Motivation Wir möchten Nachrichten komprimieren: - Speicherplatzreduzierung => Energie und Zeit bei Übertragung sparen - ohne Informationsverlust - mit einer effizienten Wiederherstellung der originalen Information Prof. Dr. Margarita Esponda Funktionale Programmierung Zwei Lösungen Lauflängenkodierung Lange Folgen sich wiederholender Zeichen können in einer kompakten Form kodiert werden, indem jede Folge durch die Anzahl der Wiederholungen und eine einmalige Angabe des sich Datenkompression wiederholenden Zeichens ersetzt wird. Kodierung mit variabler Länge Häufige Zeichen werden mit möglichst kurzen Bitfolgen kodiert und längere Bitfolgen werden für nicht sehr häufige Zeichen benutzt. Prof. Dr. Margarita Esponda Funktionale Programmierung Datenkomprimierung Lauflängenkodierung Beispiele: original XXXXXXXBBBQTTTTTTTTTTTTKKKKK Kompakte Form 7X3B1Q12T5K Bei binär kodierten Dateien brauchen wir nicht einmal die Zeichen anzugeben, weil wir wissen, dass die Läufe sich nur zwischen 0 und 1 abwechseln. 000000000011111111110000000000000111111 10 10 13 6 000000011111111111100000000000000001111 7 12 16 4 Prof. Dr. Margarita Esponda Funktionale Programmierung Lauflängenkodierung compress :: (Eq a) => [a] -> [(a, Int)] compress [] = [] compress (x:xs) = enc [] (x,1) xs where enc :: (Eq a) => [(a, Int)] -> (a, Int) -> [a] -> [(a, Int)] enc ls (x,n) [] = ls ++ [(x,n)] enc ls (x,n) (y:ys) | x==y = enc ls (x, n+1) ys | otherwise = enc (ls ++ [(x,n)]) (y,1) ys Prof. Dr. Margarita Esponda Funktionale Programmierung Lauflängenkodierung GIF-Kompression 0 1 2 3 4 5 6 7 8 9 2 2 2 2 2 2 2 2 2 2 gut für GIF-Kompression Prof. Dr. Margarita Esponda 1 8 1 1 1 1 8 1 1 1 4 3 6 6 6 6 1 1 1 1 4 4 4 3 3 3 2 2 2 *2 *2 *2 *1 2 *0 *0 1 8 1 4 3 6 1 1 4 3 schlecht für GIF-Kompression Funktionale Programmierung Kodierung mit variabler Länge Frage Wie können Zeichen kodiert werden, sodass die Bit-Länge eines Textes minimiert wird? Wenn wir n verschiedene Zeichen mit einer festen BitLänge kodieren möchten, brauchen wir mindestens ⎡log2 n⎤ Bits für die Kodierung jedes Zeichens. Zeichen werden normalerweise mit 8 Bits (ASCII-Code) oder 16 Bits (UNICODE) kodiert. Prof. Dr. Margarita Esponda Funktionale Programmierung Kodierung mit variabler Länge Grundlegende Idee: Die Anzahl der Bits für die Kodierung der einzelnen Zeichen an die Häufigkeit innerhalb des Textes anzupassen. Kürzere Bitfolgen für häufige Zeichen und längere Bitfolgen für seltene Zeichen. Prof. Dr. Margarita Esponda Funktionale Programmierung Entropie Informationstheorie A Mathematical Theory of Communication 1948 Claude Shannon Die Entropie eines Zeichensystems ist ein Maß für den mittleren Informationsgehalt des Systems. Prof. Dr. Margarita Esponda Funktionale Programmierung Entropie Nachricht z1..z2..z1..z3……z7 Quelle Die Information, die ein Zeichen trägt, hängt von seiner Häufigkeit ab. Seltene Zeichen vermitteln mehr Information als häufige Zeichen. Beispiel: Beim Worträtsel hilft es viel mehr, zu wissen, dass ein seltener Buchstabe vorkommt als einer, der sehr häufig auftritt. Wenn die Wahrscheinlichkeit des Auftretens eines bestimmten Zeichens zi gleich pi ist, wird der Informationsgehalt von zi wie folgt definiert: Hi = log (1/pi) Prof. Dr. Margarita Esponda Funktionale Programmierung Entropie Nachricht z1..z2..z1..z3……z7 Quelle Der mittlere Informationsgehalt der gesamten Quelle wird als die Entropie der Nachricht bezeichnet und wie folgt definiert: n H(A) = Σ pi log (1/pi) i=1 Wir brauchen Prof. Dr. Margarita Esponda log2 (1/pi ) Bits um zi zu kodieren Funktionale Programmierung Datenkomprimierung Kodierung mit variabler Länge Die Häufigkeit der Zeichen hängt von der Art der Information ab. Beispiel: WELCHE BUCHSTABEN WERDEN IN DER DEUTSCHEN SPRACHE AM HÄUFIGSTEN VERWENDET? E _ N S C H R D T W A M B U I L P V ? 14 9 6 4 4 4 4 4 4 3 3 2 2 2 2 1 1 1 1 00 101 .... 0100 0101 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 011000 011001 Prof. Dr. Margarita Esponda Funktionale Programmierung Kodierung mit variabler Länge Wie kann man für eine beliebige Zeichenfolge die optimale Kodierung mit variabler Länge festlegen? Ich will die Bitfolge dekodieren. Wie kann ich wissen, wann die Kodierung eines Zeichens zu Ende ist? 01001101011111000001110101010101000100001111 Prof. Dr. Margarita Esponda Funktionale Programmierung Huffman-Kodierung David A. Huffman stellte 1952 einen Algorithmus, der aus einer gegebenen Nachricht einen Präfixkode erstellt, der die Länge einer kodierten Nachricht minimiert. Eine konstante Wahrscheinlichkeitsverteilung der einzelnen Zeichen wird verwendet. Prof. Dr. Margarita Esponda Funktionale Programmierung Kodierung mit variabler Länge Für diese Art der Komprimierung mit variabler Länge hat sich Huffman einen optimalen Algorithmus ausgedacht, mit dem die Kodierung und Dekodierung von Information realisiert werden kann. Die Huffman-Kodierung wird überall für die Datenkomprimierung verwendet, und je nachdem, welche Eigenschaften die Daten haben, spart man meistens zwischen 10% und 90% des ursprünglichen Platzes. Prof. Dr. Margarita Esponda Funktionale Programmierung Kodierung mit variabler Länge Präfix-Kodierung Um aus einer Bitfolge Zeichen mit einer variablen Bitlänge eindeutig zu erkennen, muss die Kodierung die Eigenschaft haben: Keine Bitkodierung eines Zeichens darf als Präfix in der Kodierung eines anderen Zeichens vorkommen. Beispiel: Wenn die Kodierung von A 101 ist, darf keine andere Zeichenkodierung die Bits 101 am Anfang haben. Prof. Dr. Margarita Esponda Funktionale Programmierung Erzeugung des Huffman-Code Trie Für die Dekodierung brauchen wir eine effiziente allgemeine Darstellung der Kodierung aller Zeichen, und das wird mit einer Trie-Datenstruktur gemacht. Ein Trie ist eine Baumstruktur mit der Eigenschaft, dass die Information sich nur in den Blättern befindet. Die inneren Knoten sind nur Verkettungsknoten. C A Prof. Dr. Margarita Esponda B D E Funktionale Programmierung Erzeugung des Huffman-Code 1. Die Häufigkeiten der Zeichen werden berechnet Nehmen wir an, wir wollen eine Textdatei komprimieren. Zuerst zählen wir, wie oft jedes Zeichen in der Datei vorkommt. Beispiel: WELCHE BUCHSTABEN WERDEN IN DER DEUTSCHEN SPRACHE AM HÄUFIGSTEN VERWENDET? Häufigkeiten E _ N S C H R D T W A M B U I L P V ? 14 9 6 4 4 4 4 4 3 2 2 2 1 1 1 1 Prof. Dr. Margarita Esponda 4 3 2 Funktionale Programmierung Erzeugung des Huffman-Code 2. Der Trie-Baum wird wie folgt erzeugt. L 1 P 1 V 1 ? M 1 2 B 2 U 2 I W A S C H R D T N _ 2 3 4 4 4 4 4 6 3 4 E 9 14 L P V ? M B U I W A S C H R D T N _ E 1 1 1 1 2 2 2 2 3 3 4 4 4 4 4 4 6 9 14 Die Häufigkeiten werden in einer Min-Priority-Queue gespeichert. Eine Min-Priority-Queue ist nichts anderes als eine Datenstruktur, auf der die Operationen Extract-Min und Insert definiert sind. Prof. Dr. Margarita Esponda Funktionale Programmierung Erzeugung des Huffman-Baumes L P V ? M B U I W A S C H R D T N _ E 1 1 1 1 2 2 2 2 3 3 4 4 4 4 4 4 6 9 14 1. Die zwei Knoten mit den kleinsten Häufigkeiten in der prioriry-queue werden extrahiert und deren Häufigkeiten addiert. 2. Die Summe wird in einem neu erzeugten Knoten gespeichert, der als linkes und rechtes Kind die zwei extrahierten Knoten hat. V ? M B U I W A S C H R D T N _ E 1 1 2 2 2 2 3 3 4 4 4 4 4 4 6 9 14 2 L P 1 1 Prof. Dr. Margarita Esponda Funktionale Programmierung Erzeugung des Huffman-Baumes V ? 1 1 2 L P 1 1 M B U I W A S C H R D T N _ E 2 2 2 2 3 3 4 4 4 4 4 4 6 9 14 3. Zum Schluss wird die Wurzel des neuen Binärbaums wieder in die priority-queue eingefügt. Prof. Dr. Margarita Esponda Funktionale Programmierung Erzeugung des Huffman-Baumes 2 2 V ? 1 1 L P 1 1 Prof. Dr. Margarita Esponda M B U I W A S C H R D T N _ E 2 2 2 2 3 3 4 4 4 4 4 4 6 9 14 Erzeugung des Huffman-Baumes 2 2 V ? L P 1 1 1 1 Prof. Dr. Margarita Esponda M B U I W A S C H R D T N _ E 2 2 2 2 3 3 4 4 4 4 4 4 6 9 14 Erzeugung des Huffman-Baumes 4 2 2 V ? L P 1 1 1 1 Prof. Dr. Margarita Esponda M B U I W A S C H R D T N _ E 2 2 2 2 3 3 4 4 4 4 4 4 6 9 14 Erzeugung des Huffman-Baumes M B U I W A 2 2 2 2 3 3 4 2 Prof. Dr. Margarita Esponda S C H R D T N _ E 4 4 4 4 4 4 6 9 14 2 V ? L P 1 1 1 1 Erzeugung des Huffman-Baumes U I W A 2 2 3 3 4 S C H R D T N _ E 4 4 4 4 4 4 6 9 14 4 2 M B 2 2 Prof. Dr. Margarita Esponda 2 V ? L P 1 1 1 1 Erzeugung des Huffman-Baumes U I W A 2 2 3 3 Prof. Dr. Margarita Esponda 4 4 M B 2 2 2 S C H R D T N _ E 4 4 4 4 4 4 6 9 14 2 V ? L P 1 1 1 1 Erzeugung des Huffman-Baumes W A 3 3 4 4 S C H R D T N _ E 4 4 4 4 4 4 6 9 14 4 U I 2 2 Prof. Dr. Margarita Esponda M B 2 2 2 2 V ? L P 1 1 1 1 Erzeugung des Huffman-Baumes W A 3 3 Prof. Dr. Margarita Esponda 4 4 4 U I M B 2 2 2 2 2 S C H R D T N _ E 4 4 4 4 4 4 6 9 14 2 V ? L P 1 1 1 1 Erzeugung des Huffman-Baumes 4 4 4 S C H R D T N _ E 4 4 4 4 4 4 6 9 14 6 W A 3 3 Prof. Dr. Margarita Esponda U I M B 2 2 2 2 2 2 V ? L P 1 1 1 1 Erzeugung des Huffman-Baumes 4 Prof. Dr. Margarita Esponda 4 4 U I M B 2 2 2 2 2 S C H R D T 4 4 4 4 4 4 2 V ? L P 1 1 1 1 6 W A 3 3 N _ E 6 9 14 Erzeugung des Huffman-Baumes 4 S C H R D T 4 4 4 4 4 4 8 2 4 4 U I M B 2 2 2 2 Prof. Dr. Margarita Esponda 2 V ? L P 1 1 1 1 6 W A 3 3 N _ E 6 9 14 Erzeugung des Huffman-Baumes 4 2 S C H R D T 4 4 4 4 4 4 2 V ? L P 1 1 1 1 Prof. Dr. Margarita Esponda N 6 8 6 W A 3 3 4 _ E 9 14 4 U I M B 2 2 2 2 Erzeugung des Huffman-Baumes C H R D T 4 4 4 4 4 N 6 8 6 _ E 9 14 8 S 4 2 W A 3 3 4 4 4 2 V ? L P 1 1 1 1 Prof. Dr. Margarita Esponda U I M B 2 2 2 2 Erzeugung des Huffman-Baumes C H R D T 4 4 4 4 4 N 6 8 6 W A 3 3 E 9 14 S 4 2 Prof. Dr. Margarita Esponda 8 _ 4 4 2 V ? L P 1 1 1 1 4 U I M B 2 2 2 2 Erzeugung des Huffman-Baumes 8 C H 4 4 R D T 4 4 4 N 6 8 6 W A 3 3 E 9 14 S 4 2 Prof. Dr. Margarita Esponda 8 _ 4 4 2 V ? L P 1 1 1 1 4 U I M B 2 2 2 2 Erzeugung des Huffman-Baumes R D T 4 4 4 N 6 8 6 8 W A C H 3 3 4 4 E 9 14 S 4 2 Prof. Dr. Margarita Esponda 8 _ 4 4 2 V ? L P 1 1 1 1 4 U I M B 2 2 2 2 Erzeugung des Huffman-Baumes T N 6 4 8 6 8 8 _ E 9 14 8 R D 4 4 W A C H 3 3 4 4 S 4 2 Prof. Dr. Margarita Esponda 4 4 2 V ? L P 1 1 1 1 4 U I M B 2 2 2 2 Erzeugung des Huffman-Baumes T N 6 4 8 6 8 8 W A R D C H 3 3 4 4 4 4 E 9 14 S 4 2 Prof. Dr. Margarita Esponda 8 _ 4 4 2 V ? L P 1 1 1 1 4 U I M B 2 2 2 2 Erzeugung des Huffman-Baumes N 8 6 10 8 8 R D C H 4 4 4 4 8 _ E 9 14 S 4 4 4 4 T 6 4 2 W A 3 3 Prof. Dr. Margarita Esponda 2 V ? L P 1 1 1 1 U I M B 2 2 2 2 Erzeugung des Huffman-Baumes N _ 8 6 8 8 R D C H 4 4 4 4 4 V ? L P 1 1 1 1 14 T 4 4 2 10 9 S 2 Prof. Dr. Margarita Esponda 8 E 4 6 4 U I M B W A 2 2 2 2 3 3 Erzeugung des Huffman-Baumes _ 8 8 8 E 10 9 14 14 N 6 Prof. Dr. Margarita Esponda C H 4 4 S 4 T 4 4 4 6 4 8 R D 4 4 2 2 V ? L P 1 1 1 1 U I M B W A 2 2 2 2 3 3 Erzeugung des Huffman-Baumes E _ 8 8 C H 4 4 4 V ? L P 1 1 1 1 14 4 4 14 N T 4 2 10 9 S 2 Prof. Dr. Margarita Esponda 8 6 4 6 8 U I M B W A R D 2 2 2 2 3 3 4 4 Erzeugung des Huffman-Baumes _ 8 E 10 9 14 14 16 N T 4 8 C H 4 4 6 4 6 8 8 S 4 2 4 2 V ? L P 1 1 1 1 Prof. Dr. Margarita Esponda 4 U I M B W A R D 2 2 2 2 3 3 4 4 Erzeugung des Huffman-Baumes _ 8 E 10 9 14 N T 4 4 16 14 6 4 6 8 8 U I M B W A R D 2 2 2 2 3 3 4 4 C H 4 4 8 S 4 2 Prof. Dr. Margarita Esponda 4 2 V ? L P 1 1 1 1 Erzeugung des Huffman-Baumes E 10 14 16 14 17 N T _ 8 4 6 4 6 8 8 9 W A R D 3 3 4 4 C H 4 4 8 S 4 4 4 U I M B 2 2 2 2 Prof. Dr. Margarita Esponda 2 2 V ? L P 1 1 1 1 Erzeugung des Huffman-Baumes E 10 14 16 14 _ N T 6 4 6 8 8 W A R D 3 3 4 4 C H 4 4 8 8 9 S 4 2 Prof. Dr. Margarita Esponda 17 4 4 2 V ? L P 1 1 1 1 4 U I M B 2 2 2 2 Erzeugung des Huffman-Baumes E 16 14 17 24 _ 8 10 14 N T 6 4 6 H 4 4 A R D 3 3 4 4 9 S 4 2 4 4 8 W Prof. Dr. Margarita Esponda C 8 8 2 V ? L P 1 1 1 1 4 U I M B 2 2 2 2 Erzeugung des Huffman-Baumes E 16 14 24 17 _ 8 C H 4 4 4 V ? L P 1 1 1 1 14 N T 4 4 2 10 9 S 2 Prof. Dr. Margarita Esponda 8 8 6 4 4 6 8 U I M B W A R D 2 2 2 2 3 3 4 4 Erzeugung des Huffman-Baumes 24 17 30 _ 8 E 16 14 C H 4 4 N 6 4 4 6 8 8 S 4 2 Prof. Dr. Margarita Esponda 14 T 4 8 10 9 4 2 V ? L P 1 1 1 1 U I M B W A R D 2 2 2 2 3 3 4 4 Erzeugung des Huffman-Baumes 24 17 30 E _ 8 10 9 N T 4 6 4 4 16 14 14 6 8 8 U I M B W A R D C H 2 2 2 2 3 3 4 4 4 4 8 S 4 2 Prof. Dr. Margarita Esponda 4 2 V ? L P 1 1 1 1 Erzeugung des Huffman-Baumes 30 41 E 16 14 24 17 8 8 _ 8 10 9 14 6 4 4 H 4 4 S 4 6 8 2 U I M B W A R D 2 2 2 2 3 3 4 4 Prof. Dr. Margarita Esponda 4 N T 4 C 2 V ? L P 1 1 1 1 Erzeugung des Huffman-Baumes 41 30 E 16 14 24 17 _ 8 C H 4 4 4 V ? L P 1 1 1 1 14 N T 4 2 10 9 S 2 Prof. Dr. Margarita Esponda 8 8 4 6 4 4 6 8 U I M B W A R D 2 2 2 2 3 3 4 4 Erzeugung des Huffman-Baumes 71 41 30 E 16 14 24 17 _ 8 C H 4 4 8 8 S 4 2 V ? L P 1 1 1 1 14 N T 4 2 10 9 4 6 4 4 6 8 U I M B W A R D 2 2 2 2 3 3 4 4 Kodierung der Zeichen Der Code jedes Zeichens wird aus dem Weg von der Wurzel des Baumes bis zu dem entsprechenden 0 Buchstaben aus den E Kanten abgelesen. 14 71 0 1 30 0 1 16 0 0 8 0 C 0100 C H H 0101 . 4 4 . . 0 0 S 4 10 9 1 4 1 2 0 1 0 1 V 011000 V ? L P ? 011001 1 1 1 1 Prof. Dr. Margarita Esponda 1 14 1 0 0 0 1 0 U I M 2 2 2 6 4 4 1 N T 4 2 0 1 8 1 0 24 _ 8 1 1 17 1 E 00 _ 101 41 6 8 0 1 0 1 B W A R D 2 3 3 4 4 1 Dekodierung 0010110010111010111100101 E 71 0 1 30 0 0 1 41 1 E 14 16 0 24 17 1 0 0 1 1 _ 0 8 8 1 C H 4 4 0 0 S 4 1 2 0 2 1 0 1 V ? L P 1 1 1 1 Prof. Dr. Margarita Esponda 10 9 1 14 1 0 4 1 0 N 6 4 1 1 0 T 4 4 0 0 8 1 6 8 0 1 0 1 U I M B W A R D 2 2 2 2 3 3 4 4 Dekodierung 0010110010111010111100101 E 71 0 1 30 0 _ 0 1 41 1 E 14 16 0 24 17 1 0 0 1 1 _ 0 8 8 1 C H 4 4 0 0 S 4 1 2 0 2 1 0 1 V ? L P 1 1 1 1 Prof. Dr. Margarita Esponda 10 9 1 14 1 0 4 1 0 N 6 4 1 1 0 T 4 4 0 0 8 1 6 8 0 1 0 1 U I M B W A R D 2 2 2 2 3 3 4 4 Dekodierung 0010110010111010111100101 E 71 0 M 1 30 0 _ 0 1 41 1 E 14 16 0 24 17 1 0 0 1 1 _ 0 8 8 1 C H 4 4 0 0 S 4 1 2 0 2 1 0 1 V ? L P 1 1 1 1 Prof. Dr. Margarita Esponda 10 9 1 14 1 0 4 1 0 N 6 4 1 1 0 T 4 4 0 0 8 1 6 8 0 1 0 1 U I M B W A R D 2 2 2 2 3 3 4 4 Dekodierung 0010110010111010111100101 _ E _ M N H N 71 0 Damit die Information später dekodiert werden kann, muss 1 30 0 0 1 der dazu gehörige Huffman- 41 Baum in der komprimierten Datei beinhaltet sein. 1 E 14 16 0 24 17 1 0 0 1 1 _ 0 8 8 1 C H 4 4 0 0 S 4 1 2 0 2 1 0 1 V ? L P 1 1 1 1 Prof. Dr. Margarita Esponda 10 9 1 14 1 0 4 1 0 N 6 4 1 1 0 T 4 4 0 0 8 1 6 8 0 1 0 1 U I M B W A R D 2 2 2 2 3 3 4 4