Algorithmen und Datenstrukturen D3. Kompression 1 Marcel L¨ uthi Universit¨ at Basel 23. Mai 2018 1Folien basierend auf Vorlesungsfolien von Sedgewick & Wayne https://algs4.cs.princeton.edu/lectures/55DataCompression-2x2.pdf
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Einf¨ uhrung
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW ¨ Ubersicht Sortieren Komplexit¨ ats- analyse Sortieren Fundamentale Datenstrukturen Suchen (Tries) A&D Suchen Graphen Kompression Strings Substring Suche Weiterf¨ uhrende Themen
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Informatiker des Tages : Abraham Lempel Professor am Technion (Israel Institute of Technology) Forschungsgebiet: Informationstheorie Gewinner der IEEE Richard W. Hamming Medal Entwickler der Lempel-Ziv Familie von Komprimierungsalgorithmen. Abraham Lempel Ziv, Jacob, and Abraham Lempel. “A universal algorithm for sequential data compression.“ IEEE Transactions on information theory 23.3 (1977)
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Datenkompression Kompression wird gebraucht um Gr¨ osse einer Datei zu reduzieren Weniger Speicherplatz ben¨ otigt Schnellere ¨ Ubertragung (mehr Information bei kleinerer Bandbreite) Fun Facts: Jede Minuten werden 60 Stunden Video auf Youtube hochgeladen. Im Cern werden pro Sekunde ca 1 Petabyte Daten generiert Das meiste wird verworfen 200 Petabyte wurden bisher dauerhaft archiviert. Kompression ist nur m¨ oglich, da die meisten Daten viel Redundanz aufweisen.
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Quiz Geben Sie Beispiele von Redundanz in: geschriebenem Text Musik Bilder Videos.
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Anwendungen Komprimierung von Dateien Dateien (gzip, bzip, compress) Archivierungsprogramme (PKZip. Winzip) Dateisysteme (NTFS, ZFS) Multimedia Bilder: Jpeg, png, ... Musik: MP3, ogg Videos: Mpeg, divX, ... Genetik: Kompression von Sequenzdaten
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Idee: Verlustfreie Kompression Message: Bin¨ ardaten B die komprimiert werden sollen Komprimieren: Komprimierte Repr¨ asentation C ( B ) Dekomprimieren: Rekonstruktion von Orginaldaten B Quelle: Sedgewick & Wayne, Algorithmen, Abbildung 5.56 Kompressionsrate: Bits in C ( B ) / Bits in B
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Beispiel: Code von fester L¨ ange f¨ ur Gensequenzen Genom: Alphabet - ACGT Ziel: Gensequenz der L¨ ange N codieren (Beispiel ATAGCGTTAG) Ascii Code 2-Bit Code Zeichen Bin¨ arrepr¨ asentation Zeichen Bin¨ arrepr¨ asentation A 01000001 A 00 C 01000011 C 01 T 01010100 T 10 G 01000111 G 11
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Limiten der Kompression Nicht alle Daten k¨ onnen komprimiert werden. Kompression Komp nicht m¨ oglich. einfach.
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Universelle Kompression? Theorem Es gibt keinen Algorithmus der jeden beliebigen Bitstring komprimieren kann. Argument 1: Idee: Kompressionsalgorithmus wird immer wieder rekursiv auf Ausgabe ausgef¨ uhrt. Widerspruch, da man so Gr¨ osse 0 erreicht
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Universelle Kompression? Theorem Es gibt keinen Algorithmus der jeden beliebigen Bitstring komprimieren kann. Argument 2: Annahme: Alle Bitstrings der L¨ ange 1000 k¨ onnen komprimiert werden Also 2 1000 verschiedene Strings k¨ onnen mit max 999 Bits codiert werden. Widerspruch, da wir nur max 2 999 verschiedene Strings mit 999 Bits codieren k¨ onnen.
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Schreiben / Lesen von bin¨ aren Daten class BinaryStream : def writeBit(b : boolean) def writeNBitNumber (number : int , n: int) def writeChar(c : char) def writeString (s : string) ... def readBit () -> boolean def readNBitNumber (n: int) -> number def readChar () -> char def readString (nChars) -> string ...
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Beispiel: Datum IPython Notebooks: Compression.ipynb
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Laufl¨ angencodierung
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Laufl¨ angencodierung Einfachste Art der Redundanz in Bitstrings: Viele aufeinanderfolgende 0 oder 1 0000000000000001111111000000011111111 Repr¨ asentation: 4 (oder 8) bit Z¨ ahler die alternierend f¨ ur Anzahl 0 oder 1 stehen (beginnend mit 0) 1111 0111 0111 1011 ���� ���� ���� ���� 15 × 0 7 × 1 7 × 0 11 × 1 Was machen wir wenn Sequenz von 0 oder 1 l¨ anger als Maximum des Z¨ ahlers ist? Passende Sequenz der L¨ ange 0 einf¨ ugen.
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Laufl¨ angencodierung Einfachste Art der Redundanz in Bitstrings: Viele aufeinanderfolgende 0 oder 1 0000000000000001111111000000011111111 Repr¨ asentation: 4 (oder 8) bit Z¨ ahler die alternierend f¨ ur Anzahl 0 oder 1 stehen (beginnend mit 0) 1111 0111 0111 1011 ���� ���� ���� ���� 15 × 0 7 × 1 7 × 0 11 × 1 Was machen wir wenn Sequenz von 0 oder 1 l¨ anger als Maximum des Z¨ ahlers ist? Passende Sequenz der L¨ ange 0 einf¨ ugen.
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Laufl¨ angencodierung Einfachste Art der Redundanz in Bitstrings: Viele aufeinanderfolgende 0 oder 1 0000000000000001111111000000011111111 Repr¨ asentation: 4 (oder 8) bit Z¨ ahler die alternierend f¨ ur Anzahl 0 oder 1 stehen (beginnend mit 0) 1111 0111 0111 1011 ���� ���� ���� ���� 15 × 0 7 × 1 7 × 0 11 × 1 Was machen wir wenn Sequenz von 0 oder 1 l¨ anger als Maximum des Z¨ ahlers ist? Passende Sequenz der L¨ ange 0 einf¨ ugen.
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Laufl¨ angencodierung Einfachste Art der Redundanz in Bitstrings: Viele aufeinanderfolgende 0 oder 1 0000000000000001111111000000011111111 Repr¨ asentation: 4 (oder 8) bit Z¨ ahler die alternierend f¨ ur Anzahl 0 oder 1 stehen (beginnend mit 0) 1111 0111 0111 1011 ���� ���� ���� ���� 15 × 0 7 × 1 7 × 0 11 × 1 Was machen wir wenn Sequenz von 0 oder 1 l¨ anger als Maximum des Z¨ ahlers ist? Passende Sequenz der L¨ ange 0 einf¨ ugen.
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Laufl¨ angencodierung: Anwendungen Bitmaps speichern:
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Laufl¨ angencodierung: Anwendungen Bitmaps speichern:
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Beispiele und Implementation IPython Notebooks: Compression.ipynb
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Huffmann coding
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Huffman Komprimierung: Motivation Ascii Codierung weist jedem Zeichen einen 8-bit Wert zu A B R A C A D A 01000001 01000010 01010010 01000001 01000011 01000001 01000100 01000001 D ben¨ otigt gleich viel Speicher wie A. D kommt 1 mal vor, A 4 mal Codes variabler L¨ ange Huffman Codierung weist jedem Zeichen einen Code variabler L¨ ange zu.
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Huffman Komprimierung: Motivation A B R A C A D A B R A 0 1 00 0 01 0 10 0 1 00 0 Komprimierter String: 010000101001000 Braucht viel weniger Platz Aber beginnt String mit AB oder C? Wie legen wir den Code fest? Wie weiss Empf¨ anger was Code war?
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Huffman Komprimierung: Motivation A B R A C A D A B R A 0 1 00 0 01 0 10 0 1 00 0 Komprimierter String: 010000101001000 Braucht viel weniger Platz Aber beginnt String mit AB oder C? Wie legen wir den Code fest? Wie weiss Empf¨ anger was Code war?
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Huffman Komprimierung: Motivation A B R A C A D A B R A 0 1 00 0 01 0 10 0 1 00 0 Komprimierter String: 010000101001000 Braucht viel weniger Platz Aber beginnt String mit AB oder C? Wie legen wir den Code fest? Wie weiss Empf¨ anger was Code war?
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Huffman Komprimierung: Motivation A B R A C A D A B R A 0 1 00 0 01 0 10 0 1 00 0 Komprimierter String: 010000101001000 Braucht viel weniger Platz Aber beginnt String mit AB oder C? Wie legen wir den Code fest? Wie weiss Empf¨ anger was Code war?
Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW Pr¨ afixfreie Codes Zeichen bleiben unterscheidbar, wenn kein Zeichen ein Pr¨ afix eines andern ist. Code Zeichen A 0 B 1111 C 110 D 100 R 1110 Welcher String ist hier codiert? 011111110011001000111111100 0 1111 1110 0 110 0 100 0 1111 1110 0 ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� ���� A B R A C A D A B R A
Recommend
More recommend