Perché la compressione ZIP non comprime nulla?


18

Una directory da 398 MB è stata compressa solo a 393 MB utilizzando la compressione ZIP 7Z e Normal. È normale? In tal caso, perché le persone continuano a utilizzare ZIP su Windows?

Risposte:


70

Se stai comprimendo cose che sono già compresse (AVI, JPEG, MP3), non otterrai molto altro che comprimere tutto in un singolo file.


1
E l'ho anche visto funzionare al contrario, causando l'archiviazione dell'archivio compresso più grande dei singoli file compressi.
Fiasco Labs,

32

La compressione funziona cercando modelli ripetitivi all'interno degli oggetti da comprimere. Inoltre, poiché non si desidera perdere alcun dato durante la compressione dei file, la compressione deve essere senza perdita di dati (*).
Ora, con quello nella parte posteriore della testa, pensa al modo in cui i file (elementi) sono memorizzati su un computer. Al livello più basso, sono tutti solo un gruppo di 0 e 1.

La domanda può quindi essere trasformata in: " Come posso rappresentare un gruppo di 1 e 0 in un modo più compatto rispetto alla rappresentazione originale? "

Quindi partiamo dall'inizio, come puoi compattare la normale rappresentazione di un singolo bit (un singolo 1 o un singolo 0)?
La risposta è davvero semplice: non puoi! ... un singolo bit è rappresentato nel modo più compatto possibile.

Abbastanza giusto, facciamo un esempio più grande, come comprimeresti una stringa binaria come 0111 0111 0100 0111 ?
Bene, poiché sappiamo già che guardare i singoli bit non ci aiuterà affatto, sappiamo che dobbiamo guardare su una scala più ampia. Ad esempio, prendiamo 4 bit alla volta. Ora vediamo che la stringa binaria "0111" si verificherà 3 volte nell'esempio, quindi perché non lo rappresentiamo con un singolo bit: 0? ma questo lascia ancora 0100 al buio, quindi rappresentiamo che con "1"
Sappiamo di aver compresso l'originale in: "0010"

È davvero buono! Tuttavia questa è solo la base delle basi dell ' "algoritmo di codifica Huffman" , e nel mondo reale sarà un po' più complicato di così (e avresti anche bisogno di memorizzare una tabella con le informazioni di codifica in essa, ma è un un po 'troppo lontano per rispondere a questa domanda).

Ora per rispondere davvero alla tua domanda: perché non è possibile comprimere tutti i dati così bene? Bene, facciamo un altro esempio: "0001 0110 1000 1111", se utilizzassimo la stessa tecnica di cui sopra non saremmo in grado di comprimere i dati (non viene trovata alcuna ripetizione) e quindi non trarrebbe beneficio dalla compressione ...


(*) Ci sono ovviamente delle eccezioni al riguardo. L'esempio più noto di ciò è la compressione utilizzata per i file MP3. qui alcune informazioni sui suoni andranno perse durante la conversione dal file originale non elaborato al formato MP3, questa compressione è quindi in perdita . Un altro esempio è il formato .JPG per le immagini


6

Il processo di compressione prende schemi ripetibili e li tokenizza a schemi più brevi. L'output è quindi per lo più non ripetibile e quindi non può essere compresso da molto, se non del tutto.


6

Dalla sezione Limitazioni dell'articolo di Wikipedia sulla compressione senza perdita :

Gli algoritmi di compressione dei dati senza perdita di dati non possono garantire la compressione per tutti i set di dati di input. In altre parole, per qualsiasi algoritmo di compressione dei dati (senza perdita di dati), ci sarà un set di dati di input che non sarà più piccolo quando elaborato dall'algoritmo. Questo è facilmente dimostrato con la matematica elementare usando un argomento di conteggio. ...

Fondamentalmente, è teoricamente impossibile comprimere tutti i possibili dati di input senza perdita.


È più difficile comprimere i dati che erano già compressi. Immagini, video sono per lo più compressi poiché le dimensioni originali sarebbero molto grandi
phuclv

4

È normale?

No. Non con file "normali". Che tipo di file stavi comprimendo? Se sono già stati compressi, ad esempio sono JPG, GIF, PNG, video o anche altri file zip, allora non saranno compressi molto da nessun algoritmo. Se provi a comprimere file di testo, XML, BMP non compressi, codice sorgente, ecc., Zip fornirà una buona compressione, ma probabilmente non il migliore in assoluto.

Perché le persone continuano a utilizzare ZIP su Windows?

Uno dei motivi è che esiste una buona gestione zip integrata nel sistema: puoi fare clic con il pulsante destro del mouse ovunque e creare un nuovo file zip, quindi rilasciarlo. Puoi semplicemente fare doppio clic su un file zip e si apre come una cartella. Puoi copiare roba da esso e talvolta persino usarla sul posto. Non è necessario installare WinZip o 7z o altri programmi. Di solito consiglio alle persone di no.


2

In un archivio zip contenente molti file, ogni file viene compresso in modo indipendente. Se esiste una grande somiglianza tra i file, uno strumento diverso potrebbe fornire una compressione molto migliore.

Ad esempio, tar.gz unisce i file, quindi comprime i risultati. Allo stesso modo un file rar "solido" fa uso di somiglianze tra i file.

Il rovescio della medaglia di tar.gz o di un solido rar è che non è più possibile estrarre un singolo file da un archivio di grandi dimensioni senza decomprimere l'archivio fino a dove si trova il file desiderato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.