El concepto básico es que en lugar de usar ocho bits para representar cada byte, utiliza representaciones más cortas para bytes o secuencias de bytes que se producen con mayor frecuencia.
Por ejemplo, si el archivo de consiste únicamente en el 0x41 byte (A
) repetidas dieciséis veces, a continuación, en lugar de representar como la secuencia de 8 bits 01000001
acortarlo a la secuencia de 1-bit 0
. Entonces el archivo se puede representar por 0000000000000000
(dieciséis 0
s).Entonces, el archivo del byte 0x41
repetido dieciséis veces puede ser representado por el archivo que consiste en el byte 0x00
repetido dos veces.
Así que lo que tenemos aquí es que para este archivo (0x41
repite dieciséis veces) los bits 01000001
no transmiten ninguna información adicional sobre el bit 0
. Entonces, en este caso, tiramos los bits extraños para obtener una representación más corta.
Esa es la idea central detrás de la compresión.
Como otro ejemplo, considere el patrón de ocho bytes
0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
y ahora lo repiten 2048 veces. Una forma de seguir el enfoque anterior es representar bytes utilizando tres bits.
000 0x41
001 0x42
010 0x43
011 0x44
100 0x45
101 0x46
110 0x47
111 0x48
Ahora podemos representar el patrón de bytes por encima de 00000101 00111001 01110111
(éste es el patrón de tres bytes 0x05 0x39 0x77
) repite 2048 veces.
Pero un enfoque aún mejor es para representar el patrón de bytes
0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
por el solo bit 0
. Entonces podemos representar el patrón de byte anterior por 0
repetido 2048 veces que se convierte en el byte 0x00
repetido 256 veces. Ahora sólo tenemos que almacenar el diccionario
0 -> 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
y el patrón de bytes 0x00
repitió 256 veces y comprimimos el archivo de 16.384 bytes a (módulo el diccionario) de 256 bytes.
Eso, en pocas palabras, es cómo funciona la compresión. Todo el asunto se reduce a encontrar representaciones cortas y eficientes de los bytes y secuencias de bytes en un archivo dado. Esa es la idea simple, pero los detalles (encontrar la representación) pueden ser bastante desafiantes.
Véase, por ejemplo:
- Data compression
- Run length encoding
- Huffman compression
- Shannon-Fano coding
- LZW
Me parece que tiene que ir a wikip Edia y haz algo de lectura. – skaffman
¡Fácil! Convierta a binario y elimine los ceros –
http://www.howstuffworks.com/file-compression.htm –