Informatik

Datenkompression: RLE, Huffman und LZW erklärt

Datenkompression: RLE, Huffman und LZW erklärt
Datenkompression: RLE, Huffman und LZW erklärt
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

Datenkompression stellt digitale Daten mit weniger Bits dar. Verlustfreie Verfahren stellen das Original exakt wieder her; verlustbehaftete Verfahren entfernen dauerhaft Informationen und tauschen dadurch Qualität gegen eine kleinere Datenmenge.

Auf dieser Seite untersuchst du Datenmuster und entscheidest, wann Lauflängencodierung, Huffman-Codierung oder LZW sinnvoll ist.

Deine Lernziele

Hake ab, was du schon kannst — und komm am Ende hierher zurück!

Warum lassen sich Daten verkleinern?

Viele Dateien enthalten Redundanz: Zeichen, Pixel oder längere Folgen wiederholen sich oder treten mit sehr unterschiedlichen Häufigkeiten auf. Ein Kompressionsverfahren beschreibt solche Regelmäßigkeiten kürzer.

Bei AAAAAABBBCCCCDDDD kann beispielsweise eine Anzahl zusammen mit dem zugehörigen Zeichen gespeichert werden:

6A3B4C4D

Der Decoder liest 6A als sechs aufeinanderfolgende A. Die Bedeutung der Daten bleibt erhalten, obwohl die Darstellung kürzer ist.

Definition

Codec

Ein Codec besteht aus einem Kompressor und einem Dekompressor. Der Kompressor erzeugt aus den Ausgangsdaten eine codierte Darstellung. Der Dekompressor rekonstruiert daraus die Daten.

Nicht jede Eingabe besitzt nutzbare Regelmäßigkeiten. Außerdem benötigen Dateiformate oft Zusatzinformationen, etwa Zähler, Wörterbücher oder Codebäume.

Teste dich
Frage 1 von 1LeichtWelche Eigenschaft macht AAAAAAAAAA für eine Lauflängencodierung besonders geeignet?
Lösung: Es enthält einen langen Lauf desselben Zeichens. — Die zehn gleichen Zeichen lassen sich gemeinsam als Anzahl und Zeichen beschreiben.
Verlustfrei oder verlustbehaftet?
Definition

Verlustfreie Kompression

Nach dem Dekomprimieren stimmen alle Daten exakt mit dem Original überein. Das ist für Texte, Programme und andere Daten nötig, bei denen bereits ein verändertes Bit wichtig sein kann.

RLE, Huffman und LZW arbeiten verlustfrei. Auch ZIP und PNG verwenden verlustfreie Verfahren.

Definition

Verlustbehaftete Kompression

Bei der Kompression werden Informationen dauerhaft entfernt. Die rekonstruierte Datei ähnelt dem Original, ist aber nicht damit identisch.

JPEG für Fotos sowie viele Audio- und Videoformate nutzen verlustbehaftete Verfahren. Sie können weniger auffällige Bild- oder Toninformationen schwächer darstellen oder entfernen. Eine stärkere Reduktion kann jedoch sichtbare oder hörbare Qualitätsverluste verursachen.

Die passende Art hängt vom Zweck ab:

SituationSinnvolle ArtBegründung
ProgrammdateiverlustfreiJeder Bestandteil muss exakt erhalten bleiben.
TextdokumentverlustfreiVeränderte Zeichen verändern den Inhalt.
Foto für eine Webseiteoft verlustbehaftetEine geringe Abweichung kann zugunsten einer kleineren Datei akzeptabel sein.
medizinisches oder dauerhaft zu bewahrendes OriginalverlustfreiEin Informationsverlust kann problematisch sein.
Merke

Verlustfrei beschreibt die exakte Rekonstruktion, nicht eine besonders starke Verkleinerung. Verlustbehaftet bedeutet, dass entfernte Informationen nicht zurückgewonnen werden können.

