Por que a compactação ZIP não compacta nada?

18

Um diretório de 398MB foi compactado apenas para 393MB usando a compactação 7Z e ZIP normal. Isso é normal? Se sim, por que as pessoas continuam usando o ZIP no Windows?

Thomas Owens
fonte

Respostas:

70

Se você estiver compactando coisas que já estão compactadas (AVI, JPEG, MP3), não ganhará muito além de compactar tudo em um único arquivo.

Chris Karcher
fonte
1
E eu já o vi operar ao contrário, fazendo com que o arquivo compactado fosse maior que os arquivos compactados individuais.
Fiasco Labs
32

A compactação trabalha procurando padrões repetitivos dentro dos itens para compactar. Também porque você não deseja perder dados enquanto compacta seus arquivos, a compactação deve ser sem perdas (*).
Agora, com isso em mente, pense na maneira como os arquivos (itens) são armazenados em um computador. No nível mais baixo, todos são apenas 0 e 1.

A questão pode ser transformada em: " Como posso representar um monte de 1 e 0 de maneira mais compacta que a representação original? "

Então, vamos começar do começo, como você pode compactar a representação normal de um único bit (um único 1 ou um único 0)?
A resposta é realmente fácil: você não pode! ... um único bit é representado da maneira mais compacta possível.

É justo, vamos dar um exemplo maior: como você comprimiria uma string binária como 0111 0111 0100 0111 ?
Bem, porque já sabemos que olhar para os bits individuais não vai nos ajudar, sabemos que temos que olhar em uma escala maior. Por exemplo, vamos pegar 4 bits de cada vez. Agora vemos que a cadeia binária "0111" ocorrerá 3 vezes no exemplo. Por que não representamos isso com um único bit: 0? mas isso ainda deixa 0100 no escuro, então vamos representar que com "1"
sabemos que compactamos o original para: "0010"

Isso é realmente bom! No entanto, este é apenas o básico do básico do "algoritmo de codificação Huffman" , e no mundo real será um pouco mais complicado do que isso (e você também precisará armazenar uma tabela com as informações de codificação, mas isso é uma longe demais para responder a essa pergunta).

Agora, para realmente responder à sua pergunta: por que todos os dados não podem ser compactados tão bem ?, vamos dar outro exemplo: "0001 0110 1000 1111", se usássemos a mesma técnica acima, não poderíamos comprimir os dados (nenhuma repetição é encontrada) e, portanto, não se beneficiaria da compactação ...


(*) existem obviamente exceções a esse respeito. O exemplo mais conhecido disso é a compactação usada para arquivos MP3. aqui, algumas informações sobre os sons serão perdidas durante a conversão do arquivo original bruto para o formato MP3; essa compactação é, portanto, com perdas . Outro exemplo é o formato .JPG para imagens

sven
fonte
6

O processo de compactação utiliza padrões repetitivos e os simboliza para padrões mais curtos. A saída é, na maioria das vezes, não repetível e, portanto, não pode ser comprimida por muito, se for o caso.

Spoulson
fonte
6

Na seção Limitações do artigo da Wikipedia sobre Compressão sem perdas :

Os algoritmos de compactação de dados sem perdas não podem garantir a compactação para todos os conjuntos de dados de entrada. Em outras palavras, para qualquer algoritmo de compactação de dados (sem perdas), haverá um conjunto de dados de entrada que não fica menor quando processado pelo algoritmo. Isso é facilmente comprovado com a matemática elementar usando um argumento de contagem. ...

Basicamente, é teoricamente impossível compactar todos os dados de entrada possíveis sem perdas.

Jared Updike
fonte
É mais difícil compactar dados que já foram compactados. Imagens, vídeos são na sua maioria comprimido uma vez que o tamanho original seria muito grande
phuclv
4

Isso é normal?

Não. Não com arquivos "normais". Que tipo de arquivos você estava compactando? Se eles já foram compactados, por exemplo, são JPGs, GIFs, PNGs, vídeos ou até outros arquivos zip, eles não serão muito compactados por nenhum algoritmo. Se você tentar compactar arquivos de texto, XML, BMP descompactado, código fonte etc., o zip fornecerá uma boa compactação, mas provavelmente não é o melhor absoluto.

Por que as pessoas continuam usando o ZIP no Windows?

Um dos motivos é que existe um bom manuseio de zip embutido no sistema - você pode clicar com o botão direito do mouse em qualquer lugar e criar um novo arquivo zip e soltar coisas nele. Você pode apenas clicar duas vezes em um arquivo zip e ele abre como uma pasta. Você pode copiar as coisas e às vezes até usá-las no lugar. Você não precisa instalar o WinZip, 7z ou qualquer outro programa. Eu geralmente recomendo que as pessoas não.

rjmunro
fonte
2

Em um arquivo zip contendo muitos arquivos, cada arquivo é compactado independentemente. Se houver muita semelhança entre os arquivos, uma ferramenta diferente poderá oferecer uma compressão muito melhor.

Por exemplo, tar.gz une os arquivos e compacta os resultados. Da mesma forma, um arquivo rar "sólido" faz uso de semelhanças entre arquivos.

A desvantagem do tar.gz ou de um rar sólido é que você não pode mais extrair um único arquivo de um arquivo grande sem descompactá-lo até o local desejado.

Stephen Denne
fonte