Effiziente Algorithmen und Komplexitätstheorie

Ähnliche Dokumente
Kodierungsalgorithmen

Der LZ77 Algorithmus. von. Stefan Mühlinghaus Matrikelnummer: Benutzerkennung: ai495

Datenkompression: Lempel-Ziv-Codierung

Problem: Finde für Alphabet mit n Zeichen einen Binärcode, der die Gesamtlänge eines Textes (über diesem Alphabet) minimiert.

Einführung in Kompressionstechniken

Algorithmen und Datenstrukturen 2

10%, 7,57 kb 20%, 5,3 kb 30%, 4,33 kb 40%, 3,71 kb 50%, 3,34 kb. 60%, 2,97 kb 70%, 2,59 kb 80%, 2,15 kb 90%, 1,62 kb 99%, 1,09 kb

Datenstrukturen und Algorithmen SS07

A2.3: Zur LZ78 Komprimierung

Bilddatenformate BMP GIF JPG. Digitale Bildverarbeitung Liedtke 7.1. Bezeichnung: Microsoft Windows Bitmap, BMP, DIB

1. Woche Einführung in die Codierungstheorie, Definition Codes, Präfixcode, kompakte Codes

Digitale Bildverarbeitung (DBV)

Eine Variante der Burrows-Wheeler Transformation mit Permutationen

k-server-algorithmen Alexander Leider 4. Februar 2007

Methoden des Algorithmenentwurfs Kapitel 2.2: Randomisierte Online Algorithmen

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

Einführung in die Kodierungstheorie

Proseminar Datenkomprimierung Dr. U. Tamm. Bildkompression WS 2002/03. Florian Strunk

Kryptologie und Kodierungstheorie

Übung 1: Quellencodierung

Codierung, Codes (variabler Länge)

Übung 13: Quellencodierung

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

3 Quellencodierung. 3.1 Einleitung

Kompetitive Analysen von Online-Algorithmen

2. Digitale Codierung und Übertragung

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

CODIERUNGSTHEORIE KURS ZELL AN DER PRAM, FEBRUAR 2005

Ideen der Informatik Suchen und Sortieren [Ordnung muss sein ] Kurt Mehlhorn Adrian Neumann viele Folien von Kostas Panagiotou

Codierung. Auszug aus dem Skript von Maciej Liśkiewicz und Henning Fernau

15 Optimales Kodieren

Mathematik für Information und Kommunikation

Algorithmen II Vorlesung am

Referat für Algorithmische Anwendungen WS 2006/ 07: Verlustfreie Datenkompression mit dem Deflate-Algorithmus (LZ77- und Huffman-Codierung)

! DBMS organisiert die Daten so, dass minimal viele Plattenzugriffe nötig sind.

Algorithmen und Datenstrukturen. Große Übung vom Nils Schweer

Mächtigkeit von WHILE-Programmen

Entwurf von Algorithmen - Kontrollstrukturen

Spezialvorlesung Online-Algorithmen. Matthias Westermann Berthold Vöcking Christian Sohler

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

B-Bäume I. Algorithmen und Datenstrukturen 220 DATABASE SYSTEMS GROUP

6.2 Perfekte Sicherheit

Kap. 2: Fail-Stop Unterschriften

Abschnitt: Algorithmendesign und Laufzeitanalyse

Rechnerstrukturen WS 2012/13

Proseminar : Grundlagen Bildverarbeitung/Bildverstehen. Bildkompression. Betreuer : Ernst Bartels. Bearbeiter : Chukwumezie Millverton Francis

3. Übung Algorithmen I

Codierungstheorie Rudolf Scharlau, SoSe

Paper Computer Science Experiment

Sortierverfahren für Felder (Listen)

2. Digitale Codierung und Übertragung

Kapitel 5: Dynamisches Programmieren Gliederung

Einführung in Hauptspeicherdatenbanken

Lehreinheit E V2 Verschlüsselung mit symmetrischen Schlüsseln

Programmieren I. Kapitel 7. Sortieren und Suchen

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Komprimieren von Bildern

HINWEISE ZUR ADS-KLAUSUR SS06 für BACHELOR (für beide Termine)

Kompakte Graphmodelle handgezeichneter Bilder. Einbeziehung in Autentizierung und Bilderkennung

Alignment-Verfahren zum Vergleich biologischer Sequenzen

Grundlagen der Technischen Informatik. 2. Übung

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Ein Scan basierter Seitenangriff auf DES

