Por que um arquivo 7zipado é maior que o arquivo bruto?

Por que um arquivo 7zipado é maior que o arquivo bruto?

Possível duplicata:
Por que a compactação ZIP não compacta nada?

Tentei 7zipar um arquivo .exe, mas na verdade ele ficou maior.

insira a descrição da imagem aqui

Este é o resultado esperado?

Responder1

Tudo se resume a um conceito chamadoentropia. VerWikipédia.

A ideia básica é que, se existisse uma operação de compressão que pudessesempretornar um arquivo menor, então a lógica dita que a referida 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 existenão pode existirum algoritmo de compressão que sempre diminui sua entrada, porque se fosse esse o caso, qualquer informação poderia ser armazenada em 0 bytes - mas 0 bytes implica oausênciade informações, então você não pode ter simultaneamentenãoinformação etodosInformação. Portanto, é um absurdo.

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

Dados já compactados geralmente são péssimos candidatos para compactação adicional, porque a maioria dos algoritmos de compactação sem perdas são baseados nos mesmos princípios teóricos. Istoéé possível compactar ainda mais dados mal compactados; mas isso é menos eficiente do que simplesmente compactá-lo com o melhor algoritmo disponível a partir dos dados originais.

Por exemplo, se você tiver um arquivo de texto de 100 MB e compactá-lo usando o algoritmo Zip normal, ele poderá ser compactado para 50 MB. Se você compactar o arquivo Zip com LZMA2, poderá reduzi-lo para 40 ou 45 MB, porque o LZMA tem ummaior taxa de compressãopara a maioria dos dados compactáveis ​​do que o Zip. Portanto, é lógico que ele também pode compactar dados Zip, porque o Zip não suga completamente toda a entropia deles. Mas se você eliminar totalmente o contêiner Zip, poderá reduzi-lo ainda mais compactando o texto bruto com LZMA2, potencialmente rendendo algo na ordem de 30 a 35 MB (esses são apenas "números aéreos" para ilustrar o conceito) .

No caso daquele binário que você está tentando compactar, émaiorporque o formato de arquivo 7-Zip precisa criar sua própria estrutura interna e compactar os dados do executável já compactado no formato 7-Zip. Contém coisas como um dicionário, um cabeçalho de arquivo e assim por diante. Esses dados extras geralmente são mais do que compensados ​​pela economia da 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 ligeiramente, em vez de aumentá-lo em 2 MB (o que é muito).

Responder2

Os algoritmos de compressão subjacentes usados ​​em 7z sãosem perdas. O que significa que você pode compactar e descompactar iterativamente um arquivo várias vezes. Além disso, após cada iteração o arquivo permaneceráexatamenteo mesmo.

Infelizmente, você não pode esperar umsem perdasalgoritmo de compressão seja aplicado muitas vezes com sempre um resultado positivo. Existe um limite estrito que ele não pode ultrapassar. Grosso modo, esse limite depende de quão próximo uma sequência de entrada agrupa dados aleatórios. Acima de tudo, 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 comsem perdascompactação, você sempre pode esperar uma diminuição no tamanho do arquivo após a compactação comalgoritmos de compactação com perdas (ou com perdas). A desvantagem é que você não podeexatamenterestaurar um arquivo original após uma única iteração de compactação-descompactação. Esses algoritmos são mais famosos para transmissões e armazenamento de áudio/vídeo/imagem.

bzip2,LZMA,LZMA2e outros algoritmos usados ​​por7zformato são todossem perdas. Portanto, haverá um limite após o qual ele não poderá mais ser compactado. Além disso, imagens executáveis ​​(.exe) geralmente são arquivos altamente compactados.7zipcomo muitas outras ferramentas de compactação, incorpora alguns metadados, o que na verdade pode aumentar o arquivo de saída.

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

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

Responder3

Se o executável original já estiver compactado (ou contiver dados altamente compactados ou não compactáveis), compactá-lo aumentará o tamanho.

Responder4

a ideia compactada:

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

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

informação relacionada