Algorithmen und Datenstrukturen D3. Kompression 1 Marcel L uthi - - PowerPoint PPT Presentation

algorithmen und datenstrukturen
SMART_READER_LITE
LIVE PREVIEW

Algorithmen und Datenstrukturen D3. Kompression 1 Marcel L uthi - - PowerPoint PPT Presentation

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


slide-1
SLIDE 1

Algorithmen und Datenstrukturen

  • D3. Kompression1

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

slide-2
SLIDE 2

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Einf¨ uhrung

slide-3
SLIDE 3

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

¨ Ubersicht

A&D Sortieren Komplexit¨ ats- analyse Fundamentale Datenstrukturen Suchen Graphen Strings Sortieren Suchen (Tries) Kompression Substring Suche Weiterf¨ uhrende Themen

slide-4
SLIDE 4

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Informatiker des Tages : Abraham Lempel

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. Ziv, Jacob, and Abraham Lempel. “A universal algorithm for sequential data compression.“ IEEE Transactions on information theory 23.3 (1977)

slide-5
SLIDE 5

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Datenkompression

Kompression wird gebraucht um Gr¨

  • sse einer Datei zu reduzieren

Weniger Speicherplatz ben¨

  • tigt

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¨

  • glich, da die meisten Daten viel Redundanz

aufweisen.

slide-6
SLIDE 6

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Quiz

Geben Sie Beispiele von Redundanz in: geschriebenem Text Musik Bilder Videos.

slide-7
SLIDE 7

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

slide-8
SLIDE 8

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

slide-9
SLIDE 9

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 Zeichen Bin¨ arrepr¨ asentation A 01000001 C 01000011 T 01010100 G 01000111 2-Bit Code Zeichen Bin¨ arrepr¨ asentation A 00 C 01 T 10 G 11

slide-10
SLIDE 10

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Limiten der Kompression

Nicht alle Daten k¨

  • nnen komprimiert werden.

Kompression einfach. Komp nicht m¨

  • glich.
slide-11
SLIDE 11

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¨

  • sse 0 erreicht
slide-12
SLIDE 12

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¨

  • nnen komprimiert

werden Also 21000 verschiedene Strings k¨

  • nnen mit max 999 Bits

codiert werden. Widerspruch, da wir nur max 2999 verschiedene Strings mit 999 Bits codieren k¨

  • nnen.
slide-13
SLIDE 13

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 ...

slide-14
SLIDE 14

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Beispiel: Datum

IPython Notebooks: Compression.ipynb

slide-15
SLIDE 15

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Laufl¨ angencodierung

slide-16
SLIDE 16

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

  • der 1 stehen (beginnend mit 0)

1111

  • 15×0

0111

  • 7×1

0111

  • 7×0

1011

  • 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.

slide-17
SLIDE 17

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

  • der 1 stehen (beginnend mit 0)

1111

  • 15×0

0111

  • 7×1

0111

  • 7×0

1011

  • 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.

slide-18
SLIDE 18

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

  • der 1 stehen (beginnend mit 0)

1111

  • 15×0

0111

  • 7×1

0111

  • 7×0

1011

  • 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.

slide-19
SLIDE 19

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

  • der 1 stehen (beginnend mit 0)

1111

  • 15×0

0111

  • 7×1

0111

  • 7×0

1011

  • 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.

slide-20
SLIDE 20

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Laufl¨ angencodierung: Anwendungen

Bitmaps speichern:

slide-21
SLIDE 21

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Laufl¨ angencodierung: Anwendungen

Bitmaps speichern:

slide-22
SLIDE 22

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Beispiele und Implementation

IPython Notebooks: Compression.ipynb

slide-23
SLIDE 23

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Huffmann coding

slide-24
SLIDE 24

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¨

  • tigt 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.

slide-25
SLIDE 25

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Huffman Komprimierung: Motivation

A B R A C A D A B R A 1 00 01 10 1 00

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?

slide-26
SLIDE 26

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Huffman Komprimierung: Motivation

A B R A C A D A B R A 1 00 01 10 1 00

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?

slide-27
SLIDE 27

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Huffman Komprimierung: Motivation

A B R A C A D A B R A 1 00 01 10 1 00

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?

slide-28
SLIDE 28

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Huffman Komprimierung: Motivation

A B R A C A D A B R A 1 00 01 10 1 00

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?

slide-29
SLIDE 29

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 B 1111 C 110 D 100 R 1110 Welcher String ist hier codiert? 011111110011001000111111100

  • A

1111

  • B

1110

  • R
  • A

110

  • C
  • A

100

  • D
  • A

1111

  • B

1110

  • R
  • A
slide-30
SLIDE 30

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 B 1111 C 110 D 100 R 1110 Welcher String ist hier codiert? 011111110011001000111111100

  • A