Teste dich
Frage 1 von 1LeichtWas muss bei einer verlustfreien Kompression gelten?
Lösung: Die dekomprimierten Daten stimmen exakt mit dem Original überein. — Entscheidend ist das Ergebnis der Dekompression: Es muss Bit für Bit dem Original entsprechen.
RLE fasst gleiche Zeichen zusammen

Die Lauflängencodierung, kurz RLE, ersetzt einen Lauf gleicher Elemente durch seine Länge und das Element.

Ein einfacher Ablauf lautet:

  1. Beginne beim ersten Element.
  2. Zähle, wie oft es ohne Unterbrechung vorkommt.
  3. Gib Anzahl und Element aus.
  4. Fahre beim nächsten anderen Element fort.
Beispiel

Für HAAAALLOOO!!!! entstehen die Läufe H, AAAA, LL, OOO und !!!!.

Mit der vereinbarten Schreibweise „Anzahl vor Zeichen“ lautet das Ergebnis:

1H4A2L3O4!

Zum Decodieren wird jedes Zeichen so oft wiederholt, wie die vorangestellte Zahl angibt. Dadurch entsteht wieder exakt HAAAALLOOO!!!!.

RLE eignet sich für lange, zusammenhängende Wiederholungen, beispielsweise in einfachen Bildern mit großen gleichfarbigen Flächen. Bei häufig wechselnden Daten kann die Darstellung länger werden:

ABCD wird mit derselben Schreibweise zu 1A1B1C1D.

Das Beispiel verwendet einstellige Lauflängen. Ein echtes Dateiformat muss zusätzlich eindeutig festlegen, wie Zahlen und Zeichen gespeichert und voneinander getrennt werden. Erst mit einer solchen Festlegung lässt sich die Bitersparnis exakt bestimmen.

Teste dich
Frage 1 von 2MittelWelche RLE-Ausgabe entsteht für BBBCCAAAA, wenn immer Anzahl und Zeichen notiert werden?
Lösung: 3B2C4A — Zähle jeden zusammenhängenden Lauf getrennt: drei B, zwei C und vier A.
Frage 2 von 2MittelWelche Eingabe wird mit dieser einfachen RLE wahrscheinlich länger?
Lösung: ABCDEFGH — Bei ABCDEFGH benötigt jedes einzelne Zeichen zusätzlich einen Zähler.
Huffman gibt häufigen Symbolen kurze Codes

Die Huffman-Codierung nutzt unterschiedliche Symbolhäufigkeiten. Häufige Symbole erhalten meist kurze, seltene Symbole längere Bitfolgen.

Damit aneinandergereihte Codewörter eindeutig decodierbar sind, verwendet Huffman einen Präfixcode.

Definition

Präfixcode

Bei einem Präfixcode ist kein vollständiges Codewort der Anfang eines anderen Codeworts. Deshalb erkennt der Decoder das Ende jedes Codeworts ohne zusätzliches Trennzeichen.

Ein Huffman-Baum entsteht schrittweise:

  1. Notiere jedes Symbol mit seiner Häufigkeit.
  2. Verbinde die beiden leichtesten Knoten.
  3. Wiederhole das Verbinden, bis nur noch ein Baum übrig ist.
  4. Beschrifte die beiden Äste jeder Verzweigung mit 0 und 1.
  5. Lies für jedes Symbol den Weg von der Wurzel bis zum Blatt ab.
Beispiel

Die zehn Zeichen AAAAAABBBC enthalten sechs A, drei B und ein C.

Zuerst werden die beiden seltensten Symbole C und B verbunden. Ihr gemeinsames Gewicht ist vier. Danach wird dieser Knoten mit A verbunden. Eine mögliche Beschriftung ergibt:

SymbolHäufigkeitCodeBenötigte Bits
A616 × 1 = 6
B3013 × 2 = 6
C1001 × 2 = 2

Insgesamt werden für die codierten Zeichen 14 Bits benötigt. Ein gleich langer Code für drei Symbole müsste zwei Bits pro Zeichen verwenden und benötigte für zehn Zeichen 20 Bits.

Der Code ist präfixfrei: 1, 01 und 00 sind jeweils vollständige Codewörter, aber keines beginnt mit einem anderen vollständigen Codewort.

