Zum Inhalt springen

Informatik · Klasse 10–12 · aktualisiert

Huffman-Codierung einfach erklärt

Du lernst, warum Huffman-Codes präfixfrei sind, baust einen Huffman-Baum, codierst und decodierst und beurteilst, wie gut die Kompression ist.

0 von 13 Aufgaben gelöst

Huffman-Codierung einfach erklärt

Kurz gesagt

Die Huffman-Codierung gibt häufigen Zeichen in der Regel kürzere Codewörter als seltenen. Kein Codewort ist der Beginn eines anderen, darum braucht man keine Trennzeichen. Kein Verfahren, das jedes Zeichen einzeln codiert, ist bei bekannten Häufigkeiten besser.

Ein Text mit vielen gleichen Buchstaben muss nicht jeden Buchstaben gleich lang speichern. Ein Zeichen, das oft vorkommt, bekommt wenige Bits, ein seltenes mehr. Genau das macht die Huffman-Codierung. Hier lernst du, wie das funktioniert und wo es an Grenzen stößt.

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

Bei der Huffman-Codierung bekommen die Zeichen Codewörter mit unterschiedlicher Länge. Ein Codewort ist eine kurze Folge aus Bits, zum Beispiel 01. Im fertigen Bitstrom stehen die Codewörter ohne Lücken hintereinander. Du musst also selbst erkennen, wo ein Codewort endet.

Um einen Code eindeutig decodieren zu können, muss er präfixfrei sein: Kein Codewort darf der Beginn eines anderen Codeworts sein. Der Huffman-Code ist ein solcher Präfixcode. Beim Morsecode braucht man dagegen Trennzeichen. Bei der Huffman-Codierung ist keine Trennung nötig, weil die Codierung präfixfrei ist.

Die Codewörter lesen wir an einem Baum ab. Die Wurzel ist der oberste Knoten, ein Blatt ist ein Knoten ganz unten ohne Kinder. Im Huffman-Baum stehen die Zeichen nur in den Blättern. Der Pfad von der Wurzel zum Blatt bestimmt das Codewort. So kann kein Codewort der Anfang eines anderen sein.

Beim Decodieren gehst du mit jedem Bit einen Schritt im Baum, bis du ein Blatt erreichst. Dieses Blatt ist das Zeichen. Dann beginnst du wieder an der Wurzel. Ein präfixfreies Beispiel ist das Codebuch a→1, b→01, c→001, d→000.

Definition

Präfixfrei

Ein Code ist präfixfrei, wenn kein Codewort der Beginn eines anderen Codeworts ist.

Beispiel: Ein ausgedachter Code, der nicht präfixfrei ist

  1. 1Erfundenes Codebuch (kein echter Huffman-Code): a→0, b→01, c→1
  2. 2Bitfolge: 01
  3. 3Lesart 1: 01 ist das Codewort von b
  4. 4Lesart 2: 0 ist a und 1 ist c, also ac
  5. 5Das Codewort 0 ist der Beginn von 01. Der Code ist nicht präfixfrei, deshalb ist die Bitfolge mehrdeutig.

Merke: Präfixfrei heißt: Kein Codewort ist der Beginn eines anderen. Dann brauchst du keine Trennzeichen zwischen den Codewörtern.

Teste dich

LeichtWas bedeutet „präfixfrei“ bei einem Code?
MittelWo stehen die Zeichen im Huffman-Baum?

Alles auf einen Blick

Huffman-Codierung

  • Präfixfrei

    Kein Codewort ist der Beginn eines anderen, darum braucht man keine Trennzeichen.

  • Baum bauen

    Die Bäume mit den geringsten Häufigkeiten zusammenfassen und die Summe notieren, bis ein Baum bleibt.

  • Codewort ablesen

    Von der Wurzel bis zum Blatt die Zeichen auf den Kanten hintereinander schreiben.

  • Decodieren

    Bit für Bit von der Wurzel zum Blatt gehen, dann wieder an der Wurzel beginnen.

  • Bitlänge

    Häufigkeit mal Codewortlänge, über alle Zeichen addiert.

  • Grenze

    Die mittlere Länge liegt zwischen der Entropie H und H + 1.

Musteraufgabe · Schritt für Schritt

Wörter mit dem Codebuch A bis E codieren und decodieren

  1. 1Codebuch: A→0, B→100, C→101, D→110, E→111
  2. 2Aufgabe a: Codiere das Wort BAD.
  3. 3B → 100, A → 0, D → 110
  4. 4Zusammen: 1000110 (7 Bit)
  5. 5Aufgabe b: Decodiere 1010111.
  6. 6Von der Wurzel aus: 101 führt zu einem Blatt (C), dann 0 (A), dann 111 (E)
  7. 7Ergebnis: CAE
  8. 8Probe: C→101, A→0, E→111 ergibt wieder 1010111

Fehler finden

Prüfe die Aussagen zum Baum mit sieben Symbolen 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.

Ein Code ist präfixfrei, wenn kein Codewort der eines anderen Codeworts ist. Beim Decodieren startest du für jedes neue Zeichen wieder . Häufige Zeichen bekommen in der Regel Codewörter als seltene.

Karteikasten

Erst selbst überlegen, dann umdrehen.

Übung mit Feedback

Abschluss-Check: Huffman-Codierung

LeichtWelches Codebuch ist präfixfrei?
MittelDas Codebuch lautet a→1, b→01, c→001, d→000. Was ergibt die Bitfolge 0010001?
SchwerEin Text hat vier Zeichen mit den Wahrscheinlichkeiten 0,5; 0,25; 0,125 und 0,125. Seine Entropie beträgt 1,75 Bit pro Zeichen. Was gilt für die mittlere Länge eines Huffman-Codes?

Weiterlesen in Informatik