Dupliquer possible:
Pourquoi ZIP Compression ne compresse-t-il rien?
J'ai essayé 7zipping un fichier .exe, mais il est devenu plus gros.
Est-ce le résultat attendu?
Dupliquer possible:
Pourquoi ZIP Compression ne compresse-t-il rien?
J'ai essayé 7zipping un fichier .exe, mais il est devenu plus gros.
Est-ce le résultat attendu?
Réponses:
Cela revient à un concept appelé entropie . Voir Wikipédia .
L’idée de base est que, s’il existait une opération de compression qui pourrait toujours rendre un fichier plus petit, la logique indique que ladite opération de compression pourra réduire tout fichier à 0 octet tout en conservant toutes les données. Mais c'est absurde , car nous savons que 0 octet ne peut transmettre aucune information. Donc, nous venons de prouver qu'il y ne peut pas exister un algorithme de compression qui rend toujours son entrée plus petite, car si tel était le cas, toute information pourrait être stockée dans 0 octet - mais 0 octet implique la absence de l'information, de sorte que vous ne pouvez pas avoir simultanément non l'information et tout information. C'est donc absurde.
En raison de ce concept théorique, chaque programme de compression que vous utilisez jamais va augmenter la taille de (ou au mieux, maintenir la même taille de) certains contribution. 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. Il 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 pourrez le réduire à 40 ou 45 Mo, car LZMA a une taux de compression plus élevé pour la plupart des données compressibles que Zip fait. 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 pourrait générer un résultat de l'ordre de 30 à 35 Mo (il ne s'agit que de "numéros de téléphone" pour illustrer le concept). .
Dans le cas de ce binaire que vous essayez de compresser, il est plus grand car le format de fichier 7-Zip doit créer sa propre structure interne et compresser les données de l'exécutable déjà compressé au 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 l'exécutable que vous essayez de compresser soit déjà compressé avec une forme de LZMA; sinon, cela réduirait probablement la taille de l'exécutable ou l'augmenterait légèrement, plutôt que de l'augmenter de 2 Mo (ce qui est beaucoup).
2^(n+1)-1
messages possibles de taille n-bits ou moins. Notre algorithme doit mapper chacun de ceux-ci à un unique sortie. Si même l'un d'entre eux est mappé sur une valeur avec moins de bits, une autre valeur doit nécessairement être mappée sur une valeur avec plus.
Les algorithmes de compression sous-jacents utilisés dans 7z sont sans perte . Ce qui signifie que vous pouvez compresser / décompresser de manière itérative un fichier plusieurs fois. De plus, après chaque itération, le fichier restera exactement le même.
Malheureusement, vous ne pouvez pas vous attendre à un sans perte algorithme de compression être 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. Avant tout, 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 nécessitant qu'un fichier de sortie soit décompressé dans le même fichier d'entrée original.
Contrairement à sans perte compression, vous pouvez toujours vous attendre à une diminution de la taille du fichier après compression avec algorithmes de compression avec perte (ou avec perte) . 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 particulièrement connus pour les transmissions et stockage audio / vidéo / image.
bzip2 , LZMA , LZMA2 et d'autres algorithmes utilisés par 7z format sont tous sans perte . Par conséquent, il y aura une limite après laquelle il ne pourra plus se compresser. De plus, les images exécutables (.exe) sont généralement des fichiers fortement compressés. 7zip Comme beaucoup d’autres outils de compression, certaines métadonnées sont incorporées, ce qui peut en fait rendre le fichier de sortie plus volumineux.
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.
La plupart des algorithmes de compression utilisent ce que l’on appelle une table de symboles, c’est-à-dire des parties du fichier qu’il utilise comme éléments. POUVEZ compresse. 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 qui peuvent 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é.