In einer vollständigen Datei muss der Decoder außerdem den Codebaum oder eine gleichwertige Beschreibung kennen. Dieser Zusatzaufwand kann den Vorteil bei kurzen Eingaben aufheben.

Teste dich
Frage 1 von 2LeichtWelcher Code ist nicht präfixfrei?
Lösung: A: 0, B: 01, C: 11 — Im ersten Code ist 0 bereits ein vollständiges Codewort und zugleich der Anfang von 01. Eine Bitfolge könnte deshalb mehrdeutig zerlegt werden.
Frage 2 von 2MittelWarum bekommt A im Beispiel den kürzesten Code?
Lösung: Weil A am häufigsten vorkommt und so die mittlere Bitzahl sinkt. — Die Gesamtlänge ergibt sich aus Häufigkeit mal Codelänge. Eine kurze Darstellung wirkt deshalb bei häufigen Symbolen besonders stark.
LZW baut während des Codierens ein Wörterbuch auf

LZW ersetzt wiederkehrende Zeichenfolgen durch Wörterbuchnummern. Encoder und Decoder starten mit demselben Grundwörterbuch und ergänzen es nach festen Regeln. Das Wörterbuch muss deshalb nicht als vollständige Liste übertragen werden.

Für das Beispiel enthält das Grundwörterbuch:

IndexEintrag
1A
2B

Der Encoder hält das längste bereits bekannte Wort w fest und betrachtet das nächste Zeichen Z:

  • Ist wZ schon im Wörterbuch, wird wZ zum neuen Suchwort.
  • Ist wZ unbekannt, gibt der Encoder den Index von w aus, trägt wZ neu ein und setzt w auf Z.
  • Am Ende gibt er den Index des verbleibenden Wortes aus.
Beispiel

Für ABABABA läuft die Codierung so ab:

SchrittBekanntes Wort wNächstes ZeichenAktion
1ABAusgabe 1, ergänze AB als Index 3
2BAAusgabe 2, ergänze BA als Index 4
3ABAB ist bekannt; lies weiter
4ABAAusgabe 3, ergänze ABA als Index 5
5ABAB ist bekannt; lies weiter
6ABAABA ist bekannt; Eingabe endet
EndeABAAusgabe 5

Die Ausgabe ist somit 1, 2, 3, 5.

Der Decoder rekonstruiert die Folge schrittweise:

  1. Index 1 ergibt A.
  2. Index 2 ergibt B; aus dem vorherigen Wort A und dem ersten Zeichen von B entsteht der neue Eintrag AB mit Index 3.
  3. Index 3 ergibt AB; aus dem vorherigen Wort B und dem ersten Zeichen von AB entsteht BA mit Index 4.
  4. Index 5 ist zu diesem Zeitpunkt noch nicht eingetragen. In diesem besonderen LZW-Fall ergänzt der Decoder das vorherige Wort AB um dessen erstes Zeichen A. So erhält er ABA und trägt es als Index 5 ein.

Die zusammengesetzten Ausgaben A, B, AB und ABA ergeben wieder exakt ABABABA.

Ob die Ausgabe tatsächlich weniger Bits benötigt, hängt unter anderem von der Eingabelänge, den Wiederholungen und der Bitbreite der Indizes ab. Das Zahlenbeispiel zeigt daher vor allem die Wörterbuchbildung.

Teste dich
Frage 1 von 2MittelWas geschieht bei LZW, wenn wZ noch nicht im Wörterbuch steht?
Lösung: Der Index von w wird ausgegeben und wZ wird ergänzt. — Der neue Eintrag speichert ein längeres Muster. Danach kann dieses Muster durch seinen Index dargestellt werden.
Frage 2 von 2SchwerWarum können Encoder und Decoder dasselbe Wörterbuch aufbauen?
Lösung: Beide starten gleich und ergänzen Einträge nach derselben festen Regel. — Entscheidend sind ein gemeinsames Grundwörterbuch und eine eindeutig festgelegte Aktualisierungsregel.
So wählst du ein Verfahren aus