1111

  • B

1110

  • R
  • A

110

  • C
  • A

100

  • D
  • A

1111

  • B

1110

  • R
  • A
slide-31
SLIDE 31

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Eindeutige Decodierbarkeit

Verfahren zum Entscheiden der Decodierbarkeit (Sardinas-Patterson) Sei C die Menge aller Codew¨

  • rter und S eine initial leere

Liste. Bestimme f¨ ur alle Paare ci, cj ∈ C von Codew¨

  • rter in C, ob ci

Pr¨ afix von cj ist.

Falls ja (also cj = ciw), f¨ uge Suffix w zu S hinzu.

Iteriere folgende Schritte, bis keine weiteren Eintr¨ age mehr zu S hinzukommen:

F¨ ur alle s ∈ S und alle c ∈ C Falls c = sw (s is Pr¨ afix von c), f¨ uge Suffix w zu S hinzu. Falls s = cw (w is Pr¨ afix von s), f¨ uge Suffix w zu S hinzu.

Falls S ∩ C = ∅ ist Code eindeutig decodierbar.

slide-32
SLIDE 32

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Quiz

Welcher dieser Codes ist decodierbar? {01, 11100, 01100, 0101} {01, 1001, 11100, 1100, 101} {01, 1001, 11101, 01111, 0001} {01, 1001, 11100, 01111, 0001}

slide-33
SLIDE 33

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Pr¨ afixfreie codes - Repr¨ asentation als Trie

Quelle: Algorithmen, Sedgewick & Wayne, Abbildung 5.64

Zeichen nur in Bl¨ atter gespeichert Code ist Pfad von Wurzel zu Blatt

slide-34
SLIDE 34

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Optimalen pr¨ afixfreien Trie bauen

1 Frequenz von jedem Zeichen in String z¨

ahlen

2 Wald von B¨

aumen (ein Baum pro Zeichen) generieren

3 Solange noch nicht alle B¨

aume verbunden sind:

Verbinde B¨ aume mit kleinster Frequenz

slide-35
SLIDE 35

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Optimalen pr¨ afixfreien Trie bauen

IPython Notebooks: Tries.ipynb

slide-36
SLIDE 36

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Huffman Komprimieren / Dekomprimieren

Komprimieren Symboltabelle mit Zeichen als Schl¨ usseln und Codes als Werte aufbauen String mithilfe der Symboltabelle codieren Dekomprimierung Dem Code im Trie folgen um String zu decodieren

Quelle: Algorithmen, Sedgewick & Wayne, Abbildung 5.64

Wie weiss Empf¨ anger, welcher Code benutzt wurde?

slide-37
SLIDE 37

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Huffman Komprimieren / Dekomprimieren

Komprimieren Symboltabelle mit Zeichen als Schl¨ usseln und Codes als Werte aufbauen String mithilfe der Symboltabelle codieren Dekomprimierung Dem Code im Trie folgen um String zu decodieren

Quelle: Algorithmen, Sedgewick & Wayne, Abbildung 5.64

Wie weiss Empf¨ anger, welcher Code benutzt wurde?

slide-38
SLIDE 38

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Trie schreiben und lesen

Quelle: Algorithmen, R. Sedgewick & K. Wayne, Abbildung 5.68

Inorder Traversierung

Vor innerem Knoten: 0 Einf¨ ugen Vor Blatt: 1 Einf¨ ugen

Wert in Blatt (z.B. als 8 Bit Ascii code) speichern.

slide-39
SLIDE 39

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Beispiel und Implementation

IPython Notebooks: Compression.ipynb

slide-40
SLIDE 40

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Huffman Komprimierung: Zusammenfassung

Baut f¨ ur jede Message einen speziellen Code Kompression Nachricht lesen Code aufbauen Pr¨ afixfreien Code (Trie) in Datei/Bitstream schreiben Nachricht komprimieren Dekompression Pr¨ afixfreien Code (Trie) aus Datei/Bitstream lesen Nachricht dekomprimieren

slide-41
SLIDE 41

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Huffman Komprimierung: Anwendungen

Aber: Moderne Algorithmen nutzen eher Arithmetic Coding Witten, Ian H., Radford M. Neal, and John G. Cleary. “Arithmetic coding for data compression.“ Communications of the ACM 30.6 (1987).

slide-42
SLIDE 42

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

LZW

slide-43
SLIDE 43

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Statistische Modelle (1)

Statische Modelle Gleiches Modell f¨ ur alle Texte Schnell und einfach Nicht optimal, da verschiedene Texte unterschiedliche statistische Eigenschaften haben. Beispiele: ASCII, Morse code Dynamische Modelle Modell wird basierend auf Text erstellt Separater Schritt um Modell zu generieren Modell muss mit¨ ubertragen werden. Beispiel: Huffman code ...