Kapitel 6. Komplexität von Algorithmen. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Grundlagen der Informatik II. Teil I: Formale Modelle der Informatik

Leseprobe. Wolfgang Ertel. Angewandte Kryptographie. ISBN (Buch): ISBN (E-Book):

Einführung in NetLogo Andreas Braun

Institut fu r Informatik

Bogobit Digimux mit Viessmann Multiplex-Signalen und Märklin Central Station 2

Betriebsarten von Blockchiffren. ECB Electronic Code Book Mode. Padding. ECB Electronic Code Book Mode

ABITURPRÜFUNG 2009 LEISTUNGSFACH INFORMATIK

Noch für heute: primitive Datentypen in JAVA. Primitive Datentypen. Pseudocode. Dezimal-, Binär- und Hexadezimalsystem. der logische Typ boolean

Leitfaden Lineare Algebra: Determinanten

Listener: Bei Oracle erfolgt die Steuerung (konventionell) via listener.ora (Listener Konfiguration), tnsnames.ora (Client Konfiguration)

8: Zufallsorakel. Wir suchen: Einfache mathematische Abstraktion für Hashfunktionen

Die Komplexitätsklassen P und NP

2 Informationstheorie

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Einführung in die Informatik 1

Kapitel 2: Formale Sprachen Kontextfreie Sprachen. reguläre Grammatiken/Sprachen. kontextfreie Grammatiken/Sprachen

MiGo-Portal V2.21. Produkt-Sheet. Aktueller Stand: Verfasst von: Mike Goldhausen. MiGo-WebDesign Wiesenstraße Kölbingen

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

AKTUEL ZU JAVA 8 PROGRAMMIEREN IN JAVA. 7. Auflage. Im Internet: Alle Beispielprogramme und Lösungen

Kryptographie und Codierung für den Mathematikunterricht

DATENFORMATE IM INTERNET

Sicherheit von PDF-Dateien

Systeme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss

JPEG-Format GIF-Format PNG-Format

Kompakte Graphmodelle handgezeichneter Bilder

A) Durchsuchen von Datenbanken im Internet durch Endnote

Präfx Trie zur Stringverarbeitung. Cheng Ying Sabine Laubichler Vasker Pokhrel

Dateiorganisation und Zugriffsstrukturen

Inhalt Software-Metriken Software-Metriken mit Together FindBugs. Software-Metriken. Raimar Lill Matthias Meitner David Föhrweiser Marc Spisländer

Algorithmen und Datenstrukturen

4 Codierung nach Viginere (Lösung)

Textdokument-Suche auf dem Rechner Implementierungsprojekt

Abschluss Version 1.0

Informatik-Sommercamp Mastermind mit dem Android SDK

Transkript:

1 Effiziente Algorithmen und Komplexitätstheorie Vorlesung Thomas Jansen 22.06.2006

2 Ein anderer Ansatz Beobachtung in Dokumenten eines Typs wiederkehrende Muster Idee Muster in Wörterbuch speichern, codieren durch Index Beispiel Σ = 2 l Wörterbuch D für 2 w häufigste Wörter aus Σ k codiere x D mit w + 1 Bits codiere x / D mit l + k + 1 Bits Hilft das? krude Abschätzung W keit p für x D ohne Wörterbuch für n Wörter n (l + k) Bits mit Wörterbuch für n Wörter erwartet n p (w + 1) + n (1 p) (l + k + 1) Bits klar Wörterbuch besser, wenn p > 1 (l+k) w (viel größer als bei Gleichverteilung)

3 Statische Wörterbücher Wann kann man sinnvolle statische Wörterbücher finden? nur hochspezialisierte Anwendungen etwas weniger spezialisiert Buchstabenpaar-Codierung Wörterbuch der Größe 2 w mit 2 w > Σ mit Σ Einträgen s 1,..., s n Σ und mit 2 w Σ Einträgen für die häufigsten Buchstabenpaare Anmerkung für homogene Daten (z. B. Java-Sourcecode) sinnvoll Anmerkung man muss nicht Codierung fester Länge verwenden...

4 Adaptive Wörterbücher zwei zentrale Paper Ziv, Lempel (1977): A universal algorithm for sequential data compression. LZ77 Ziv, Lempel (1978): Compression of individual sequences via variable-rate coding. LZ78 LZ77 Lasse Fenster der Größe w über Text laufen. Wörterbuch (search buffer) der Größe s ist linker Teil im Rest (look-ahead buffer) der Größe w s zu codierender Text übermittle Tripel o, l, c aus Offset o, Länge der Übereinstimmung l und nächstes Zeichen c

