Adloun

Probleme – Aucun compresseur sans perte ne réduit tous les fichiers

Exercice · niveau 3 (difficile) · informatique (MP2I/MPI), chapitre 18 — Algorithmique des textes

Énoncé

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.