slide-44
SLIDE 44

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Statistische Modelle (1)

Statische Modelle Gleiches Modell f¨ ur alle Texte Schnell und einfach Nicht optimal, da verschiedene Texte unterschiedliche statistische Eigenschaften haben. Beispiele: ASCII, Morse code Dynamische Modelle Modell wird basierend auf Text erstellt Separater Schritt um Modell zu generieren Modell muss mit¨ ubertragen werden. Beispiel: Huffman code ...

slide-45
SLIDE 45

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Statistische Modelle (2)

Adaptive Modelle Modell wird, w¨ ahrend Text gelesen wird, verbessert Je mehr gelernt wird, desto bessere Kompressionsraten werden erreicht. Decodierung muss immer am Anfang starten. Beispiel: Lempel-Ziv-Welch (LZW) Verfahren

slide-46
SLIDE 46

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

LZW-Verfahren: Komprimierung

Input A B R A C A D A B R A B R A match A B R A C A D AB RA BR ABR A Wert 41 42 52 41 43 41 44 81 83 82 88 41

Codewort Tabelle

Schl¨ ussel Wert ... ... A 41 B 42 C 43 D 44 ... ... Schl¨ ussel Wert AB 81 BR 82 RA 83 AC 84 CA 85 AD 86 Schl¨ ussel Wert DA 87 ABR 88 RAB 89 BRA 8A ABRA 8B

slide-47
SLIDE 47

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Lempel-Ziv-Welch Komprimierung

Initialisierung: Symboltabelle aufbauen

Schl¨ ussel: Substrings Werte: W -bit Codew¨

  • rter

Initialisierung der Symboltabelle mit Zeichen des Alphabets Codierung: Wiederhole bis alle Zeichen verarbeitet:

L¨ angstes Pr¨ afix s von (unverarbeitetem) String in Symboltabelle suchen Codewort schreiben s + c in Symboltabelle schreiben (c ist n¨ achstes Zeichen)

Siehe Notebook Compression.ipynb f¨ ur exakten Algorithmus

slide-48
SLIDE 48

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

LZW-Verfahren: Dekomprimierung

Wert 41 42 52 41 43 41 44 81 83 82 88 41 80 Output A B R A C A D AB RA BR ABR A

Codewort Tabelle

Schl¨ ussel Wert ... ... 41 A 42 B 43 C 44 D ... ... Schl¨ ussel Wert 81 AB 82 BR 83 RA 84 AC 85 CA 86 AD Schl¨ ussel Wert 87 DA 88 ABR 89 RAB 8A BRA 88 ABRA

slide-49
SLIDE 49

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

LZW-Dekomprimierung

Initialisierung: Symboltabelle aufbauen

Schl¨ ussel: Substrings Werte: W -bit Codew¨

  • rter

Initialisierung der Symboltabelle mit Zeichen des Alphabets Dekompression: Wiederhole bis alle Codew¨

  • rter verarbeitet:

Codewort lesen String in Symboltabelle suchen. String schreiben Symboltabelle aktualisieren

Siehe Notebook Compression.ipynb f¨ ur Algorithmus

slide-50
SLIDE 50

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Beispiel und Implementation

IPython Notebooks: Compression.ipynb

slide-51
SLIDE 51

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Schwieriger Spezialfall: Kompression

Input A B A B A B A match A B AB ABA Wert 41 42 81 83 80

Codewort Tabelle

Schl¨ ussel Wert ... ... A 41 B 42 C 43 ... ... Schl¨ ussel Wert AB 81 BA 82 ABA 83

slide-52
SLIDE 52

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Schwieriger Spezialfall: Dekomprimierung

Wert 41 42 81 83 80 Output A B AB ???

Codewort Tabelle

Schl¨ ussel Wert ... ... 41 A 42 B 43 C ... ... Schl¨ ussel Wert 81 AB 82 BA ??? ??? Problem Code 83 wird ben¨

  • tigt bevor dieser in Symboltabelle ist.
slide-53
SLIDE 53

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Implementationsdetails

Wie gross soll die Symboltabelle sein? Abh¨ angig von der Nachricht? Selbes Modell f¨ ur ganze Nachricht? ... Was macht man wenn die Symboltabelle voll ist? Wegwerfen und Neustart? Selektives Wegwerfen von schlechten Codes? ... Grundlegender Algorithmus l¨ asst viele Varianten zu.

slide-54
SLIDE 54

Einf¨ uhrung Laufl¨ angencodierung Huffmann coding LZW

Lempel-Zip Familie

Lempel-Zip Familie LZ77 LZ78 LZW Deflate (LZ77 + Huffman) Praktischer Einsatz: LZW: Unix compress, GIF, TIFF deflate / zlib: zip, 7zip, gzip, jar, png, pdf: