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

Qual é a taxa de compressão máxima do gzip?

Qual é o maior tamanho a que um gzip (digamos 10kb para dar um exemplo) pode ser descomprimido?

Respostas (7)

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

Até 2020-02-06: Como mencionado nos comentários, não fui capaz de reproduzir o resultado original com gzip. Trabalhando no pressuposto de que utilizei acidentalmente um formato de compressão diferente naquele teste rápido original repeti com gzip e actualizei os números abaixo em conformidade. Este novo resultado concorda com a compressão máxima teórica indicada noutras respostas/comentários.


Depende muito de os dados serem comprimidos. Um teste rápido com um ficheiro de 1Gb cheio de zeros usando uma versão padrão de gzip (com opções padrão ou especificando -9) dá um tamanho comprimido de ~1018Kb, pelo que o seu ficheiro de 10Kb poderia potencialmente expandir-se para ~10Mbytes.

Se os dados tiverem baixa redundância para começar, por exemplo, o arquivo contém ficheiros de imagens num formato comprimido nativamente (gif, jpg, png, …), então o gzip pode não acrescentar qualquer compressão adicional. Para ficheiros binários como executáveis de programas poderá ver até compressão 2:1, para texto simples, HTML ou outras marcações 3:1 ou 4:1 ou mais não é improvável. Poderá ver 10:1 em alguns casos, mas o ~1030:1 visto com um ficheiro preenchido com um único símbolo é algo que não vai ver fora de circunstâncias igualmente artificiais.

Pode verificar quantos dados resultariam de desempacotar um ficheiro gzip, sem realmente escrever o seu conteúdo não comprimido em disco, com gunzip -c file.gz | wc --bytes - isto descomprimirá o ficheiro mas não armazenará os resultados, passando-os em vez disso para wc que contará o número de bytes à medida que passarem e depois os descartará. Se o conteúdo comprimido for um ficheiro de alcatrão contendo muitos pequenos ficheiros, poderá descobrir que é necessário bastante mais espaço em disco para desempacotar o arquivo completo, mas na maioria das circunstâncias, a contagem regressada da canalização gunzip através de wc vai ser tão precisa quanto for necessário.

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

Normalmente não se obtém mais de 95% de compressão (para que 10kB de dados gzipados descomprimissem para ~200kB), mas existem ficheiros especialmente trabalhados que se expandem exponencialmente. Procure 42.zip, descomprime a poucos petabytes de dados (sem significado).

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

Citado textualmente de https://stackoverflow.com/a/16794960/293815

A taxa de compressão máxima do formato deflacionado é de 1032:1. Isto porque a maior tiragem que pode ser codificada é de 258 bytes. São necessários pelo menos dois bits para cada execução (um bit para o código de comprimento e um bit para o código de distância), portanto 4*258 = 1032 bytes não comprimidos podem ser codificados por um byte comprimido.

Pode-se obter mais compressão através da gzipagem do resultado da gzip. Normalmente isso não melhora a compressão, mas por períodos muito longos pode.

A propósito, a abordagem LZ77 utilizada por deflacionar é mais geral do que a codificação em comprimento de execução. Em vez de apenas um comprimento, é utilizado um par comprimento/distância. Isto permite copiar uma corda de alguma distância para trás, ou replicar um byte como em comprimento de percurso para uma distância de um, ou replicar triplos de bytes com uma distância de três, etc.

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

A taxa de compressão de qualquer algoritmo de compressão será uma função dos dados a serem comprimidos (para além do comprimento desses dados).

Aqui está uma análise em MaximumCompression , Veja uma das amostras como, Resumo dos testes de referência de compressão de ficheiros múltiplos

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

Um ficheiro enorme contendo apenas um símbolo irá comprimir muito bem.

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

10 MB de zeros em ficheiro, comprimir com gzip -9 a 10217. Assim, a relação máxima parece ser de cerca de 1000x.

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

A resposta à sua pergunta, depende do input. Para lhe dar uma ideia de como é feita a compressão, veja estes vídeos de seis minutos. https://www.youtube.com/watch?v=ZdooBTdW5bM

O que deve obter dele é que a taxa de compressão depende da frequência de cada caracter, portanto não há taxa máxima generel, depende da entrada, para texto em inglês é cerca de 65 por cento.