Aufgabe vollständig gelöst
-
Sechs Token von "abracadabra" mit einem Suchfenster von 16 Zeichen 5 Schritte
Das Bedienfeld zeigt nach einem Token 5,18× an. Berechnen Sie, was es nach allen sechs zeigt. Die Eingabe lautet "abracadabra", das Suchfenster umfasst 16 Zeichen und der Vorausschaupuffer 8.
-
Ein Token besteht aus drei Feldern fester Breite, sodass seine Kosten von den beiden Einstellungen und nicht von den Daten bestimmt werden. Der Offset muss jede Position im Fenster adressieren können, die Länge jeden Wert bis zur Puffergröße, und das Literal ist ein rohes Byte.
-
Der Kodierer tastet von links nach rechts ab und nimmt die längste Übereinstimmung, die das Fenster bietet. Vor den ersten drei Zeichen liegt noch nichts, sodass 'a', 'b' und 'r' jeweils ein ganzes Token kosten, um einmal ausgegeben zu werden. Erst das letzte Token lohnt sich und kopiert "abra" ab Position 0.
-
Das Verhältnis auf dem Bedienfeld ist ein fortlaufender Wert und teilt die gesamte Eingabe durch die bisher erzeugte Ausgabe. Nach einem Token stellt es elf Zeichen siebzehn Bit gegenüber, weshalb es so hoch beginnt.
-
Sechs Token zu je siebzehn Bit ergeben 102 Bit gegenüber einer Eingabe von 88. Die Kodierung ist größer als das, was sie kodiert.
-
Die Schwelle zur Rentabilität ist eine einzige Division. Ein Token kostet 17 Bit und kauft eine Anzahl von Zeichen im Wert von jeweils 8 Bit, sodass das Verfahren nur dann gewinnt, wenn das durchschnittliche Token mehr als 17/8 Zeichen voranschreitet — und von diesen sechs tut dies nur das letzte.
Antwort
Das Bedienfeld zeigt nach dem ersten Token 5,18× und nach dem sechsten 0,86× an: dieselbe Zeichenkette, dieselbe Kodierung, auf gegenüberliegenden Seiten von 1,0. Der merkenswerte Wert ist 2,125 Zeichen pro Token, was genau der Tokenbreite geteilt durch acht entspricht, und er ist das einzige Kriterium dafür, ob LZ77 bei einer gegebenen Eingabe hilft. Er bewertet auch einen Stellparameter, der kostenlos wirkt. Die Erweiterung des Suchfensters auf 64 fügt jedem Offset-Feld zwei Bit hinzu, und bei dieser Zeichenkette findet sich überhaupt keine längere Übereinstimmung — die Zerlegung bleibt dieselben sechs Token —, sodass das Verhältnis auf 0,77× fällt. Jede Verdopplung der Reichweite kostet ein weiteres Bit pro Token, ob genutzt oder nicht.
-
Lernpfad
Kompression von Hand
Quellen (1)
- The algorithm, and the offset-1 trick block 3 turns on: J. Ziv and A. Lempel, "A universal algorithm for sequential data compression." IEEE Transactions on Information Theory 23(3), 337–343, 1977.