MINT lernen

Übungen: Kompression implementieren

Zehn Übungen zu Lauflänge und Huffman in Java — vom Nachvollziehen bis zur Fehlersuche.

Dein Fortschritt:
0 / 0 Aufgaben
1

Übungsaufgaben

Zehn Übungen zum Klicken, Zuordnen, Rechnen und Knobeln — von AFB I bis AFB III. Gemeint sind immer die Methoden codiere und dekodiere aus der Inhaltsseite.

A1
Eine Zeile codieren
AFB I

Geben Sie den Rückgabewert von codiere("MMMMMMMMMMMNNO") an.

Tragen Sie die Antwort ohne Leerzeichen ein — Enter prüft direkt.
11-mal M, 2-mal N, 1-mal O → "11M2N1O". Auch ein einzelnes Zeichen bekommt seine Anzahl 1.
Ansatz: Läufe zählen: M, N, O.
Weiter: Anzahl vor den Wert schreiben.
A2
Code und Text
AFB I

Ordnen Sie jedem Code den Text zu, den dekodiere liefert.

Ansatz: Die Anzahl gehört zum folgenden Buchstaben.
Weiter: 10Y sind zehn Y.
A3
Die Werkzeuge der Methode
AFB I

Beschreiben Sie, welche Operationen dekodiere nutzt — füllen Sie die Lücken, ein Wort bleibt übrig.

Wort anklicken, dann Lücke anklicken (oder umgekehrt) — mit Tab und Enter geht es genauso. Ein Klick auf eine gefüllte Lücke legt das Wort zurück.

Die Schleife läuft bis code.. Jedes Zeichen liest code.. Den Zahlwert einer Ziffer liefert . Eine neue Ziffer ergänzt die Anzahl über plus Ziffer. Angehängt wird mit dem Operator .

split() gehört nicht zu den zugelassenen Zeichenkettenoperationen der Abitur-Hinweise — die Methode kommt ohne aus.
Ansatz: Länge, Zeichen an Position, Verbinden.
Weiter: Mehrstellige Anzahlen wachsen um eine Stelle.
A4
Die Methode zusammensetzen
AFB II

Erstellen Sie die Methode codiere(String text), indem Sie die Zeilen in die richtige Reihenfolge bringen.

Ziehen Sie die Karten in die richtige Reihenfolge — mit der Tastatur: ↑/↓ verschiebt, Shift+↑/↓ wechselt nur den Fokus.
1String code = ""; int i = 0;
2while (i < text.length()) {
3char wert = text.charAt(i); int anzahl = 0;
4while (i < text.length() && text.charAt(i) == wert) { anzahl++; i++; }
5code = code + anzahl + wert;
6}
7return code;
anzahl = 0 gehört in die äußere Schleife — sonst zählt jeder Lauf die vorigen mit. Das Paar wird erst nach der inneren Schleife angehängt.
Ansatz: Erst die Variablen, dann die äußere Schleife.
Weiter: Innere Schleife zählt, danach anhängen.
A5
Tracetabelle für dekodiere
AFB II

Stellen Sie den Ablauf von dekodiere("3a12b") in einer Tracetabelle dar: Werte nach jedem Schleifendurchlauf.

Füllen Sie alle Felder aus und prüfen Sie dann. Enter in einem Feld prüft ebenfalls.
icanzahlLänge von text
03
1a
21
32
4b
Bei der Ziffer 2 wird \(1\cdot10+2=12\). Nach jedem Wert steht anzahl wieder auf 0 — ohne diese Zeile würde die nächste Anzahl falsch weitergezählt.
Ansatz: Ziffer → anzahl ändern, Wert → anhängen und anzahl = 0.
Weiter: 12 entsteht aus 1 · 10 + 2.
A6
Karls for-Variante
AFB II

Karl hat codiere mit einer for-Schleife geschrieben. Überprüfen Sie jede Zeile.

In diesem Text stecken Fehler. Klicken Sie genau die falschen Zeilen an — die richtigen müssen stehen bleiben.
Für "AAB" liefert Karls Methode "2B" statt "2A1B". Die while-Variante aus dem Unterricht vermeidet beide Fehler.
Ansatz: Spielen Sie "AAB" durch.
Weiter: Was passiert mit dem letzten Lauf?
A7
Wann lohnt sich das?
AFB II Mix

