Pourquoi la compression ZIP ne compresse-t-elle rien?

18

Un répertoire de 398 Mo n'a été compressé qu'en 393 Mo en utilisant la compression 7Z et la compression ZIP normale. Est-ce normal? Si oui, pourquoi les gens continuent-ils à utiliser ZIP sous Windows?

Thomas Owens
la source

Réponses:

70

Si vous compressez des choses déjà compressées (AVI, JPEG, MP3), vous ne gagnerez pas grand-chose d'autre que de tout emballer dans un seul fichier.

Chris Karcher
la source
1
Et je l'ai même vu fonctionner en sens inverse, ce qui fait que l'archive compressée est plus grande que les fichiers compressés individuels.
Fiasco Labs
32

La compression fonctionne en recherchant des motifs répétitifs à l'intérieur des éléments à compresser. De plus, comme vous ne voulez pas perdre de données lors de la compression de vos fichiers, la compression doit être sans perte (*).
Maintenant, avec cela dans votre tête, pensez à la façon dont les fichiers (éléments) sont stockés sur un ordinateur. Au niveau le plus bas, ce ne sont que des tas de 0 et de 1.

La question peut donc être transformée en: " Comment puis-je représenter un tas de 1 et de 0 de manière plus compacte que la représentation d'origine? "

Commençons donc par le début, comment pouvez-vous compacter la représentation normale d'un seul bit (un seul 1 ou un seul 0)?
La réponse est vraiment simple: vous ne pouvez pas! ... un seul bit est représenté de la manière la plus compacte possible.

Assez juste, prenons un exemple plus grand, comment compresseriez-vous une chaîne binaire comme 0111 0111 0100 0111 ?
Eh bien parce que nous savons déjà que regarder les bits individuels ne nous aidera pas du tout, nous savons que nous devons regarder à plus grande échelle. Par exemple, prenons 4 bits à la fois. Nous voyons maintenant que la chaîne binaire "0111" se produira 3 fois dans l'exemple, alors pourquoi ne représentons-nous pas cela avec un seul bit: 0? mais cela laisse toujours 0100 dans le noir, alors représentons cela avec "1"
Nous savons que nous avons compressé l'original en: "0010"

C'est vraiment bon! Cependant, ce n'est que la base des bases de "l'algorithme de codage Huffman" , et dans le monde réel, ce sera un peu plus compliqué que cela (et vous auriez également besoin de stocker une table contenant les informations de codage, mais c'est un peu à loin pour avoir répondu à cette question).

Maintenant, pour vraiment répondre à votre question: pourquoi toutes les données ne peuvent-elles pas être compressées aussi bien?, Prenons un autre exemple: "0001 0110 1000 1111", si nous utilisions la même technique que ci-dessus, nous ne serions pas en mesure de compresser les données (aucune répétition n'est trouvée), et ne bénéficierait donc pas de la compression ...


(*) il y a bien sûr des exceptions à ce sujet. L'exemple le plus connu est la compression utilisée pour les fichiers MP3. ici quelques informations sur les sons seront perdues lors de la conversion du fichier brut, original, au format MP3, cette compression est donc avec perte . Un autre exemple est le format .JPG pour les images

sven
la source
6

Le processus de compression prend des motifs répétables et les symbolise en motifs plus courts. La sortie est alors en grande partie non répétable et ne peut donc pas être compressée par beaucoup, voire pas du tout.

spoulson
la source
6

Dans la section Limitations de l'article Wikipedia sur la compression sans perte :

Les algorithmes de compression de données sans perte ne peuvent pas garantir la compression pour tous les ensembles de données d'entrée. En d'autres termes, pour tout algorithme de compression de données (sans perte), il y aura un ensemble de données d'entrée qui ne diminue pas lorsqu'il est traité par l'algorithme. Ceci est facilement prouvé avec les mathématiques élémentaires en utilisant un argument de comptage. ...

Fondamentalement, il est théoriquement impossible de compresser toutes les données d'entrée possibles sans perte.

Jared Updike
la source
Il est plus difficile de compresser des données déjà compressées. Les images, les vidéos sont principalement compressées car la taille d'origine serait très grande
phuclv
4

Est-ce normal?

Non. Pas avec des fichiers "normaux". Quel type de fichiers compressiez-vous? S'ils étaient déjà compressés, par exemple des fichiers JPG, GIF, PNG, des vidéos ou même d'autres fichiers zip, ils ne seront pas beaucoup compressés par aucun algorithme. Si vous essayez de compresser des fichiers texte, XML, BMP non compressés, code source, etc., zip fournira une bonne compression, mais probablement pas la meilleure.

Pourquoi les gens continuent-ils à utiliser ZIP sous Windows?

L'une des raisons est qu'il y a une bonne gestion de zip intégrée au système - vous pouvez cliquer avec le bouton droit n'importe où et créer un nouveau fichier zip, puis y déposer des éléments. Vous pouvez simplement double-cliquer sur un fichier zip et il s'ouvre comme un dossier. Vous pouvez en copier des éléments et parfois même les utiliser sur place. Vous n'avez pas besoin d'installer WinZip ou 7z ou tout autre programme. Je recommande généralement aux gens de ne pas le faire.

rjmunro
la source
2

Dans une archive zip contenant de nombreux fichiers, chaque fichier est compressé indépendamment. S'il y a beaucoup de similitudes entre les fichiers, alors un outil différent pourrait donner une bien meilleure compression.

Par exemple, tar.gz joint les fichiers ensemble, puis compresse les résultats. De même, un fichier rar "solide" utilise des similitudes entre les fichiers.

L'inconvénient de tar.gz ou d'une rar solide est que vous ne pouvez plus extraire un seul fichier d'une grande archive sans décompresser l'archive jusqu'à l'endroit où se trouve le fichier souhaité.

Stephen Denne
la source