2012/10/28

O Poder da Compressão ZIP

Praticamente toda a gente que já lidou com computadores estará familiarizada com os ficheiro "zipados" - ou seja, ficheiros com a extensão .ZIP que indicam que se tratam de ficheiros comprimidos, e que assim (na maioria dos casos) passam a ocupar menos espaço que os ficheiros originais contidos no seu interior.

Ao contrário dos sistemas como o JPEG e o MP3, que permitem comprimir imagens e músicas em versões que ocupam muito menos espaço, mas à custa de perda de informação (as imagens ficaram mais "esborratadas" quanto mais forte for a compressão; ou o som que também vai tendo qualidade cada vez mais reduzida) - no caso dos ZIPs, o tipo de compressão utilizado faz com que seja possível recuperar na íntegra toda a informação original.

Como é que isso acontece? Há vários métodos e formas, mas podem imaginar o processo como sendo algo deste tipo:

Se tiverem um ficheiro de texto que contenha muitas vezes a palavra "computador", o sistema pode analisar isso e dizer para substituir todas as ocorrências pelo código mais curto "%1". Assim, em dezenas ou centenas de ocorrências, pouparemos preciosos bytes usando-se este código curto para a palavra longa, e guardando-a apenas uma vez num "dicionário" que é criado especificamente para cada ficheiro a comprimir. No processo inverso, basta apenas ir ver o que cada um destes códigos comprimidos quer dizer (indo ao tal "dicionário") e repôr a informação original.

Outros processos incluem substituir sequências longas de caracteres por outra representação mais eficiente: ou seja, em vez de gastarem 1000 bytes num texto com 1000 espaços em branco consecutivos, poderíamos dizer apenas que são "1000 espaços", num número muito mais reduzido de bytes.

É precisamente por isso que um ficheiro com conteúdos repetidos se torna muito mais comprimível que um com conteúdos "aleatórios" ou muito variados.


Um exemplo perfeito é este ficheiro zip 42.

Este ficheiro ocupa cerca de 42Kb zipado, e contem 16 ficheiros - ele próprios zipados - que contêm eles próprios 16 ficheiros zipados, que contêm 16 ficheiros zipados, que contêm 16 ficheiros zipados, que contêm 16 ficheiros zipados, que contêm 1 ficheiro de 4.3GB comprimido.

Ou seja... dentro deste ficheiro de meros 42KB, têm na verdade:
  • 16 x 4294967295       = 68.719.476.720 (68GB)
  • 16 x 68719476720      = 1.099.511.627.520 (1TB)
  • 16 x 1099511627520    = 17.592.186.040.320 (17TB)
  • 16 x 17592186040320   = 281.474.976.645.120 (281TB)
  • 16 x 281474976645120  = 4.503.599.626.321.920 (4,5PB)
Sim... estão a ver bem: PETABYTES!

(Caso se queiram aventurar a encher o disco de algum amigo, a password deste ficheiro zip é: 42.)

4 comentários: