Seguramente todos en algún momento de nuestras vidas se nos ha dado por intentar comprimir un archivo más de una vez con la esperanza de que fuera ocupando menos espacio por cada compresión, pero nos hemos encontrado con la sorpresa de notar muy poco o nulos resultados.
Hay muchos conceptos en el campo de la computación involucrados en el proceso de alivianar el peso de un archivo. En este post pretendo acatar los fundamentos para comprender de una forma intuitiva el por que del fenómeno de la compresión de archivos comenzando por el protagonista principal del proceso, lo que comprimimos, los datos, la información.
¿Qué es la información?
La información proporcionan conocimiento usado para el transcurrir del día a día de la civilización donde uno de los elementos más populares para tratarla no es nada más y nada menos que la computadora.
De los datos a la información
Un dato es una representación
simbólica de un evento de la realidad. La información es un conjunto de estos
datos que procesados que terminan por constituir un mensaje que será recibido y
cambiará el estado de un sistema.
Un ser vivo es un claro ejemplo de
sistema, tiene la capacidad a través de la interacción con su entorno de
extraer datos (entrada), convertirlos en información en forma de conocimiento que
le permitan tomar decisiones (salida).
El simple hecho de observar una simple flor implica recibir ondas lumínicas de una cierta frecuencia que llegarán a nosotros por el órgano visual (el ojo), este las convertirá en una señal eléctrica que se disparará en nuestro cerebro alcanzando nuestra consciencia, el dato será procesado y convertido en una información que servirá para concretar un juicio acerca del conocimiento.
Breve historia de la información
El humano desde los orígenes
de la información ha encontrado formas y maneras de almacenar y transmitir la
información a sus pares para el beneficio social. Desde los típicos registros contables
de las cosechas grabados en tablillas y las antiguas bibliotecas hasta las
enormes imprentas y sus periódicos.
Pero no fue hasta principios
del siglo pasado que se le comenzó a dotar de una perspectiva científica
gracias al origen de la comunicación electrónica, siguiéndole a esto una de las
invenciones más importantes de la humanidad, el transistor, hito que dio pie a
la nueva revolución tecnológica actuando como potenciador de la capacidad
electrónica, de la popularización y potenciación de la computación.
El transistor, un paso más allá de los relés, fue inventado en el 1947 en los Laboratorios Bell. |
Ciencia de la Información
Han sido varios los esfuerzos
por intentar “medir la información” para obtener formas precisas de manejarla. En
1928, el ingeniero Ralph Hartley postulaba gracias a experimentos con ondas de
radio que "la cantidad total de información
[en una onda de radio] que se puede transmitir es proporcional al rango de
frecuencia transmitida y al tiempo de la transmisión", afirmación que
le valió para plantar uno de los fundamentos para que el matemático Claude
Shannon en los años 40 creara “La teoría de la información”, teoría que
implementada bajo el precepto del milenario sistema binario recientemente
formalizado por George Bool, dio a la humanidad paso a la Era Digital de la
Información.
La teoría de la Información
Esta teoría surgió a finales
de la segunda guerra mundial, época donde se buscaba utilizar de la forma más
eficiente los canales de
comunicación electrónicos que había en ese entonces. Está compuesta de leyes matemáticas que
rigen en la transmisión y el procesamiento de la información, ocupándose de la
medición de esta y su representación.
Shannon comienza por describir
el modelo de comunicación con sus cinco elementos principales:
El modelo plantea el esquema
típico de transmisión de información. La fuente de información que a través de
un transmisor emite un mensaje, este mensaje es codificado en una señal que viaja
por un medio/canal, este canal tiene una fuente de perturbaciones descrita como ruido que pueden degradar la señal. Esta señal llega
a un receptor que decodifica la información convirtiéndola en un mensaje que
llega finalmente al destinatario.
Analógicamente, la fuente de información sería el locutor de una radio hablando algo, el transmisor sería el transmisor de radio que codifica la voz del locutor (el mensaje) en una onda portadora (la señal) que viaja por el aire (el canal), atravesando paredes, arboles o aire ionizado (ruido) y llega a la antena de la radio del oyente (el receptor), esta desmodula la señal convirtiéndola en sonido audible (recupera el mensaje) y siendo escuchada por el oyente (el destinatario).
Codificación de un mensaje
Para poder llevar a cabo una comunicación, las dos partes deciden pre-establecer una serie de símbolos que intercambiaran durante el transcurso de la comunicación y que servirán para representar los mensajes que se enviaran entre sí. El sistema que establece esta codificación se le denomina codificador.
Entre personas este código sería la lengua (español, ingles etc), la codificación ASCII en una computadora para representar letras, entre radios sería la modulación de ondas electromagnéticas, entre dos perros los ladridos, en el codigo morse el punto y la raya.
Shannon encontró que la mejor y más optima forma de representar información es el sistema binario. En la teoría de la información se propone codificar cada uno de estos símbolos en bits (0 y 1).
Teniendo planteado ya los elementos básicos que componen una comunicación, la teoría pretende encontrar una forma de transmitir el mensaje de una forma eficiente, optima y además superar los obstáculos del mundo real que pueden perturbar la integridad de esa información que queramos transmitir en un intento de apaciguar o eliminar totalmente la incertidumbre.
Todo cuesta en la realidad
Optimizar significa encontrar la mejor forma de hacer algo. Los bits ocupan espacio, tiempo y energía al ser transmitidos o guardados, mientras más bits se tengan el mensaje, más costo hará transmitirlo, el objetivo es minimizar este gasto y acotar la cantidad de bits, pero para lograrlo necesitamos de alguna forma "medir" la cantidad de información en un mensaje.
¿Cómo se mide la información?
La cantidad de información que puede contener un mensaje se puede medir por qué tan probable a lo esperado es un mensaje que se recibe en un momento dado.
En flujo de mensajes ocurriendo durante una comunicación, mientras más predecible sea el contenido que se está recibiendo, menos información aportará para nosotros, en cambio, mientras menos predecible sea el contenido, más información estará aportando.
La magnitud que sirve para medir este grado de incertidumbre es la entropía.
Una fuente de información que transmite siempre el mismo mensaje una y otra vez, no estará aportando nada de información, su entropía será muy baja. Mientras que una fuente de información que transmite por ejemplo, números o letras aleatorios, su entropía será máxima.
La medición comprende una rango continuo que va desde 0.0 a 1.0
El concepto por medio de un texto. |
La imagen 1 repleta del color negro no nos dice mucho, tiene una baja entropía a diferencia de la imagen 2 que contiene un conjunto altamente "desordenado" de pixeles con una alta cantidad de información.
Requisitos de la codificación
Hay un cierto punto en que una información puede dejar de ser lo que representa y ese es el limite de una codificación perfecta. Es decir, lo lógico es poder codificar y luego decodificar, recuperando el contenido original del mensaje sin que esté alterado.
Abreviar para ahorrar letras y esfuerzo es un ejemplo de codificación "optima" ya que logramos transmitir menos símbolos ganando espacio y hasta un punto, sin perder información. |
Algoritmo de Huffman
Existen mucho codificadores y variaciones pero el más popular es el Algoritmo de Huffman, este algoritmo lo que hace es repasar el mensaje a enviar, medir la frecuencia de aparición de cada letra y asignarle así la menor cantidad de bits necesarios para representarlos en su tabla de símbolos.
Por ejemplo, en un texto común en español, las letras más frecuentes son las vocales, la "a" aparece todo el tiempo a diferencia de como podría ser la consonante "x" que aparece muy pocas veces, el algoritmo entonces asignará en su tabla de símbolos una menor cantidad de bits para representar la "a" y una alta cantidad de bits para representar la "z". Todo esto a partir de un proceso de optimización.
Para comprender su sencillo pero elegante funcionamiento recomiendo este video.
Teoría de la información y computadoras
En la teoría se maneja el concepto de mensaje navegando por un medio hasta llegar a su destino, estos mensajes en computación no son más que los datos grabados en una memoria en forma de bits, esto no es ninguna coincidencia ya obedece la naturaleza intrínseca del transistor que puede permutar solamente en 2 estados, permitiendo representar de la mejor manera datos e información.
En la codificación ASCII, cada letra se asocia a un prefijo único que la representa y ocupa un espacio mínimo necesario. |
Hasta acá comprendimos que la computadora obedece la forma más optima conocida de representar datos en un estado de funcionamiento habitual, pero empujemos un poco más los limites adentrándonos en la compresión de los mismos.
Compresión de archivos
En un sistema informático, la compresión de datos, es una técnica por la cual se busca "achicar" un dato lo máximo posible para que ocupe poco espacio de almacenamiento.
Entre los dos principales
tipos de comprensión de datos tenemos:
Comprensión sin perdida: Los datos antes y después de comprimirlos siguen siendo exactamente iguales. Se decide conservar toda la entropía de la información, tanto la información básica como la irrelevante sin percibir alteración durante la reconstrucción de la misma.
Ejemplo: Si queremos comprimir un mensaje, queremos que cuando este se
descomprima, siga íntegro y pueda leerse sin modificaciones.
Comprensión con perdida: Se pierde cierta cantidad de información, los datos al decodificarlos se reconstruirán con errores perceptibles pero tolerables obteniendo un mensaje no exactamente igual pero si idéntico al original.
Ejemplo: Una imagen al comprimirse puede perder algo de calidad, pero seguir siendo aceptablemente reconocible.
Si bien comprimir todo puede parecer una idea magnífica, estamos haciendo un sacrificio de procesamiento por espacio de almacenamiento ya que ejecutar la codificación requiere un trabajo por parte de la CPU, por lo tanto, no todo necesariamente se vive comprimiendo.
Entonces, ¿Por que no podemos comprimir un archivo más de dos veces?
Es por que una vez comprimido, durante el procesado, ya se ha encontrado la mínima cantidad de bits para codificar la información de la forma más "abreviada" posible y no hay una mejor forma de hacerlo si perjudicar la integridad de esta.
El archivo comprimido no dejará de ocupar menos, pues ya se ha hecho el mejor trabajo posible. (depende la eficiencia del algoritmo de compresión aplicado) |
La imagen 1 no ocuparía casi nada comprimida a diferencia e la imagen 2 cargada de información. (esto aplica a audios, videos, y cualquier tipo de multimedia representable en una computadora) |
Conclusión
La teoría de la información está estrechamente relacionada con las computadoras por que esta misma es un sistema informático, y la compresión de archivos es una técnica muy importante presente en ellas y por ende en nuestra cotidianeidad, desde el hecho de comprimir un texto, video, música (en estos están inherentes en los mismos algoritmos de codificación, jpg, mp3, etc.) hasta el mismo protocolo HTTP con sus directivas que permiten aprovechar los beneficios de la compresión a la hora de enviar o recibir paginas webs permitiendo gestionar de una mejor forma los recursos informáticos.
Espero que les haya sido de utilidad para tomar un poco de idea de este fascinante tema.
Enlaces consultados:
https://es.wikipedia.org/wiki/Ratio_de_entrop%C3%ADa