5 Beispiele LZ77 E M U H E N E M E N E T U search buffer look-ahead buffer 0,0,c(M) 4,3,c(T) S C H A L A L A L A!!! search bufferlook-ahead buffer 2,4,c(!) S O R G E N S O R G E N S O R G search buffer look-ahead buffer 0,0,c(S) 0,0,c(O) klar Decodierung immer einfach Größe eines Tripels log S + log W + log Σ

Über LZ77 Vorteile einfach, leicht zu implementieren effizient keine Kenntnis über Quelle erforderlich Nachteile Annahme der Lokalität von Musterwiederholungen im Worst Case extrem aufblähend Codierung einzelner Zeichen mit Tripeln unbefriedigend Modifikationen Codierung der Tripel mit variabler Länge Größe des Fensters Flag-Bit für Paar/Einzelzeichen (Paare statt Tripel, effiziente Einzelzeichencodierung) LZSS (Lempel, Ziv, Storer, Syzmanski) Anmerkung Varianten verwendet in zip, pkzip, lharc, arj 6

7 LZ78 Verwende ein externes Wörterbuch. Codiere durch Paare i, c(s) (i N 0 Index im Wörterbuch, s Σ erster nicht passender Buchstabe) i, c(s) wird neuer Eintrag wichtig Wörterbuchkonstruktion für Codierung und Decodierung identisch machen! Beispiel S C H A L A L A L A L A! Wörterbuch 1: S 2: C 0,c(S) 0,c(C) 0,c(H) 0,c(A) 0,c(L) 3: H 4,c(L) 6,c(A) 5,c(A) 0,c(!) 4: A 5: L Problem Wörterbuch wächst unbeschränkt 6: AL 7: ALA 8: LA 9:!

8 LZW Welch (1984): A technique for high-performance data compression. Ziel modifiziere LZ78 so, dass Übertragung des Index im Wörterbuch ausreicht Algorithmus LZW Starte mit Wörterbuch mit Einträgen für alle s Σ. Übertrage Index des Eintrags mit maximaler Länge. Verlängere dieses Muster um nächsten Buchstaben und füge ein. Übertrage nächstes Muster mit diesem Anfangsbuchstaben.

9 Beispiel LZW-Codierung 7 S C H A L A L A L A L A! 4 5 2 6 11 13 12 1 Wörterbuch 1:! 2: A 3: B 4: C 5: H 6: L 7: S 8: SC 9: CH 10: HA 11: AL 12: LA 13: ALA 14: ALAL 15: LA!

10 Beispiel LZW-Decodierung 7 4 5 2 6 11 13 12 1 Wörterbuch 1:! 2: A S C H A L A L A L A L A! 3: B 4: C 5: H 6: L Beobachtung korrekt mit Sonderfall 7: S 8: SC 9: CH 10: HA 11: AL 12: LA 13: ALA 14: ALAL 15: LA!

11 Beispiel für LZW: compress compress anfangs Wörterbuchgröße 512 Index = 9 wenn Wörterbuch voll Wörterbuchgröße verdoppeln also Wörterbuchgröße 1024 Index = 10 bei vollem Wörterbuch so fortsetzen, bis Index = 16 (Wörterbuchgröße 2 16 = 65 536) ab Wörterbuchgröße 65 536 statisches Wörterbuch dabei Kompressionsfaktor beobachten, wenn zu schlecht, mit leerem Wörterbuch Wörterbuchaufbau neu starten Beobachtung Kompromiss zwischen Wörterbuchflexibilität und -größe bei Erhaltung der Lokalität des Wörterbuchs

12 Weitere Beispiele für LZW Graphics Interchange Format (GIF) sehr ähnlich wie compress Wörterbuchgröße von Farbtiefe abhängig Anmerkung gut geeignet für regelmäßige Bilder weniger gut für Fotos V.42 bis (Datenkompression bei Übertragung über Modems) zwei Modi transparent und compressed minimale Wörterbuchgröße 512 Verhandlung der Wörterbuchgröße Teil des Protokolls reservierte Codewörter für Moduswechsel und Wörterbuchvergrößerung Verwendung des letzten Wörterbucheintrags verboten ( keine Sonderfälle)

