Aufgabenblock — AFB III
Begründen statt nur rechnen: widerlegen, verallgemeinern und beurteilen. Formulieren Sie Ihre Antwort zuerst selbst in ganzen Sätzen, bevor Sie die Musterlösung aufklappen.
Widerlegen Sie die Behauptung: „Ein gutes verlustfreies Verfahren macht jede Datei kleiner.“
Hinweis: Zählen statt rechnen.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Es gibt \(2^{n}\) Dateien mit genau \(n\) Bit, aber nur \(2^{0}+2^{1}+\dots+2^{n-1}=2^{n}-1\) kürzere Bitfolgen. Ein verlustfreies Verfahren muss verschiedene Dateien auf verschiedene Ergebnisse abbilden, sonst ließe es sich nicht umkehren. Also bleibt mindestens eine Datei übrig, die nicht kürzer wird — die Behauptung ist falsch.
Beurteilen Sie, ob sich Lauflängencodierung für Farbfotos eignet.
Hinweis: Denken Sie an benachbarte Pixel eines Fotos.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: In Fotos unterscheiden sich benachbarte Pixel fast immer leicht (Rauschen, Verläufe). Es entstehen fast nur Läufe der Länge 1; jedes Paar kostet dann Anzahl-Bits plus 24 Bit Farbe — mehr als das Original. Lauflänge eignet sich für Grafiken mit großen einfarbigen Flächen, nicht für Fotos.
Begründen Sie, warum jeder aus einem Codebaum abgelesene Code präfixfrei ist.
Hinweis: Wo stehen die Zeichen?
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Wäre Codewort \(u\) Präfix von \(v\), läge der Knoten von \(u\) auf dem Weg von der Wurzel zu \(v\). Dann hätte er Kinder, wäre also kein Blatt. Zeichen stehen aber nur in Blättern — Widerspruch. Also ist kein Codewort Anfang eines anderen.
Zeigen Sie: Kommen \(2^{k}\) Zeichen gleich oft vor, liefert Huffman genau einen Code fester Länge \(k\).
Hinweis: Beginnen Sie mit vier Zeichen.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Alle Blätter haben die Häufigkeit \(h\). Zuerst werden je zwei zu Knoten \(2h\) verbunden; erst wenn alle Blätter verbraucht sind, sind die \(2h\)-Knoten die kleinsten. So entsteht Ebene für Ebene ein vollständiger Binärbaum; nach \(k\) Ebenen bleibt die Wurzel. Alle Blätter liegen in Tiefe \(k\) — jedes Codewort hat \(k\) Bit.
Erklären Sie, warum Quittungen die Nummer des Pakets enthalten müssen.
Hinweis: Denken Sie an eine verspätete Quittung.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Kommt eine Quittung erst nach dem Timeout an, hat der Sender das Paket schon erneut geschickt. Ohne Nummer könnte er diese späte Quittung für die des nächsten Pakets halten und weiterzählen, obwohl dieses verloren ging. Mit Nummer ordnet er jede Quittung eindeutig zu.
Bewerten Sie einen sehr kurzen und einen sehr langen Timeout.
Hinweis: Was passiert jeweils ohne und mit Verlusten?
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Ein zu kurzer Timeout läuft ab, bevor die Quittung da sein kann: Pakete werden unnötig wiederholt, der Empfänger erhält Duplikate, die Leitung wird belastet. Ein zu langer Timeout verschenkt nach jedem echten Verlust viel Zeit. Sinnvoll ist ein Wert etwas über der Zeit für Hin- und Rückweg samt Bearbeitung.
Erörtern Sie, ob man vor dem Verschlüsseln oder danach komprimieren sollte.
Hinweis: Wie sehen verschlüsselte Daten aus? (Kapitel 6)
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Gut verschlüsselte Daten sehen wie Zufall aus: keine Läufe, gleich verteilte Häufigkeiten — Kompression danach bringt nichts. Deshalb komprimiert man zuerst und verschlüsselt dann. Einschränkung: Die Länge der komprimierten Daten kann Rückschlüsse auf den Inhalt erlauben; in sensiblen Anwendungen wird das berücksichtigt.
Vergleichen Sie die Wirkung eines gekippten Bits bei einem festen Code und bei einem Huffman-Code.
Hinweis: Wo liegen die Grenzen zwischen den Codewörtern?
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Beim festen Code liegen die Grenzen fest; ein gekipptes Bit verfälscht genau ein Zeichen. Beim Huffman-Code kann das Bit ein Codewort verlängern oder verkürzen — alle folgenden Grenzen verschieben sich, bis der Strom zufällig wieder synchron ist. Kompression macht Daten also fehleranfälliger.
Entwickeln Sie eine Regel, mit der das Endzeichen $ auch in den Nutzdaten vorkommen darf.
Hinweis: Zwei Wege: Länge angeben oder markieren.
\$ und \\.Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Variante 1: Der Kopf enthält die Anzahl der Datenzeichen; der Empfänger liest genau so viele Zeichen, egal was sie enthalten. Variante 2: Maskierung — im Datenteil wird $ als \$ und \ als \\ geschrieben; ein einzelnes $ bedeutet dann immer Rahmenende. Variante 1 ist leichter zu implementieren, Variante 2 braucht keine Längenangabe vorab.
Nehmen Sie Stellung: „Unser Programm spart im Durchschnitt 60 %.“ — gemessen als Mittelwert der Einsparungen vieler kleiner Testdateien.
Hinweis: Gewichtung beachten.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Der Mittelwert der Einsparungen gewichtet jede Datei gleich, egal wie groß sie ist. Spart ein Programm bei vielen kleinen Dateien viel, bei großen aber wenig, ist der tatsächlich gewonnene Speicher viel kleiner als 60 %. Aussagekräftig ist das Gesamtverhältnis: Summe komprimiert durch Summe original, an typischen Daten gemessen.
