Possível duplicata:
Por que a compactação ZIP não compacta nada?
Eu tentei compactar um arquivo .exe, mas ele ficou maior.
Esse é o resultado esperado?
Possível duplicata:
Por que a compactação ZIP não compacta nada?
Eu tentei compactar um arquivo .exe, mas ele ficou maior.
Esse é o resultado esperado?
Respostas:
Tudo se resume a um conceito chamado entropia . Veja Wikipedia .
A idéia básica é que, se existisse uma operação de compactação que sempre poderia reduzir um arquivo, a lógica ditaria que a operação de compactação seria capaz de reduzir qualquer arquivo a 0 bytes e ainda reter todos os dados. Mas isso é um absurdo , porque sabemos que 0 bytes não pode transmitir nenhuma informação. Acabamos de provar que não pode existir um algoritmo de compactação que sempre diminua sua entrada, porque, se esse fosse o caso, qualquer informação poderia ser armazenada em 0 bytes - mas 0 bytes implica a ausência de informações, então você pode ' t simultaneamente não tem informações e todas as informações. Por isso, é um absurdo.
Devido a esse conceito teórico, todo programa de compactação usado para aumentar o tamanho de (ou, na melhor das hipóteses, manter o mesmo tamanho de) alguma entrada. Ou seja, para qualquer algoritmo de compactação que você criar ou usar, haverá determinadas entradas que serão menores e outras que não.
Os dados já compactados geralmente são um péssimo candidato para a compactação adicional, porque a maioria dos algoritmos de compactação sem perdas são baseados nos mesmos princípios teóricos. Ele é possível comprimir dados mal-comprimidas ainda mais; 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 o LZMA2, poderá reduzi-lo para 40 ou 45 MB, porque o LZMA possui uma taxa de compactação mais alta para 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 absorve completamente toda a entropia deles. Mas se você eliminar completamente o contêiner Zip, poderá reduzi-lo ainda mais, compactando o texto bruto com LZMA2, produzindo algo na ordem de 30 a 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 do arquivo 7-Zip precisa criar sua própria estrutura interna e compactar os dados do executável já compactado no formato 7-Zip. Isso 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 de compactar os dados, 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 levemente, em vez de aumentá-lo em 2 MB (o que é muito).
2^(n+1)-1
possíveis mensagens de tamanho n bits ou menos. Nosso algoritmo deve mapear cada um deles para uma saída única . Se mesmo um deles for mapeado para um valor com menos bits, outro valor deverá necessariamente ser mapeado para um com mais.
Os algoritmos de compactação subjacentes usados em 7z são sem perdas . O que significa que você pode comprimir-descomprimir iterativamente 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 compactação sem perdas seja aplicado muitas vezes com sempre um resultado positivo. Há um limite estrito que não pode pular. Grosso modo, esse limite depende de quão intimamente 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.
Ao contrário da compactação sem perdas, você sempre pode esperar uma diminuição no tamanho do arquivo após a compactação com algoritmos de compactação com ou sem perdas . O lado negativo é que você não pode restaurar exatamente um arquivo original após uma única iteração de compactação-descompactação. Esses algoritmos são mais famosos pelas transmissões e armazenamento de áudio / vídeo / imagem.
bzip2 , LZMA , LZMA2 e outros algoritmos usados pelo formato 7z são todos 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. A ferramenta de compactação 7zip, como muitas outras, incorpora alguns metadados, que na verdade podem aumentar o arquivo de saída.
Nesse caso, você sempre verá que o arquivo compactado é menor que o arquivo de entrada. Veja um comentário abaixo por que não é possível.
A maioria dos algoritmos de compactação usa o que é chamado de tabela de símbolos, basicamente apenas partes do arquivo que ele usa como elementos que PODE compactar. Obviamente, isso 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 possa reduzir o tamanho. No seu caso, a tabela de símbolos do arquivo já compactado provavelmente tem cerca de 2 MB ou mais, se conseguir fazer alguma compactação.