Supposons que nous avons un fichier de N bits de long, et que nous voulons le compresser sans perte, de sorte que nous puissions récupérer le fichier original. Il existe 2^N fichiers possibles de N bits de long, et notre algorithme de compression doit donc transformer l'un de ces fichiers en l'un des 2^N autres possibles. Cependant, nous ne pouvons pas exprimer 2^N fichiers différents en moins de N bits.
Par conséquent, si nous pouvons prendre certains fichiers et les compresser, nous devons avoir certains fichiers qui s'allongent sous la compression, pour équilibrer ceux qui raccourcissent.
Cela signifie qu'un algorithme de compression ne peut comprimer que certains fichiers, et qu'il doit en fait en allonger certains. Cela signifie qu'en moyenne, la compression d'un fichier aléatoire ne peut pas le raccourcir, mais peut l'allonger.
Les algorithmes de compression pratiques fonctionnent parce que nous n'utilisons généralement pas de fichiers aléatoires. La plupart des fichiers que nous utilisons ont une certaine structure ou d'autres propriétés, qu'il s'agisse de texte, d'exécutables de programmes ou d'images significatives. En utilisant un bon algorithme de compression, nous pouvons raccourcir considérablement les fichiers des types que nous utilisons normalement.
Cependant, le fichier compressé n'est pas l'un de ces types. Si l'algorithme de compression est bon, la plupart des structures et des redondances ont été éliminées, et ce qui reste ressemble beaucoup à du hasard.
Aucun algorithme de compression, comme nous l'avons vu, ne peut compresser efficacement un fichier aléatoire, et cela s'applique également à un fichier d'apparence aléatoire. Par conséquent, essayer de recompresser un fichier compressé ne le raccourcira pas de manière significative, et pourrait même l'allonger un peu.
Ainsi, le nombre normal de fois qu'un algorithme de compression peut être exécuté avec profit est de un.
La corruption ne se produit que lorsque nous parlons de compression avec perte. Par exemple, vous ne pouvez pas nécessairement récupérer une image avec précision à partir d'un fichier JPEG. Cela signifie qu'un compresseur JPEG peut raccourcir de manière fiable un fichier image, mais uniquement au prix de l'impossibilité de le récupérer exactement. Nous sommes souvent prêts à faire cela pour les images, mais pas pour le texte, et surtout pas pour les fichiers exécutables.
Dans ce cas, il n'y a pas d'étape à laquelle la corruption commence. Elle commence lorsque vous commencez à la compresser, et s'aggrave au fur et à mesure que vous la compressez. C'est pourquoi les bons programmes de traitement d'images vous permettent de spécifier le niveau de compression souhaité lorsque vous créez un JPEG : vous pouvez ainsi équilibrer la qualité de l'image et la taille du fichier. Vous trouvez le point d'arrêt en considérant le coût de la taille du fichier (qui est plus important pour les connexions Internet que pour le stockage, en général) par rapport au coût de la réduction de la qualité. Il n'y a pas de bonne réponse évidente.
2 votes
Vous devez préciser si vous demandez une compression des données sans perte, avec perte, ou les deux.
41 votes
J'ai entendu parler d'un algorithme de compression qui, s'il est exécuté encore et encore, finit par réduire la taille du fichier à un octet. En l'utilisant, j'ai réussi à stocker tous les fichiers jamais créés dans un seul fichier zip - et il était plus petit que 1KB ! Certaines personnes disent que l'algorithme est un peu destructeur. Mais moi, je dis que le gain d'espace a plus que compensé la légère perte de précision ;)
6 votes
Combien de routes un homme doit-il parcourir ?
1 votes
@JeffreyKemp Pourriez-vous parler du compresseur BARF de Matt Mahoney ? mattmahoney.net/dc/barf.html
1 votes
@jchevali on dirait qu'ils ont fait un long chemin dans la technologie de compression !
0 votes
@JeffreyKemp si vous faites référence au compresseur BARF alors je voudrais mentionner que le compresseur est une tricherie. Il ne compresse pas réellement les données mais commence plutôt à retirer des octets des données réelles et les place dans des fichiers de type
File Name
réduisant ainsi la taille du fichier, mais la vérité est qu'il augmente le nom du fichier 3 fois plus que le fichier original.