59 votes

Quel est le taux de compression maximal de gzip ?

Quelle est la plus grande taille à laquelle un fichier gzip (disons 10kb pour le besoin d'un exemple) peut être décompressé ?

98voto

David Spillett Points 23094

<strong>Mise à jour 2020-02-06 : </strong>Comme mentionné dans les commentaires, je n'ai pas été en mesure de 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, j'ai répété avec gzip et mis à jour les chiffres ci-dessous en conséquence. Ce nouveau résultat correspond à la compression maximale théorique indiquée dans d'autres réponses/commentaires.


Cela dépend beaucoup des données à compresser. Un test rapide avec un fichier de 1 Go rempli de zéros utilisant une version standard de gzip (avec les options par défaut ou en spécifiant -9) donne une taille compressée de ~1018 Ko, donc votre fichier de 10 Ko pourrait potentiellement s'étendre en ~10 Mo.

Si les données sont peu redondantes au départ, par exemple si 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. Pour les fichiers binaires comme les exécutables de programmes, vous pouvez voir une compression allant jusqu'à 2:1, pour le texte brut, le HTML ou d'autres balises, 3:1 ou 4:1 ou plus n'est pas improbable. Vous pouvez voir 10:1 dans certains cas, mais les ~1030:1 observés avec un fichier rempli d'un seul symbole sont 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 réellement é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, les transmettant plutôt à 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 pouvez constater que le déballage complet de l'archive nécessite un espace disque nettement plus important, mais dans la plupart des cas, le nombre d'octets renvoyé par piping gunzip sortie par wc sera aussi précis que vous le souhaitez.

10voto

ioquatix Points 201

Cité textuellement dans https://stackoverflow.com/a/16794960/293815

Le taux de compression maximal du format deflate est de 1032:1. Cela s'explique par le fait que la plus longue série qui peut être encodée est de 258 octets. Au moins deux bits sont nécessaires pour chacun de ces parcours (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 une compression plus importante en gzippant le résultat de gzip. Normalement, cela n'améliore pas la compression, mais pour de très longues séries, c'est possible.

À propos, l'approche LZ77 utilisée par deflate est plus générale que le codage en longueur. Au lieu d'une simple longueur, une paire longueur/distance est utilisée. Cela permet de copier une chaîne de caractères à partir d'une certaine distance en arrière, ou de répliquer un octet comme dans le codage par longueur de course pour une distance de un, ou de répliquer des triples d'octets avec une distance de trois, etc.

9voto

liori Points 3178

En général, la compression ne dépasse pas 95 % (ainsi, des données gzippées de 10 Ko se décompressent en ~200 Ko), mais il existe des fichiers spécialement conçus qui se développent de manière exponentielle. Recherchez 42.zip il se décompresse en quelques pétaoctets de données (sans signification).

6voto

Mark Points 251

Le taux de compression de tout algorithme de compression sera fonction des données à comprimer (outre la longueur de ces données).

Voici une analyse à Compression maximale ,
Regardez l'un des échantillons comme,

Résumé des tests de référence de la compression de fichiers multiples

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

5voto

nikos Points 51

10 MB de zéros dans le fichier, compressez avec gzip -9 à 10217. Le rapport maximal semble donc être d'environ 1000x.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X