Por que um arquivo 7zipped é maior que o arquivo raw? [duplicado]

36

Eu tentei 7zipar um arquivo .exe, mas ele realmente ficou maior.

Este é o resultado esperado?

    
por IMB 21.08.2012 / 12:48

5 respostas

75

Tudo se resume a um conceito chamado entropia . Veja Wikipedia .

A ideia básica é que, se existisse uma operação de compactação que pudesse sempre tornar um arquivo menor, a lógica dita que essa operação de compactação seria capaz de reduzir qualquer arquivo a 0 bytes e ainda reter todos os dados. Mas isso é absurdo , porque sabemos que 0 bytes não podem transmitir nenhuma informação. Então acabamos de provar que não existe um algoritmo de compressão que sempre faça sua entrada menor, porque se fosse esse o caso, qualquer informação poderia ser armazenada em 0 bytes - mas 0 bytes implica o < em> ausência de informações, para que você não possa simultaneamente ter informações não e todas informações. Por isso, é um absurdo.

Devido a esse conceito teórico, todo programa de compactação que você usar vai aumentar o tamanho (ou na melhor das hipóteses, manter o mesmo tamanho) alguma entrada. Ou seja, para qualquer algoritmo de compactação que você projetar ou usar, haverá certas entradas que sairão menores e outras que não serão.

Os dados já compactados são geralmente um péssimo candidato para maior compactação, porque a maioria dos algoritmos de compactação sem perdas são baseados nos mesmos princípios teóricos. É possível compactar dados mal compactados ainda mais; mas isso é menos eficiente do que simplesmente compactá-lo com o algoritmo mais bem disponível dos dados originais para começar.

Por exemplo, se você tivesse um arquivo de texto de 100 MB e o compactasse usando o algoritmo Zip normal, ele poderia ser compactado para 50 MB. Se você compactar o arquivo Zip com o LZMA2, poderá obtê-lo em 40 ou 45 MB, porque o LZMA tem uma <>> maior taxa de compactação para a maioria dos dados compactáveis do que o Zip. Então, é lógico que ele também pode compactar dados Zip, porque o Zip não suga completamente a entropia dele. Mas se você eliminar o contêiner Zip completamente, você poderá diminuir ainda mais comprimindo o texto bruto com LZMA2, potencialmente gerando algo na ordem de 30 - 35 MB (esses são apenas "números de ar" para ilustrar o conceito) .

No caso do binário que você está tentando compactar, é maior porque o formato de arquivo 7-Zip precisa criar sua própria estrutura interna e compactar os dados do executável já compactado no diretório 7 Formato Zip. Isso contém coisas como um dicionário, um cabeçalho de arquivo e assim por diante. Esses dados extras são geralmente mais do que compensados pela economia de compactação dos dados em si, mas parece que o executável que você está tentando compactar já está compactado com alguma forma de LZMA; caso contrário, provavelmente diminuiria o tamanho do executável ou aumentaria muito pouco, em vez de aumentá-lo em 2 MB (o que é muito).

    
por 21.08.2012 / 15:30
7

Os algoritmos de compressão subjacentes usados em 7z são sem perdas . O que significa que você pode compactar de forma iterativa a descompactação de um arquivo várias vezes. Além disso, após cada iteração, o arquivo permanecerá exatamente o mesmo.

Infelizmente, você não pode esperar que um algoritmo de compressão sem perdas seja aplicado muitas vezes sempre com um resultado positivo. Há um limite estrito que não pode pular. Grosso modo, esse limite depende de quão perto uma seqüência de entrada agrupa dados aleatórios. Acima de tudo, os algoritmos sem perdas são usados para compactação de arquivos, transferências de dados HTML da Internet, backups e outras operações que esperam que um arquivo de saída seja descompactado exatamente no mesmo arquivo de entrada original.

Em contraste com a compactação lossless , você pode sempre esperar que a redução do tamanho do arquivo após a compactação seja algoritmos de compactação com perdas (ou com perdas) . O lado negativo é que você não pode exatamente restaurar um arquivo original após uma única compactação para descompactar a iteração. Esses algoritmos são mais famosos para transmissões e armazenamento de áudio / vídeo / imagem.

bzip2 , LZMA , LZMA2 e outros algoritmos usados pelo formato 7z são sem perdas . Portanto, haverá um limite após o qual ele não poderá mais compactar. Além disso, as imagens executáveis (.exe) geralmente são arquivos altamente compactados. 7zip como muitas outras ferramentas de compressão incorporam alguns metadados, o que de fato pode tornar o arquivo de saída maior.

Quebra-cabeças: e se tivéssemos um algoritmo sem perdas que sempre diminuísse o tamanho de um arquivo?

Nesse caso, você sempre verá que o arquivo compactado é menor que o arquivo de entrada. Veja um comentário abaixo porque não é possível.

    
por 21.08.2012 / 17:32
6

Se o executável original já tiver sido compactado (ou contiver dados altamente compactados ou dados não compressíveis), a compactação aumentará o tamanho.

    
por 21.08.2012 / 13:01
2

A maioria dos algoritmos de compactação usa o que é chamado de tabela de símbolos, basicamente apenas partes do arquivo usado como elementos que ele CAN compacta. Isso, é claro, cria alguma sobrecarga no arquivo, mas geralmente resulta em um arquivo muito menor.

Em arquivos já compactados, ele ainda cria um conjunto de símbolos, mas há muito pouco que pode ser reduzido no tamanho. No seu caso, a tabela de símbolos do arquivo já compactado provavelmente está na vizinhança de 2 MB ou, provavelmente, mais se ele conseguiu fazer alguma compactação.

    
por 21.08.2012 / 15:28
0

o ideea de compressão:

o software de compactação cria uma lista de arquivos e elimina o conteúdo duplicado.

ao compactar arquivos já compactados, você pode deixar seus arquivos compactados maiores que o original.

    
por 21.08.2012 / 15:20