MINT lernen

Abituraufgaben: Mit Huffman codieren

Zwei Abituraufgaben zum Codieren und Decodieren — bis zur eigenen Python-Funktion.

Dein Fortschritt:
0 / 0 Aufgaben
1

Mit einer Codetabelle arbeiten

AFB I–II

Die Abbildung zeigt einen Codebaum (links 0, rechts 1) für die Zeichen A, E, L, S und T.

Codebaum
10110001EASTL
  1. Geben Sie die Codetabelle an und codieren Sie das Wort SALAT.
  2. Wenden Sie den Code an, um die Bitfolge 011100110 zu decodieren.
  3. Weisen Sie nach, dass der Code präfixfrei ist.
  4. Erläutern Sie die Folgen, wenn bei der Übertragung von ESEL das erste Bit kippt.

Hinweise

Hinweis zu Aufgabe a)
Weg von der Wurzel zum Blatt ablesen.
Hinweis zu Aufgabe b)
Bit für Bit durch den Baum, im Blatt zurück zur Wurzel.
Hinweis zu Aufgabe c)
Paare vergleichen oder mit dem Baum argumentieren.
Hinweis zu Aufgabe d)
Decodieren Sie 111100110.Erläutern: Einen Sachverhalt so darstellen, dass Zusammenhänge und Bedingungen verständlich werden – mit Beispielen oder Belegen.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

A 00, E 01, L 10, S 110, T 111. SALAT → 110 00 10 00 111 = 11000100111 (11 Bit).

Erwartungshorizont zu Aufgabe b)

01 → E, 110 → S, 01 → E, 10 → L: ESEL.

Erwartungshorizont zu Aufgabe c)

Die 2-Bit-Codewörter 00, 01, 10 sind keine Anfänge von 110 oder 111 (die mit 11 beginnen); 110 und 111 unterscheiden sich im letzten Bit. Oder: Alle Zeichen stehen in Blättern.

Erwartungshorizont zu Aufgabe d)

111 → T, 10 → L, 01 → E, 10 → L: TLEL. Ein einziges gekipptes Bit verschiebt die Codewortgrenzen, sodass mehrere Zeichen falsch sind — der Empfänger bemerkt den Fehler nicht, weil alle Codewörter gültig sind.

2

Decodieren in Python

AFB II–III

Ein Text aus 1000 Zeichen wird Huffman-codiert. Häufigkeiten und Codewörter:

ZeichenENRIST
Häufigkeit35020015012010080
Codewort0010010011110111

Die Codetabelle wird mitgeschickt: je Zeichen 8 Bit für das Zeichen, 4 Bit für die Codewortlänge und das Codewort selbst.

  1. Berechnen Sie die Länge des codierten Textes und der Codetabelle.
  2. Beurteilen Sie den Nutzen der Kompression im Vergleich zu 8 Bit je Zeichen und zu einem Code fester Länge.
  3. Implementieren Sie eine Python-Funktion decodiere(bits, tabelle). tabelle ist ein Dictionary wie {"00": "E", "10": "N", …}, bits eine Zeichenkette aus 0 und 1.
  4. Erweitern Sie die Funktion so, dass sie einen Übertragungsfehler meldet, wenn am Ende Bits übrig bleiben oder der Puffer länger als das längste Codewort wird.

Hinweise

Hinweis zu Aufgabe a)
\(\sum h\cdot l\); Tabelle zeichenweise.
Hinweis zu Aufgabe b)
8000 Bit bzw. 3000 Bit als Vergleich.
Hinweis zu Aufgabe c)
Bits in einem Puffer sammeln, bis der Puffer ein Codewort ist.
Hinweis zu Aufgabe d)
Nach der Schleife prüfen; in der Schleife die Pufferlänge kontrollieren.Ergänzen/Erweitern/Verändern: Eine vorgegebene Problemlösung unter Berücksichtigung vorgegebener Kriterien anpassen.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Text: \(350\cdot2+200\cdot2+150\cdot3+120\cdot3+100\cdot3+80\cdot3=2450\) Bit. Tabelle: \(6\cdot(8+4)+(2+2+3+3+3+3)=72+16=88\) Bit. Zusammen 2538 Bit.

Erwartungshorizont zu Aufgabe b)

ASCII: 8000 Bit → \(k\approx32\,\%\). Fester 3-Bit-Code (6 Zeichen): 3000 Bit (+ kleine Tabelle) → Huffman spart gegenüber diesem noch gut 15 %. Die Tabelle fällt bei 1000 Zeichen kaum ins Gewicht; der Code lohnt sich.

Erwartungshorizont zu Aufgabe c)
def decodiere(bits, tabelle):    text = ""    puffer = ""    for b in bits:        puffer = puffer + b        if puffer in tabelle:            text = text + tabelle[puffer]            puffer = ""    return text

Weil der Code präfixfrei ist, ist das erste gefundene Codewort immer das richtige.

Erwartungshorizont zu Aufgabe d)
    maxlen = max(len(c) for c in tabelle)    …  # in der Schleife nach puffer = puffer + b:        if len(puffer) > maxlen:            return None          # ungültige Bitfolge    if puffer != "":        return None              # Reste am Ende

Rückgabe None signalisiert den Fehler. Hinweis: Bei vollständigen Codebäumen wie hier kann der Puffer nie zu lang werden — dann bleibt nur die Prüfung am Ende.