O que é compressão/compactação de arquivos?

O que é compressão de arquivos?

Estamos acostumados a fazer downloads de arquivos compactados com extensão .zip e .rar, formatos que diminuem significativamente o tamanho total de dados em disco e o tempo total de download. Mas você sabe como a compressão de dados funciona?

Grande parte dos arquivos em nosso computador possui informações repetidas, e a compressão não faz nada mais do que organizar e eliminar essas redundâncias. Se em um texto as palavras "Canal Tech" aparecem mais de uma vez, o algoritmo de compressão as armazena apenas uma vez e guarda a referência das posições de onde elas aparecem. Observe a frase abaixo como exemplo:

A Copa de 2014 será no Brasil. Será que o Brasil conseguirá preparar tudo o que é necessário até lá?

Observe que as palavras "Brasil", "o", "que" e "será" aparecem duas vezes, e por isso são consideradas redundantes no texto. Utilizando uma compactação baseada no dicionário LZ - um dos mais utilizados pelos softwares de compressão -, atribuímos um índice a cada palavra diferente na frase acima, como a seguir:

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16
A Copa de 2014 será no Brasil que o conseguirá preparar tudo é necessário até

Em seguida reescrevemos a frase com os índices do dicionário:

1 2 3 4 5 6 7. 5 8 9 7 10 11 12 9 8 14 15 16?

Veja que o texto foi reduzido de 20 para 16 palavras, o que também resulta na diminuição de seu tamanho, mas é importante lembrar que o dicionário também é armazenado junto com o arquivo. Tendo isso em mente, fica fácil descobrir porque arquivos maiores possuem um coeficiente de compactação maior, já que existem mais repetições e um aumento pouco significativo do tamanho do dicionário.

Mesmo que o simples exemplo acima nos dê uma boa noção de como a compactação funciona, na prática os algoritmos atuais são muito mais sofisticados. Os mais conhecidos, como RAR e ZIP, fazem uma análise inicial do arquivo verificando quantos padrões existem e se vale a pena utilizá-los, pois cada novo padrão exige um novo dicionário, o que pode resultar em um arquivo maior no final das contas.

Por exemplo, reparou que existem 4 repetições de "á" na frase que utilizamos como exemplo? Esse é mais um padrão que o algoritmo pode utilizar se isso resultar na redução do arquivo final.

Uma pergunta muito comum que circula pela internet é qual programa é o "melhor" para comprimir arquivos, onde dois nomes acabam sempre causando um empate: WinRAR e WinZIP. Mesmo que os dois sejam muito bons, podem apresentar resultados diferentes para arquivos diferentes, pois cada um possui seu próprio algoritmo de compactação. Mas esse valor por vezes é tão pequeno que não existe uma diferença real entre eles, sendo bastante competentes no que fazem.

Outros programas que possuem o mesmo nível de qualidade dos dois acima são o KGB Archiver, PowerArchiver e 7-zip (este último peca apenas por não ter uma interface gráfica). Todos eles trabalham tanto com compactação no formato ZIP e em RAR, com o 7-zip sendo mais recomendado para computadores com um pouco menos de recursos, além de trabalhar também no formato de compressão .7Z, algoritmo tão bom quanto os dois anteriores.

E você, qual programa utiliza para compactar/descompactar seus arquivos, qual seu favorito?