Untersuche vor der Auswahl, welche Regelmäßigkeit die Daten besitzen:

BeobachtungPassendes GrundverfahrenGenutzte Struktur
Lange Folgen gleicher ElementeRLELauflängen
Stark unterschiedliche SymbolhäufigkeitenHuffmankurze Codes für häufige Symbole
Wiederkehrende längere ZeichenfolgenLZWdynamisches Wörterbuch
Kleine Qualitätsabweichungen sind erlaubtverlustbehaftetes Verfahrenweniger wichtige Informationen können entfallen

Kompression garantiert keine Verkürzung. Dafür gibt es zwei wichtige Gründe:

  • Manche Daten enthalten kaum nutzbare Muster.
  • Zähler, Wörterbuchindizes, Codebäume und weitere Zusatzdaten benötigen selbst Platz.

Auch ein grundsätzlich geeignetes Verfahren kann bei einer zu kurzen Eingabe ungünstig sein. Vergleiche deshalb nicht nur die sichtbaren Symbole, sondern die gesamte codierte Darstellung einschließlich nötiger Zusatzinformationen.

Gut zu wissen

Kompression und Verschlüsselung lösen verschiedene Aufgaben. Kompression verkleinert eine Darstellung; Verschlüsselung schützt deren Inhalt vor unbefugtem Lesen. Komprimierte Daten sind nicht allein deshalb sicher.

Teste dich
Frage 1 von 1SchwerEine Datei enthält viele Wiederholungen, ist aber nach der Kompression etwas größer. Welche Erklärung ist schlüssig?
Lösung: Die Zusatzinformationen waren größer als die eingesparte Datenmenge. — Bei kurzen Dateien können Header, Zähler, Wörterbücher oder Codebäume den erzielten Gewinn übersteigen.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • Datenkompression
    • exakte Rekonstruktion: verlustfreie Verfahren
    • Qualitätsverlust möglich: verlustbehaftete Verfahren
    • gleiche Läufe: RLE
    • ungleiche Häufigkeiten: Huffman
    • wiederkehrende Folgen: LZW
    • Grenze: Muster und Zusatzaufwand entscheiden über die Wirkung
Abschluss-Check
Teste dich
Frage 1 von 4LeichtWelches Verfahren ersetzt einen Lauf wie QQQQQQ direkt durch Anzahl und Zeichen?
Lösung: RLE — RLE steht für Lauflängencodierung und fasst direkt aufeinanderfolgende gleiche Elemente zusammen.
Frage 2 von 4MittelFür die Codes X: 0, Y: 10, Z: 11 soll XYZ codiert werden. Welche Bitfolge entsteht?
Lösung: 01011 — Setze X = 0, Y = 10 und Z = 11 zusammen: 0|10|11, also 01011.
Frage 3 von 4SchwerEine Anwendung muss Programmdateien übertragen. Sie könnte durch das Entfernen einzelner Bits besonders kleine Dateien erzeugen. Wie entscheidest du?
Lösung: Das Verfahren ist ungeeignet, weil Programme exakt rekonstruiert werden müssen. — Bei Programmen hat die exakte Rekonstruktion Vorrang. Deshalb kommt nur verlustfreie Kompression infrage.
Frage 4 von 4SchwerEine kurze Zeichenfolge wechselt ständig zwischen verschiedenen Zeichen. Warum ist einfache RLE wahrscheinlich ungeeignet?
Lösung: Viele Läufe haben Länge eins, sodass die Zähler zusätzlichen Platz beanspruchen. — RLE spart vor allem bei langen Läufen. Bei vielen Einzellängen entsteht für fast jedes Zeichen ein zusätzlicher Zähler.

Du kannst ein Verfahren nun anhand der Datenstruktur auswählen: RLE nutzt Läufe, Huffman unterschiedliche Häufigkeiten und LZW wiederkehrende Folgen. Prüfe anschließend immer, ob die Rekonstruktion zum Zweck passt und ob der gesamte Code einschließlich Zusatzinformationen tatsächlich kleiner ist.

Passend dazu