Quel est le taux de compression maximal de gzip ?
Quelle est la plus grande taille à laquelle un gzip (disons 10kb pour l'exemple) peut être décompressé ?
Quelle est la plus grande taille à laquelle un gzip (disons 10kb pour l'exemple) peut être décompressé ?
Mise à jour 2020-02-06: Comme mentionné dans les commentaires, je n'ai pas pu reproduire le résultat original avec gzip. En partant de l'hypothèse que j'ai accidentellement utilisé un format de compression différent dans ce test rapide original, j'ai répété avec gzip et mis à jour les chiffres ci-dessous en conséquence. Ce nouveau résultat est conforme à la compression maximale théorique indiquée dans les autres réponses/commentaires.
Cela dépend beaucoup des données à compresser. Un test rapide avec un fichier de 1Go rempli de zéros utilisant une version standard de gzip (avec des options par défaut ou en spécifiant -9) donne une taille compressée de ~1018Ko, donc votre fichier de 10Ko pourrait potentiellement se développer en ~10Mo.
Si les données ont une faible redondance au départ, par exemple, l'archive contient des fichiers d'images dans un format qui est compressé nativement (gif, jpg, png, …), alors gzip peut ne pas ajouter de compression supplémentaire du tout. Pour les fichiers binaires comme les exécutables de programmes, vous pouvez constater une compression allant jusqu'à 2:1, pour le texte brut, le HTML ou d'autres balises, une compression de 3:1 ou 4:1 ou plus n'est pas improbable. Dans certains cas, vous pouvez obtenir une compression de 10:1, mais la compression de ~1030:1 obtenue avec un fichier rempli d'un seul symbole est quelque chose que vous ne verrez pas en dehors de circonstances artificielles similaires.
Vous pouvez vérifier combien de données résulteraient de la décompression d'un fichier gzip, sans écrire son contenu non compressé sur le disque, avec gunzip -c file.gz | wc --bytes
- cela décompressera le fichier mais ne stockera pas les résultats, au lieu de les passer à wc
qui comptera le nombre d'octets au fur et à mesure de leur passage puis les rejettera. Si le contenu compressé est un fichier tar contenant de nombreux petits fichiers, vous constaterez peut-être qu'il faut nettement plus d'espace disque pour décompresser l'archive complète, mais dans la plupart des cas, le compte obtenu en passant de gunzip
à wc
sera aussi précis que nécessaire.
En général, la compression ne dépasse pas 95 % (de sorte que des données gzippées de 10 ko se décompressent à environ 200 ko), mais il existe des fichiers spécialement conçus qui se développent de manière exponentielle. Cherchez 42.zip
, il se décompresse en quelques pétaoctets de données (insignifiantes).
Cité textuellement dans https://stackoverflow.com/a/16794960/293815
Le taux de compression maximal du format déflaté est de 1032:1. Cela s'explique par le fait que la plus longue durée qui peut être encodée est de 258 octets. Au moins deux bits sont nécessaires pour chaque passage (un bit pour le code de longueur et un bit pour le code de distance), ce qui signifie que 4*258 = 1032 octets non compressés peuvent être encodés par octet compressé.
Vous pouvez obtenir plus de compression en gzippant le résultat de gzip. Normalement, cela n'améliore pas la compression, mais pour de très longues durées, c'est possible.
Au fait, l'approche LZ77 utilisée par deflate est plus générale que l'encodage par longueur de course. Au lieu d'une simple longueur, on utilise une paire longueur/distance. Cela permet de copier une chaîne à une certaine distance en arrière, ou de répliquer un octet comme dans le run-length pour une distance de un, ou de répliquer des triples d'octets avec une distance de trois, etc.
Le taux de compression de tout algorithme de compression sera fonction des données comprimées (outre la longueur de ces données).
Voici une analyse à MaximumCompression , Regardez un des échantillons comme, Résumé des multiples tests de référence de compression de fichiers
File type : Multiple file types (46 in total) # of files to compress in this test : 510 Total File Size (bytes) : 316.355.757 Average File Size (bytes) : 620,305 Largest File (bytes) : 18,403,071 Smallest File (bytes) : 3,554
La réponse à votre question dépend de l'entrée. Pour vous donner une idée de la façon dont la compression est effectuée, regardez ces vidéos de six minutes. https://www.youtube.com/watch?v=ZdooBTdW5bM
Ce que vous devriez en tirer, c'est que le taux de compression dépend de la fréquence de chaque caractère, il n'y a donc pas de taux maximum général, il dépend de l'entrée, pour le texte anglais il est d'environ 65 pour cent.