Quelle est la plus grande taille à laquelle un gzip (disons 10 Ko pour un exemple) peut être décompressé?
Quelle est la plus grande taille à laquelle un gzip (disons 10 Ko pour un exemple) peut être décompressé?
Réponses:
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 peut ne pas ajouter de 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 vu 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é sur le disque, avec gunzip -c file.gz | wc --bytes
- ceci décompresse le fichier mais ne stocke pas les résultats, mais les passe à la place, wc
qui compte le nombre d'octets à leur passage. puis les jeter. 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, mais dans la plupart des cas, le nombre renvoyé par la gunzip
sortie de la tuyauterie wc
est aussi précis que nécessaire.
phpinfo()
, compresse très bien. Les informations techniques contenues dans cette sortie contiennent également plus de répétitions directes que le bloc moyen du langage naturel, et la distribution de l'alphabet est probablement moins lisse, ce qui pourrait aider l'étape Huffman à obtenir de meilleurs résultats.
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 manière exponentielle. Recherchez 42.zip
, il décompresse en quelques pétaoctets de données (sans signification).
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 de ce type (un bit pour le code de longueur et un bit pour le code de distance). Par conséquent, 4 * 258 = 1032 octets non compressés peuvent être codé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 ou de répliquer un octet comme dans la longueur d'une ligne, 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 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) Nombre de fichiers à compresser dans ce test: 510 Taille totale du fichier (octets): 316.355.757 Taille moyenne du fichier (octets): 620 305 Le plus grand fichier (octets): 18 403 071 Le plus petit fichier (octets): 3 554
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%.