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

44

Qual é o maior tamanho que um gzip (digamos 10kb por exemplo) pode ser descompactado para?

    
por Zombies 09.05.2010 / 13:47

7 respostas

85

Depende muito dos dados que estão sendo compactados. Um teste rápido com um arquivo de 1Gb cheio de zeros dá um tamanho comprimido de ~ 120Kb, então seu arquivo de 10Kb pode potencialmente se expandir em ~ 85Mbytes.

Se os dados tiverem baixa redundância para começar, por exemplo, o arquivo contém arquivos de imagens em um formato que é compactado nativamente (gif, jpg, png, ...), então o gzip pode não adicionar mais compressão alguma. Para arquivos binários como programas executáveis, você pode ver até 2: 1 de compressão, para texto simples, HTML ou outras marcações 3: 1 ou 4: 1 ou mais não é improvável. Você pode ver 10: 1 em alguns casos, mas o ~ 8700: 1 visto com um arquivo preenchido com um único símbolo é algo que você não verá em circunstâncias similares artificialmente.

Você pode verificar quantos dados resultariam da descompactação de um arquivo gzip, sem realmente gravar seu conteúdo descompactado no disco, com gunzip -c file.gz | wc --bytes - isso descompactará o arquivo, mas não armazenará os resultados, passando-os para wc , que contará o número de bytes conforme eles passam e, em seguida, os descartará. Se o conteúdo compactado for um arquivo tar contendo muitos arquivos pequenos, você poderá perceber que é necessário mais espaço em disco para descompactar o archive completo, mas na maioria das circunstâncias, a contagem retornada do piping gunzip output através de wc será tão preciso quanto você precisa.

    
por 09.05.2010 / 15:11
10

Geralmente, você não obtém mais de 95% de compactação (para que os dados de 10kB gzipped sejam descompactados para ~ 200kB), mas há arquivos especialmente criados que se expandem exponencialmente. Procure por 42.zip , ele descomprime para poucos petabytes de dados (sem sentido).

    
por 09.05.2010 / 14:04
6

Citações verbais de link

A taxa de compressão máxima do formato de esvaziamento é de 1032: 1. Isso ocorre porque a execução mais longa que pode ser codificada é de 258 bytes. Pelo menos dois bits são necessários 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 compactados podem ser codificados por um byte compactado.

Você pode obter mais compactação gzipando o resultado do gzip. Normalmente, isso não melhora a compactação, mas para execuções muito longas pode.

A propósito, a abordagem LZ77 usada por deflate é mais geral que a codificação de comprimento de execução. Em vez de apenas um comprimento, um par comprimento / distância é usado. Isso permite copiar uma string de uma certa distância, ou replicar um byte como em comprimento de execução por uma distância de um, ou replicar triplos de bytes com uma distância de três, etc.

    
por 11.05.2017 / 16:16
5

A taxa de compressão de qualquer algoritmo de compressão será uma função dos dados que estão sendo compactados (além do comprimento desses dados).

Aqui está uma análise em MaximumCompression ,
Olhe para uma das amostras como,

Resumo dos vários testes de benchmark de compactação de arquivos

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
    
por 09.05.2010 / 14:03
4

Um arquivo enorme contendo apenas um símbolo será compactado muito bem.

    
por 09.05.2010 / 14:44
3

10 MB de zeros no arquivo, compactados com gzip -9 a 10217. Portanto, a taxa máxima parece estar em torno de 1.000x.

    
por 07.04.2013 / 15:12
1

A resposta para sua pergunta depende da entrada. Para ter uma ideia de como a compressão é feita, assista a esses vídeos de seis minutos.

link

O que você deve obter é que a taxa de compressão depende da freqüência de cada personagem, portanto, não há taxa máxima de geração, depende da entrada, para o texto em inglês é de cerca de 65%.

    
por 17.10.2016 / 04:32