Noch ein anderer Ansatz ein kleiner Umweg... List Update Liste mit n festen Elementen, ungeordnet Zugriff durch lineares Durchsuchen von vorne nach hinten Problem organisiere die Liste dabei so um, dass Zugriffszeiten klein werden selbstorganisierende Datenstruktur lange bekannter Algorithmus Move-To-Front Move-To-Front Verschiebe zugegriffenes Element an Listenanfang Ist das ein guter Algorithmus? im Worst Case sicher nicht: immer hinterstes Element anfragen Beobachtung Gilt für jeden Algorithmus Wie kann man Performanz vernünftig messen? 13

14 Das List-Update-Problem Spielregeln Zugriff auf Element auf Position i verursacht Kosten i nach Zugriff darf Element beliebig nach vorne bewegt werden, dafür keine Kosten bei Problemen üblich Eingabe zu Beginn vollständig bekannt hier Anfragesequenz wird erst nach und nach bekannt Online-Problem Eingabe wird stückweise bekannt Offline-Problem Eingabe sofort ganz bekannt dazu korrespondierend Online-Algorithmus und Offline-Algorithmus Definition 210 A Online-Algorithmus, Kosten A(σ) auf Eingabefolge σ, OPT(σ) Kosten eines optimalen Offline-Algorithmus auf σ. A heißt c-kompetitiv, wenn b : σ : A(σ) c OPT(σ) + b.

Kompetitivität von Move-To-Front Theorem 211 Move-To-Front ist ( 2 n) 1 -kompetitiv auf Listen mit n Elementen. Beweis. Sei A optimaler Offline-Algorithmus. Sei L A i Sei L MTF i Liste von A nach i-ten Zugriff. Liste von Move-To-Front nach i-tem Zugriff. initial L A 0 = LMTF 0 amortisierte Analyse mit Potenzialfunktion Φ definiere Φ i := #Inversionen zwischen L A i und L MTF i Betrachte i-ten Zugriff: LookUp(x) Situation vorher L MTF i 1 S U x T L A i 1 T S x U S vor x in beiden Listen T vor x in L A i, hinter x in L MTF i U vor x in L MTF i, hinter x in L A i 15

16 Beweis von Theorem 211 L Situation vorher MTF i S U x T L A i T S x U S vor x in beiden Listen T vor x in L A i, hinter x in L MTF i U vor x in L MTF i, hinter x in L A i also darum ti MTF = S + U + 1 ti A = S + T + 1 Φ i Φ i 1 S U amortisierte Rechenzeit a i = t i +Φ i Φ i 1 S + U +1+ S U ( = 2 S + 1 2ti A 1 2 1 ) ti A n

Move-To-Front-Codierung Was hat das mit Kompression zu tun? Move-To-Front als Vorbereitung zur Kompression 1. für Σ = {s 1, s 2,..., s n } erzeuge Liste s 1, s 2,..., s n 2. für jeden zu codierenden Buchstaben wähle Position 1 als Codierung und benutze Move-To-Front 3. Codiere Zahlenfolge mit Kompressionsverfahren (z. B. Huffman-Codierung) Funktioniert das? Eindeutig decodierbar? anfangs Liste bekannt darum aus erster Zahl und Liste codierter Buchstabe ablesbar außerdem neue Liste durch Move-To-Front herstellbar also nachher Liste bekannt wie vorher Was nützt das? klar Buchstabenfolge a i j0 i 1 Hoffnung 0 noch viel häufiger als häufigster Buchstabe Wunsch lange Buchstabenfolgen a i 17

18 Beispiel Move-To-Front S C H A L A L A L A L A! Liste 0 1 2 3 4 5 6! A L H C S B 6 4 5 4 6 1 1 1 1 1 1 1 5 relative Häufigkeiten 5 4 1 1 1 1 Original A: 13 L: 13 C: 13 H: 13 S: 13!: 13 B: 0 7 2 2 2 Move-To-Front 1: 13 4: 13 5: 13 6: 13 0: 0 2: 0 3: 0 klar günstig für anschließende Huffman-Codierung

19 Noch eine Transformation Burrows, Wheeler (1995): A block-sorting losless data compression algorithm. Idee Ordne Eingabe so um, dass sie Move-To-Front-freundlicher wird. Beobachtung umordnen Permuation (also bijektiv ) ideal wäre sortiere buchstabenweise SCHALALALALA!!AAAAACHLLLLS Invertierbar? grundsätzlich jede Permutation invertierbar Problem benötigte Zusatzinformationen

