2010-05-09 11:47:14 +0000 2010-05-09 11:47:14 +0000
53
53

Qual è il rapporto di compressione massimo di gzip?

Qual è la più grande dimensione a cui un gzip (diciamo 10kb per un esempio) può essere decompresso?

Risposte (7)

95
95
95
2010-05-09 13:11:52 +0000

Aggiornamento 2020-02-06: Come menzionato nei commenti, non sono stato in grado di riprodurre il risultato originale con gzip. Lavorando sul presupposto che ho accidentalmente usato un formato di compressione diverso in quel test veloce originale ho ripetuto con gzip e aggiornato le cifre qui sotto di conseguenza. Questo nuovo risultato concorda con la compressione massima teorica indicata in altre risposte/commenti.


Dipende molto dai dati da comprimere. Un rapido test con un file da 1Gb pieno di zeri usando una versione standard di gzip (con opzioni predefinite o specificando -9) dà una dimensione compressa di ~1018Kb, quindi il tuo file da 10Kb potrebbe potenzialmente espandersi in ~10Mbyte.

Se i dati hanno una bassa ridondanza di partenza, per esempio, l'archivio contiene file di immagini in un formato che è compresso nativamente (gif, jpg, png, …), allora gzip potrebbe non aggiungere ulteriore compressione. Per i file binari come i programmi eseguibili potresti vedere una compressione fino a 2:1, per il testo semplice, HTML o altri markup non è improbabile una compressione di 3:1 o 4:1 o più. Potreste vedere 10:1 in alcuni casi, ma il ~1030:1 visto con un file pieno di un singolo simbolo è qualcosa che non vedrete al di fuori di circostanze similmente artificiali.

Potete controllare quanti dati risulterebbero dal decomprimere un file gzip, senza effettivamente scrivere il suo contenuto non compresso sul disco, con gunzip -c file.gz | wc --bytes - questo decomprimerà il file ma non memorizzerà i risultati, passandoli invece a wc che conterà il numero di byte al loro passaggio e poi li scarterà. Se il contenuto compresso è un file tar che contiene molti molti piccoli file, potreste scoprire che è richiesto molto più spazio su disco per decomprimere l'intero archivio, ma nella maggior parte delle circostanze, il conteggio restituito dal piping gunzip in uscita attraverso wc sarà accurato quanto vi serve.

10
10
10
2010-05-09 12:04:29 +0000

Di solito non si ottiene più del 95% di compressione (così che 10kB di dati gzippati si decomprimono a ~200kB), ma ci sono file appositamente creati che si espandono esponenzialmente. Cercate 42.zip, si decomprime a pochi petabyte di dati (senza senso).

8
8
8
2017-05-11 14:16:39 +0000

Citato testualmente da https://stackoverflow.com/a/16794960/293815

Il massimo rapporto di compressione del formato deflate è 1032:1. Questo perché la corsa più lunga che può essere codificata è di 258 byte. Almeno due bit sono richiesti per ogni corsa di questo tipo (un bit per il codice di lunghezza e un bit per il codice di distanza), quindi 4*258 = 1032 byte non compressi possono essere codificati per un byte compresso.

Si può ottenere una maggiore compressione gzippando il risultato di gzip. Normalmente questo non migliora la compressione, ma per le tirature molto lunghe può farlo.

A proposito, l'approccio LZ77 usato da deflate è più generale della codifica run-length. Invece di una semplice lunghezza, viene usata una coppia lunghezza/distanza. Questo permette di copiare una stringa da una certa distanza indietro, o replicare un byte come in run-length per una distanza di uno, o replicare triple di byte con una distanza di tre, ecc.

6
6
6
2010-05-09 12:03:51 +0000

Il rapporto di compressione di qualsiasi algoritmo di compressione sarà una funzione dei dati da comprimere (oltre alla lunghezza di quei dati).

Qui c'è un'analisi a MaximumCompression , Guarda uno dei campioni come, Sintesi dei test di benchmark sulla compressione di più file

File type : Multiple file types (46 in total) # of files to compress in this test : 510 Total File Size (bytes) : 316.355.757 Average File Size (bytes) : 620,305 Largest File (bytes) : 18,403,071 Smallest File (bytes) : 3,554
4
4
4
2010-05-09 12:44:19 +0000

Un file enorme che contiene solo un simbolo si comprime molto bene.

4
4
4
2013-04-07 13:12:41 +0000

10 MB di zeri nel file, comprimere con gzip -9 a 10217. Quindi il rapporto massimo sembra essere intorno a 1000x.

1
1
1
2016-10-17 02:32:42 +0000

La risposta alla tua domanda, dipende dall'input. Per darti un'idea di come viene fatta la compressione guarda questo video di sei minuti. https://www.youtube.com/watch?v=ZdooBTdW5bM

Quello che dovresti capire è che il tasso di compressione dipende dalla frequenza di ogni carattere, quindi non c'è un tasso massimo generalizzato, dipende dall'input, per il testo inglese è circa il 65%.