Probleme – Aucun compresseur sans perte ne réduit tous les fichiers
Exercice · niveau 3 (difficile) · informatique (MP2I/MPI), chapitre 18 — Algorithmique des textes
Énoncé
- Montrer qu'un algorithme de compression sans perte ne peut pas raccourcir strictement tous les fichiers.
- Majorer la proportion de fichiers de bits qu'il peut raccourcir d'au moins bits.
- Le vérifier sur lzw appliqué à des données aléatoires.
Corrigé
1. L'argument de comptage. « Sans perte » signifie que la compression est injective : deux fichiers distincts ont des compressés distincts, faute de quoi le décompresseur ne saurait lequel rendre.
Supposons que raccourcisse strictement tout fichier de longueur . Il y a tels fichiers (longueurs à ). Leurs images ont toutes une longueur , or il n'existe que mots binaires de longueur . Comme
le principe des tiroirs donne deux fichiers de même image : n'est pas injective. Contradiction.
La conséquence est plus forte qu'il n'y paraît : tout compresseur qui raccourcit un fichier doit en allonger un autre. Il n'y a pas de compression universelle ; il n'y a que des compressions qui parient sur une classe d'entrées — les textes, les images, les journaux. Un compresseur est donc un modèle de ce qu'il compresse, et rien d'autre.
2. La proportion. Un fichier de bits raccourci d'au moins bits a une image de longueur . Il y a mots binaires de cette longueur au plus. Par injectivité, au plus autant de fichiers de bits peuvent gagner bits, d'où la proportion
| gain | proportion majorée |
|---|---|
| bits | |
| bits | |
| bits | |
| bits |
Gagner ne serait-ce qu'un kilo-octet sur un fichier « quelconque » est un événement de probabilité . Que les compresseurs réels y parviennent tous les jours dit seulement une chose : les fichiers réels ne sont pas quelconques.
3. La vérification sur lzw. On compresse des suites binaires tirées uniformément au hasard, et l'on compte les bits produits en supposant que chaque code s'écrit sur bits, où est la taille finale du dictionnaire :
longueur source codes emis bits par code total
20 20 bits 11 4 44 bits
50 50 bits 21 5 105 bits
100 100 bits 34 6 204 bits
400 400 bits 98 7 686 bits
lzw double la taille, régulièrement, sur des données incompressibles. Ce n'est pas un défaut de l'algorithme : c'est le théorème de la question 1, observé. lzw parie sur la répétition ; quand il n'y en a pas, le dictionnaire ne sert à rien et l'on paie ses numéros au prix fort.
Ce que font les formats réels, et c'est la seule réponse possible : ils détectent l'échec et le contournent. Un bloc deflate porte un en-tête à trois valeurs — non compressé, Huffman fixe, Huffman dynamique — et le compresseur choisit la moins mauvaise bloc par bloc. Le surcoût dans le pire cas tombe alors à quelques bits par bloc au lieu d'un facteur deux. Le théorème interdit de toujours gagner ; il n'interdit pas de ne presque jamais perdre.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.