Eine Pixelzeile aus 60 Zeichen wird mit codiere verarbeitet; gezählt werden Zeichen. Berechnen Sie die Kennzahlen.

Rechnen Sie die Kette Schritt für Schritt: Erst wenn ein Schritt stimmt, wird der nächste freigeschaltet. Enter prüft.
  1. Codelänge bei 30 W, 5 S, 25 W Zeichen
  2. Kompressionsverhältnis k %
  3. Codelänge bei WSWS… (60 Zeichen) Zeichen
  4. Kompressionsverhältnis k %
30W5S25W hat 8 Zeichen: \(k=\tfrac{8}{60}\approx13{,}3\,\%\). Beim Wechselmuster entstehen 60 Paare zu je 2 Zeichen: \(k=200\,\%\) — das Maximum bei einstelligen Anzahlen (8.1.3).
Ansatz: Codelänge = Ziffern plus Werte.
Weiter: k = komprimiert durch original.
A8
R2D2
AFB III Trick

Nina codiert den Text "R2D2" und dekodiert das Ergebnis wieder. Bewerten Sie die Aussagen — markieren Sie alle zutreffenden.

Mehrere Antworten sind richtig. Markieren Sie alle zutreffenden und klicken Sie dann auf „Prüfen“.
dekodiere("1R121D12") liest 1R, dann die Ziffern 1, 2, 1 als Anzahl 121 und hängt 121-mal D an; die Ziffern 12 am Ende bleiben ohne Wert. Beide Methoden sind korrekt — das Format ist für diese Daten ungeeignet.
Ansatz: Führen Sie codiere Lauf für Lauf aus.
Weiter: Wie liest dekodiere die Ziffernfolge 121?
A9
Zwei Änderungen im Huffman-Decoder
AFB III

Der Baum hat die Codes O = 0, L = 10, T = 110, F = 111. Dekodiert wird "0100". Beurteilen Sie die Folgen.

Wählen Sie in jedem Menü den passenden Eintrag und prüfen Sie dann alle auf einmal.

Fehlt die Zeile knoten = wurzel;, liefert die Methode

Wird der Blatt-Test vor dem Wandern ausgeführt, ergibt sich

Die Anzahl der Schleifendurchläufe der korrekten Methode ist

Ohne Zurücksetzen steht knoten nach „O“ auf einem Blatt; das nächste Bit führt in dessen leeren Teilbaum, und spätestens das Weiterwandern im leeren Baum scheitert mit einer Exception. Mit dem Test vor dem Wandern wird jedes Zeichen erst im nächsten Durchlauf ausgegeben; das letzte nie.
Ansatz: Spielen Sie beide Varianten Bit für Bit durch.
Weiter: Was ist knoten nach dem ersten Bit?
A10
Welches Verfahren implementieren?
AFB III

Ein Team kann nur ein Verfahren umsetzen. Legen Sie sich für jede Datenart fest.

Wählen Sie für jede Zeile eine Stufe: 1 = Lauflänge klar besser, 2 = Lauflänge eher besser, 3 = gleichwertig, 4 = Huffman eher besser, 5 = Huffman klar besser. Mit der Tastatur: Tab zur Zeile, ←/→ zwischen den Stufen, Enter setzt.
1 = Lauflänge klar besser5 = Huffman klar besser
Schwarz-Weiß-Faxseiten mit großen weißen Flächen
deutscher Fließtext, lang
Messreihe, in der ein Sensorwert oft minutenlang gleich bleibt
Text, in dem alle 32 Zeichen gleich häufig vorkommen
Pixelgrafik mit wenigen Farben, aber kaum gleichen Nachbarn
Lauflänge nutzt Wiederholungen hintereinander, Huffman ungleiche Häufigkeiten. Sind alle Zeichen gleich häufig und nie wiederholt, hilft keins von beiden.
Ansatz: Wiederholung nebeneinander oder ungleiche Häufigkeit?
Weiter: Gleich häufige Zeichen: Huffman ohne Gewinn.