20 Die Burrows-Wheeler-Transformation Eingabe Text X = x 1 x 2 x l 1 x l 1. Betrachte X 1 := x 1 x 2 x l 1 x l X 2 := x l x 1 x l 2 x l 1 X 3 := x l 1 x l x l 3 x l 2. X l := x 2 x 3 x l x 1 2. Sortiere X 1, X 2,..., X l lexikographisch aufsteigend. 3. Gib Folge der letzten Zeichen und Index der Originalzeile als Ausgabe aus. Beispiel SCHALALALALA! Ausgabe ALLLLHSCAAAA!, 12

21 Beispiel Burrows-Wheeler-Transformation Beispiel SCHALALALALA! 0 S C H A L A L A L A L A! 1! S C H A L A L A L A L A 2 A! S C H A L A L A L A L 3 L A! S C H A L A L A L A 4 A L A! S C H A L A L A L 5 L A L A! S C H A L A L A 6 A L A L A! S C H A L A L 7 L A L A L A! S C H A L A 8 A L A L A L A! S C H A L 9 L A L A L A L A! S C H A 10 A L A L A L A L A! S C H 11 H A L A L A L A L A! S C 12 C H A L A L A L A L A! S

22 Beispiel Burrows-Wheeler-Transformation (Fortsetzung) Beispiel SCHALALALALA! Sortiert 0! S C H A L A L A L A L A 1 A! S C H A L A L A L A L 2 A L A! S C H A L A L A L 3 A L A L A! S C H A L A L 4 A L A L A L A! S C H A L 5 A L A L A L A L A! S C H 6 C H A L A L A L A L A! S 7 H A L A L A L A L A! S C 8 L A! S C H A L A L A L A 9 L A L A! S C H A L A L A 10 L A L A L A! S C H A L A 11 L A L A L A L A! S C H A 12 S C H A L A L A L A L A! Ausgabe ALLLLHSCAAAA!, 12

23 Rücktransformation Und das ist invertierbar? Wie ALLLLHSCAAAA!, 12 SCHALALALALA!? Beobachtung jede Zeile und jede Spalte ist Permutation des Originals Beobachtung letzte Spalte sortieren erste Spalte Beobachtung Index identifiziert Anfangsbuchstaben Beobachtung Zeile, die mit diesem Buchstaben endet, beginnt mit zweitem Buchstaben also Original wieder rekonstruierbar

Beispiel Rücktransformation ALLLLHSCAAAA!, 12 SCHALALALALA! Index erste Spalte letzte Spalte 0! A 1 A L 2 A L 3 A L 4 A L 5 A H 6 C S 7 H C 8 L A 9 L A 10 L A 11 L A 12 S! 24

25 Zur Burrows-Wheeler-Transformation gesehen effizient berechenbar reversibel Warum ist das sinnvoll? klar erste Spalte komplett sortiert ( ideal ) Beobachtung letzte Spalte direkter Nachbar der ersten Spalte Hoffnung benachbarte Spalte mit starken Korrelationen dann letzte Spalte auch ziemlich sortiert Anwendung zur Kompression Burrows-Wheeler-Transformation Move-To-Front-Codierung klassische Kompression (arithmetische Codes oder Huffman)

26 Burrows-Wheeler-Transformation und Move-To-Front am Beispiel SCHALALALALA! SCHALALALALA! BWT ALLLLHSCAAAA!, 12 MTF 1, 5, 0, 0, 0, 5, 6, 6, 4, 0, 0, 0, 5, 7, 8, 9 Anmerkungen nach MTF noch besser als nach BWT hier wegen neuer Buchstaben (,, 1, 2 ) nicht so gut in der Praxis mit sehr langen Blocklängen benutzt implementiert z. B. in bzip2 problematisch Speicherplatz

27 Burrows-Wheeler-Kompression: Verbesserungen dreischrittiges Kompressionsverfahren Burrows- Wheeler- Transformation Globale Struktur- Transformation Entropie- Kodierung Burrows-Wheeler-Transformation Globale Strukturtransformation Move-To-Front Entropie-Kodierung Huffmann oder arithmetische Codes zur Entropie-Kodierung Huffman-Codierung deutlich schneller arithmetische Codes deutlich bessere Kompression