Compresión de datos
Written by Edgar GonzálezThursday, 29 June 2006 09:55

Muchos de los contenidos que se transmiten a través de Internet están comprimidos. Archivos de texto, de música, de vídeo o de cualquier otro tipo se comprimen para reducir su tamaño, facilitar su intercambio a través de la red o ahorrar espacio de disco. Sin embargo, ¿cómo es posible reducir el tamaño de un archivo sin perder su contenido? Unos cuantos trucos de teoría de información son los que lo hacen posible.
Código binario
En nuestros ordenadores sólo se procesan señales activas o apagadas (de sí o no). Toda la información se representa mediante dos símbolos, habitualmente escritos 0 y 1, según haya corriente o no. Cada uno de estos símbolos recibe el nombre de bit. La principal información que manejan los ordenadores son cantidades, y el código binario permite una representación de los números similar a la que utilizamos las personas. Así, la serie 1, 2, 3, 4, 5... en binario es 1, 10, 11, 100, 101...
Códigos para letras
Muchas aplicaciones necesitan representar letras además de cantidades. En estos casos, lo que se hace es crear un código a modo de diccionario que atribuye a cada letra una cadena de símbolos binarios, normalmente de un tamaño fijo (llamados códigos uniformes). Dependiendo del alfabeto a representar y de la tecnología existente se utiliza un código u otro, pero el más utilizado ha sido el código ASCII para el alfabeto inglés, ideado el año 1963 y que codifica cada letra como una secuencia de 7 bits. Actualmente se utilizan extensiones del ASCII con caracteres como las letras con acento; y propuestas como Unicode, que busca integrar todas las formas de escritura utilizadas en el mundo en un único código, permitiendo por ejemplo texto en castellano, griego, japonés, hebreo y árabe en un mismo documento.
Comprimiendo...
...texto
Teniendo un código para letras podemos plantearnos el problema de cómo comprimir un documento de texto. Realmente, con un código que asigne una secuencia de tamaño fijo a todas las letras, la única manera de reducir la longitud de un texto es utilizar menos bits por letra, pero eso reduce las letras que se pueden utilizar (con 7 bits se pueden representar 128 caracteres, pero con 6 sólo 64, con 5 sólo 32...). Un punto clave es el darnos cuenta que no todas las letras son igual de frecuentes, de modo que podríamos crear un código que asigne secuencias más cortas a las letras más usadas, y secuencias más largas a las menos habituales. Con un código así, se puede esperar que la longitud total de todo un texto será más corta que la del mismo texto usando un código uniforme. Un ejemplo aparece en la figura de la derecha. En ella se observa un alfabeto con sólo 4 letras: A, B, C y D. La letra A es 2 veces más frecuente que la B y 4 veces más frecuente que la C y la D; usando un código uniforme de 2 bits la palabra AAAABBCD se codifica con 16 bits mientras que usando un código de longitud variable se usan sólo 14. A este tipo de código se le llama código de Huffman, fue inventado el año 1952, y aunque existen otros tipos de código que comprimen mejor, éste se sigue utilizando en muchas aplicaciones por su simplicidad.
...y otros archivos:
Todos los archivos de un ordenador se pueden ver como documentos de texto en un alfabeto imaginario. Evidentemente, podemos aplicar sobre ellos métodos como el de Huffman para reducir su tamaño. Sin embargo, algunos contenidos destinados directamente a los humanos, como imágenes, sonido o vídeo, permiten mayor compresión a costa de perder algo de información, ya que nuestro cerebro es capaz de recomponer la parte perdida. Tomemos algunos ejemplos:
Imágenes
Imágenes como fotografías, en que existen grandes zonas de un mismo color, permiten sacrificar los detalles más pequeños y aún así mantener el contenido principal. Métodos de compresión que sacrifican información hay muchos, según el tipo de imagen, pero quizás el más común es el JPEG para fotografías, usado en la mayoría de cámaras digitales. Otros métodos como GIF o PNG resultan más adecuados para ficheros que contengan gráficos.
Sonido
Nuestro oído no es igual de sensible a todas las frecuencias de sonido. El formato de compresión de sonido más popular, el MP3, aprovecha este hecho para reducir el tamaño de los ficheros. Tomando como referencia este comportamiento del oído, se eliminan partes de las ondas acústicas a las que somos poco sensibles para conseguir un tamaño de archivo menor.
Vídeo
Otra capacidad de nuestro cerebro es la de distinguir entre figuras y fondo. No es necesario guardar toda la imagen en cada fotograma de un vídeo, ya que muy a menudo en dos fotogramas consecutivos el fondo apenas habrá cambiado y serán muy parecidos. Si guardamos tan sólo los cambios entre imágenes, podemos reducir enormemente el tamaño de los archivos de vídeo, y esta idea es la que aplican, entre otros, los estándares de vídeo MPEG o ITU-T.