Je viens de commencer à lire un livre intitulé Introduction to Data Compression, de Guy E. Blelloch. À la première page, il déclare:
La vérité est que si un message est raccourci par un algorithme, alors un autre message doit être allongé. Vous pouvez le vérifier en pratique en exécutant GZIP sur un fichier GIF. Il est en effet possible d'aller plus loin et de montrer que pour un ensemble de messages d'entrée de longueur fixe, si un message est compressé, alors la longueur moyenne des messages compressés sur toutes les entrées possibles sera toujours plus longue que l'original saisir des messages.
Prenons par exemple les 8 messages 3 bits possibles. Si l'un est compressé en deux bits, il n'est pas difficile de se convaincre que deux messages devront s'étendre à 4 bits, ce qui donne une moyenne de 3 1/8 bits.
Vraiment? J'ai du mal à m'en convaincre. En fait, voici un contre-exemple. Considérez l'algorithme qui accepte en entrée toute chaîne de 3 bits et mappe sur les sorties suivantes:
000 -> 0
001 -> 001
010 -> 010
011 -> 011
100 -> 100
101 -> 101
110 -> 110
111 -> 111
Vous y êtes donc - aucune entrée n'est mappée sur une sortie plus longue. Il n'y a certainement pas de "deux messages" qui se sont étendus à 4 bits.
Alors de quoi parle exactement l'auteur? Je soupçonne soit qu'il y a une mise en garde implicite qui n'est tout simplement pas évidente pour moi, soit qu'il utilise un langage beaucoup trop général.
Avertissement: je me rends compte que si mon algorithme est appliqué de manière itérative, vous perdez en effet des données. Essayez de l'appliquer deux fois à l'entrée 110: 110 -> 000 -> 0, et maintenant vous ne savez pas lequel de 110 et 000 était l'entrée d'origine. Cependant, si vous ne l'appliquez qu'une seule fois, cela me semble sans perte. Est-ce lié à ce dont parle l'auteur?