web-dev-qa-db-fra.com

Pourquoi un fichier 7zipped est-il plus volumineux que le fichier raw?

Duplicate possible:
Pourquoi la compression Zip ne compresse-t-elle rien?

J'ai essayé 7zipping un fichier .exe, mais il est devenu plus gros.

enter image description here

Est-ce le résultat attendu?

37
IMB

Cela revient à un concept appelé entropie . Voir Wikipedia .

L’idée de base est que, s’il existait une opération de compression qui pouvait toujours rendre un fichier plus petit, la logique indique que cette opération de compression permettrait de réduire n’importe quel fichier à 0 octet et conserve toujours toutes les données. Mais c’est absurd , car nous savons que 0 octet ne peut transmettre aucune information. Nous venons donc de prouver qu’il n’existait pas un algorithme de compression qui rendait toujours son entrée plus petite, car si tel était le cas, toute information pourrait être stockée. en 0 octet - mais 0 octet implique le absence == de l'information, vous ne pouvez donc pas avoir simultanément no et all informations. C'est donc absurde.

En raison de ce concept théorique, chaque programme de compression que vous utilisez utilisera augmentation la taille de (ou au mieux, conservez la même taille) certains entrée. Autrement dit, pour tout algorithme de compression que vous concevez ou utilisez, certaines entrées seront plus petites et d’autres pas.

Les données déjà compressées sont généralement un très mauvais candidat pour une compression supplémentaire, car la plupart des algorithmes de compression sans perte reposent sur les mêmes principes théoriques. Cela est possible de compresser encore plus les données mal compressées; mais cela est moins efficace que de simplement le compresser avec le meilleur algorithme disponible à partir des données d'origine.

Par exemple, si vous avez un fichier texte de 100 Mo et que vous le compressez à l'aide de l'algorithme Zip standard, il risque d'être compressé à 50 Mo. Si vous compressez ensuite le fichier Zip avec LZMA2, vous pouvez le réduire à 40 ou 45 Mo, car LZMA a un taux de compression supérieur pour la plupart des données compressibles. Il va donc de soi qu'il peut également compresser les données Zip, car celui-ci n'en aspire pas toute l'entropie. Mais si vous éliminez complètement le conteneur Zip, vous pourrez peut-être le réduire encore plus en compressant le texte brut avec LZMA2, ce qui vous donnera potentiellement quelque chose de l'ordre de 30 à 35 Mo (ce ne sont que des "nombres aériens" pour illustrer le concept). .

Dans le cas du binaire que vous essayez de compresser, c’est plus grand == car le format de fichier 7-Zip doit créer sa propre structure interne et regrouper les données de l’exécutable déjà compressé. le format 7-Zip. Cela contient des choses comme un dictionnaire, un en-tête de fichier, etc. Ces données supplémentaires sont généralement plus que compensées par les économies réalisées grâce à la compression des données elles-mêmes, mais il semble que le fichier exécutable que vous essayez de compresser est déjà compressé avec une forme de LZMA; sinon, cela réduirait probablement la taille de l'exécutable ou l'augmenterait très légèrement, au lieu de l'augmenter de 2 Mo (ce qui est beaucoup).

76
allquixotic

Les algorithmes de compression sous-jacents utilisés dans 7z sont sans perte . Ce qui signifie que vous pouvez compresser/décompresser de façon itérative un fichier plusieurs fois. De plus, après chaque itération, le fichier restera exactement identique.

Malheureusement, vous ne pouvez pas vous attendre à ce qu'un algorithme de compression sans perte soit appliqué plusieurs fois avec toujours un résultat positif. Il y a une limite stricte sur laquelle il ne peut pas sauter. En gros, cette limite dépend de la proximité avec laquelle une séquence d'entrée définit des données aléatoires. Surtout, des algorithmes sans perte sont utilisés pour la compression de fichiers, les transferts de données HTML Internet, les sauvegardes et autres opérations qui supposent qu'un fichier de sortie soit décompressé dans exactement le même fichier d'entrée original.

Contrairement à la compression sans perte , vous pouvez toujours vous attendre à une diminution de la taille du fichier après compression avec lossful ( ou avec perte) des algorithmes de compression . L'inconvénient est que vous ne pouvez pas exactement restaurer un fichier d'origine après une seule itération compresser-décompresser. Ces algorithmes sont plus connus pour la transmission et le stockage d’audio/vidéo/image.

bzip2 , LZMA, LZMA2 et d’autres algorithmes utilisés par le format 7z sont tous sans perte . Par conséquent, il y aura une limite après laquelle il ne sera plus possible de compresser. De plus, les images exécutables (.exe) sont généralement des fichiers hautement compressés. 7Zip comme beaucoup d'autres outils de compression incorporent des métadonnées, qui peuvent en fait rendre le fichier de sortie plus gros.

Casse-tête: et si nous avions un algorithme sans perte qui peut toujours diminuer la taille d'un fichier?

Dans ce cas, vous verrez toujours que le fichier compressé est plus petit que le fichier d'entrée. Voir un commentaire ci-dessous pourquoi ce n'est pas possible.

7
oleksii

Si l'exécutable d'origine était déjà compressé (ou contenait des données fortement compressées ou des données non compressibles), sa compression augmentera la taille.

6
PhonicUK

La plupart des algorithmes de compression utilisent ce qu'on appelle une table de symboles, en gros juste des parties du fichier qu'il utilise en tant qu'éléments qu'il PEUT compresser. Ceci, bien sûr, crée une surcharge dans le fichier mais aboutit généralement à un fichier beaucoup plus petit.

Dans les fichiers déjà compressés, cela crée toujours un ensemble de symboles, mais il y a très peu de choses sur lesquelles on puisse réduire la taille. Dans votre cas, la table des symboles du fichier déjà compressé se situe probablement autour de 2 Mo ou plus si le fichier a été compressé.

2
Chad Harrison

l'idée de compression:

le logiciel de compression crée une liste de fichiers et élimine le contenu en double.

lors de la compression de fichiers déjà compressés, vous pouvez obtenir des fichiers compressés plus volumineux que l'original.

0
fromnaboo