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

17

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

    
por Thomas Owens 31.08.2008 / 00:16

6 respostas

69

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

    
por 31.08.2008 / 00:18
31

A compactação funciona procurando padrões repetitivos nos itens a serem compactados. Além disso, como você não quer perder nenhum dado ao compactar seus arquivos, a compactação deve ser lossless (*).
Agora, com isso na parte de trás da sua cabeça, pense na maneira como os arquivos (itens) são armazenados em um computador. No nível mais baixo, eles são apenas um monte de 0s e 1s.

A questão pode, assim, ser transformada em: " Como posso representar um grupo de 1s e 0s de uma forma 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 as partes individuais não nos ajudará, sabemos que temos que olhar para 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, então por que não representamos isso com um único bit: 0? mas isso ainda deixa 0100 no escuro, então vamos representar isso com "1"
Sabemos que compactamos o original para: "0010"

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

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

(*) há exceções, claro, sobre isso. 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 bruto original para o formato MP3, essa compactação é, portanto, com perdas . Outro exemplo é o formato .JPG para imagens

    
por 31.08.2008 / 15:59
6

O processo de compactação aceita padrões repetitivos e os converte em padrões mais curtos. A saída é então, na maioria das vezes, não repetível e, portanto, não pode ser compactada por muito, se de todo.

    
por 31.08.2008 / 15:21
6

De a seção Limitações do artigo da Wikipedia sobre Compressão sem perda :

Lossless data compression algorithms cannot guarantee compression for all input data sets. In other words, for any (lossless) data compression algorithm, there will be an input data set that does not get smaller when processed by the algorithm. This is easily proven with elementary mathematics using a counting argument. ...

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

    
por 02.09.2008 / 02:18
4

Isso é normal?

Não. Não com arquivos "normais". Que tipo de arquivos você estava compactando? Se eles já foram compactados, por exemplo eles são JPGs, GIFs, PNGs, vídeos ou até mesmo outros arquivos zip, então 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 será o melhor.

Por que as pessoas continuam usando o ZIP no Windows?

Um dos motivos é que existe um zip manuseio embutido no sistema - você pode clicar com o botão direito em qualquer lugar e criar um novo arquivo zip, depois soltar coisas nele. Você pode apenas clicar duas vezes em um arquivo zip e abrir como uma pasta. Você pode copiar coisas dele e às vezes até usá-lo no lugar. Você não precisa instalar o WinZip ou 7z ou qualquer outro programa. Eu costumo recomendar que as pessoas não o façam.

    
por 02.09.2008 / 01:41
2

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

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

A desvantagem de tar.gz ou de um sólido rar é que você não pode mais extrair um único arquivo de um grande arquivo sem descompactar o arquivo até onde o arquivo desejado é.

    
por 06.11.2008 / 11:16