web-dev-qa-db-fra.com

Quel est le taux de compression maximal de gzip?

Quelle est la plus grande taille à laquelle un gzip (disons 10 Ko pour un exemple) peut être décompressé?

46
Zombies

Cela dépend beaucoup des données compressées. Un test rapide avec un fichier de 1 Go rempli de zéros donne une taille compressée d’environ 120 Ko, de sorte que votre fichier de 10 Ko pourrait potentiellement être étendu à environ 85 Mo.

Si, par exemple, les données ont une faible redondance, par exemple, l’archive contient des fichiers d’images dans un format compressé nativement (gif, jpg, png, ...), gzip n’ajoutera aucune compression supplémentaire. Pour les fichiers binaires tels que les exécutables de programme, vous pouvez voir une compression allant jusqu'à 2: 1, pour le texte brut, HTML ou autres balises, 3: 1 ou 4: 1 ou plus n'est pas improbable. Vous pouvez voir 10: 1 dans certains cas, mais le ~ 8700: 1 avec un fichier contenant un seul symbole est quelque chose que vous n'allez pas voir en dehors de circonstances aussi artificielles.

Vous pouvez vérifier la quantité de données résultant de la décompression d'un fichier gzip, sans écrire réellement son contenu non compressé, avec gunzip -c file.gz | wc --bytes - ceci décompresse le fichier mais ne stocke pas les résultats, mais les transmet à wc qui comptera le nombre d'octets ils passent puis les jettent. Si le contenu compressé est un fichier tar contenant un grand nombre de petits fichiers, vous constaterez qu'il faut nettement plus d'espace disque pour décompresser l'archive complète. Toutefois, dans la plupart des cas, le nombre renvoyé de la tuyauterie gunzip sortie par wc sera aussi précis avoir besoin.

85
David Spillett

En règle générale, la compression ne dépasse pas 95% (de sorte que les données compressées compressées à 10 Ko compressées à environ 200 Ko), mais il existe des fichiers spécialement conçus qui se développent de façon exponentielle. Recherchez 42.Zip, il décompresse en quelques pétaoctets de données (sans signification).

10
liori

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

Le taux de compression maximal du format Deflate est 1032: 1. En effet, la plus longue exécution pouvant être codée est de 258 octets. Au moins deux bits sont nécessaires pour chaque exécution (un bit pour le code de longueur et un bit pour le code de distance), ce qui permet de coder 4 * 258 = 1032 octets non compressés par octet compressé.

Vous pouvez obtenir plus de compression en compressant le résultat de gzip. Normalement, cela n'améliore pas la compression, mais pour de très longues durées, c'est possible.

En passant, l'approche LZ77 utilisée par deflate est plus générale que le codage par longueur. Au lieu d'une longueur, une paire longueur/distance est utilisée. Cela permet de copier une chaîne depuis une certaine distance, de répliquer un octet comme dans la longueur d'un chemin, de répliquer des triples d'octets avec une distance de trois, etc.

8
ioquatix

Le taux de compression de tout algorithme de compression dépend des données compressées (en plus de la longueur de ces données).

Voici une analyse à MaximumCompression ,
Regardez un des échantillons comme:

Résumé des tests d'évaluation de la compression de plusieurs fichiers

Type de fichier: Plusieurs types de fichiers (46 au total) 
 # De fichiers à compresser dans ce test: 510 
 Taille totale du fichier (octets): 316.355.757 
 Taille moyenne du fichier ( octets): 620,305 
 Fichier le plus grand (octets): 18.403.071 
 Fichier le plus petit (octets): 3 554 
5
nik

Un fichier énorme contenant un seul symbole se compresse très bien.

4
geek

10 Mo de zéros dans le fichier, compresser avec gzip -9 à 10217. Le rapport maximal semble donc être autour de 1000x.

4
nikos

La réponse à votre question dépend de l'entrée. Pour vous donner une idée de la compression, regardez ces vidéos de six minutes.

https://www.youtube.com/watch?v=ZdooBTdW5bM

Ce que vous devriez en déduire, c'est que le taux de compression dépend de la fréquence de chaque caractère. Il n'y a donc pas de fréquence maximale, cela dépend de l'entrée. Pour le texte anglais, il est d'environ 65%.

1
brunsgaard