Zum Inhalt springen

Informatik · Klasse 10–12 · aktualisiert

LZW-Kompression: Codieren, decodieren und Platzbedarf prüfen

Du lernst, wie LZW sein Wörterbuch aufbaut, Zeichenfolgen codiert und decodiert, den Sonderfall löst und prüfst, ob Speicher gespart wird.

0 von 11 Aufgaben gelöst

LZW-Kompression: Codieren, decodieren und Platzbedarf prüfen

Kurz gesagt

LZW ist ein verlustfreies Verfahren, das Daten mit einem dynamischen Wörterbuch kürzer aufschreibt. Der Kompressor ersetzt bekannte Muster durch Codes ab 256, der Decoder baut dasselbe Wörterbuch aus den Codes nach. Ob das Platz spart, musst du in Bit nachrechnen.

Beim Verschicken von Bildern und Texten soll die Datenmenge klein bleiben. LZW schafft das, ohne ein fertiges Wörterbuch mitzuschicken. Wie das Wörterbuch beim Lesen wächst und warum es trotzdem nicht immer Platz spart, findest du hier heraus.

Deine Lernziele

Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.

4 Abschnitte

LZW ist ein verlustfreies Komprimierungsverfahren. Aus den komprimierten Daten bekommst du also die ursprünglichen Daten wieder. Das Verfahren arbeitet mit einem dynamischen Wörterbuch. Darin sammeln sich häufig vorkommende Zeichenketten. Sie werden dann nur noch unter einer Abkürzung angesprochen. Diese Abkürzung ist eine Nummer, der Index.

Am Anfang stehen im Wörterbuch nur einzelne Bytes (ein Byte ist hier ein Zeichen aus 8 Bit). Die Einträge mit dem Index 0 bis 255 sind damit gefüllt. Das Wörterbuch beginnt also nicht leer. Neue Einträge beginnen deshalb mit dem Index 256. Ein neuer Eintrag entsteht so: Der Kompressor sucht an der Eingabe das längste Muster, das schon im Wörterbuch steht, und gibt dessen Wert aus. Dann speichert er den gefundenen Eintrag plus das nächste Zeichen als neuen Eintrag.

Das Wörterbuch wird erst zur Laufzeit erzeugt, also während das Verfahren arbeitet. Deshalb ist es unabhängig vom Format der Daten. Der Kompressor führt es intern mit, speichert es aber nicht. Der Decoder (das Programm, das wieder entpackt) baut es aus den Codes selbst auf. Es muss also nicht übertragen werden.

Definition

Dynamisches Wörterbuch

Eine Tabelle aus Index und Zeichenkette, die sich während des Lesens der Daten füllt. Sie passt sich dem jeweiligen Inhalt an.

Beispiel: Erste Schritte mit LZWLZ78LZ77LZCLZMWLZAP

  1. 1L gelesen: Ausgabe L, neuer Eintrag LZ = 256
  2. 2Z gelesen: Ausgabe Z, neuer Eintrag ZW = 257
  3. 3W gelesen: Ausgabe W, neuer Eintrag WL = 258
  4. 4Danach wird LZ als Ganzes gefunden und als 256 ausgegeben
  5. 5Neuer Eintrag dabei: LZ7 = 259

Teste dich

LeichtWomit ist das Wörterbuch von LZW zu Beginn gefüllt?
MittelWie entsteht bei LZW ein neuer Wörterbucheintrag?

Alles auf einen Blick

LZW-Kompression

  • Wörterbuch

    Es beginnt mit den Einträgen 0 bis 255 und wächst beim Lesen ab Index 256.

  • Codieren

    Gefundener Eintrag plus nächstes Zeichen wird neuer Eintrag, das Muster wird ausgegeben.

  • Decodieren

    Neuer Eintrag ist das vorherige Muster plus das erste Zeichen des aktuellen Musters.

  • Sonderfall

    Ist der Code noch unbekannt, gilt das vorherige Muster plus dessen erstes Zeichen.

  • Platz

    Zeichen mal 8 Bit mit Codes mal Bits pro Code vergleichen, üblicherweise 12 Bit je Code. Verlustfrei heißt nicht automatisch kürzer.

Musteraufgabe · Schritt für Schritt

ANANAS codieren, decodieren und den Platz prüfen (erfundenes Beispiel)

  1. 1Am Anfang kennt das Wörterbuch alle einzelnen Zeichen
  2. 2A, nächstes N: AN fehlt. Ausgabe A, neuer Eintrag AN = 256
  3. 3N, nächstes A: NA fehlt. Ausgabe N, neuer Eintrag NA = 257
  4. 4A, dann N: AN ist da, das Muster wird AN. Nächstes A: ANA fehlt. Ausgabe 256, neuer Eintrag ANA = 258
  5. 5A, nächstes S: AS fehlt. Ausgabe A, neuer Eintrag AS = 259. S bleibt übrig
  6. 6Ende: Das übrige Muster S wird ausgegeben. Codefolge: A N 256 A S
  7. 7Decodieren: A ausgeben. N ausgeben, Eintrag AN = 256. Code 256 ist AN: Eintrag NA = 257, Ausgabe AN
  8. 8Code A: Eintrag ANA = 258, Ausgabe A. Code S: Eintrag AS = 259, Ausgabe S
  9. 9Zusammen: A, N, AN, A, S ergibt ANANAS
  10. 10Platz mit 12 Bit je Code: Eingabe 6 · 8 = 48 Bit, Ausgabe 5 · 12 = 60 Bit. Die Codierung ist länger

Fehler finden

Prüfe die Schritte beim Decodieren In einer Zeile steckt ein Fehler. Tippe sie an.

Lückentext

Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.

Die Einträge 0 bis 255 sind schon mit einzelnen Bytes gefüllt, also beginnt der erste neue Eintrag bei . Ist ein Code unbekannt und war die vorige Ausgabe AB, dann ist die Ausgabe ABA. Das angehängte A ist das Zeichen von AB. Der Index hat üblicherweise Bit, das erlaubt maximal 4096 Einträge.

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: LZW-Kompression

LeichtMuss der Kompressor sein Wörterbuch zusammen mit den Codes mitschicken?
MittelWie lautet die Codefolge für HAHAHA (erfundenes Beispiel)? Einzelne Zeichen bleiben stehen, neue Einträge beginnen bei 256.
SchwerEine Eingabe hat 20 Zeichen zu je 8 Bit. LZW gibt 14 Codes aus, jeder Code braucht 12 Bit (erfundene Zahlen). Was stimmt?

Weiterlesen in Informatik