Problème entièrement résolu
-
Six jetons de "abracadabra" avec une fenêtre de recherche de 16 caractères 5 étapes
Le panneau affiche 5,18× après un jeton. Calculez la valeur affichée après les six jetons. L'entrée est « abracadabra », la fenêtre de recherche comporte 16 caractères et le tampon d'anticipation 8.
-
Un jeton est composé de trois champs de largeur fixe ; son coût est donc déterminé par les deux paramètres et non par les données. Le décalage doit pouvoir adresser n'importe quelle position dans la fenêtre, la longueur n'importe quelle valeur jusqu'à la taille du tampon, et le littéral est un octet brut.
-
L'encodeur balaye de gauche à droite et choisit la plus longue correspondance offerte par la fenêtre. Rien ne précède les trois premiers caractères, donc 'a', 'b' et 'r' coûtent chacun un jeton entier pour n'être exprimés qu'une seule fois. Seul le dernier jeton est rentable, en copiant « abra » depuis la position 0.
-
Le ratio sur le panneau est une valeur évolutive qui divise l'ensemble de l'entrée par la sortie produite jusque-là. Après un jeton, il compare onze caractères à dix-sept bits, ce qui explique pourquoi il commence si haut.
-
Six jetons de dix-sept bits chacun représentent 102 bits, pour une entrée de 88 bits. Le codage est plus volumineux que l'élément qu'il code.
-
Le seuil de rentabilité s'obtient par une simple division. Un jeton coûte 17 bits et permet de coder un certain nombre de caractères valant 8 bits chacun ; le schéma n'est donc avantageux que si le jeton moyen fait avancer de plus de 17/8 caractères — et parmi ces six jetons, seul le dernier y parvient.
Réponse
Le panneau affiche 5,18× après le premier jeton et 0,86× après le sixième : la même chaîne, le même codage, de part et d'autre de 1,0. La valeur essentielle à retenir est 2,125 caractères par jeton, ce qui correspond simplement à la largeur d'un jeton divisée par huit, et constitue le seul critère permettant de déterminer si LZ77 est avantageux pour une entrée donnée. Cela attribue aussi un coût à un réglage qui semble gratuit. Élargir la fenêtre de recherche à 64 ajoute deux bits à chaque champ de décalage, sans trouver aucune correspondance plus longue sur cette chaîne — l'analyse donne les six mêmes jetons —, si bien que le ratio chute à 0,77×. Chaque doublement de la portée coûte un bit supplémentaire sur chaque jeton, qu'il soit utilisé ou non.
-
Parcours
La compression à la main
Références (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.