Está en la página 1de 7

Tipos de algoritmos de compresin y sus

caractersticas
A la hora de hablar de compresin hay que tener presentes dos
conceptos:
1. Redundancia: Datos que son repetitivos o previsibles
2. Entropa: La informacin nueva o esencial que se define como la
diferencia entre la cantidad total de datos de un mensaje y su
redundancia.
La informacin que transmiten los datos puede ser de tres tipos:
1. Redundante: informacin repetitiva o predecible.
2. Irrelevante: informacin que no podemos apreciar y cuya
eliminacin por tanto no afecta al contenido del mensaje. Por
ejemplo, si las frecuencias que es capaz de captar el odo humano
estn entre 16/20 Hz y 16.000/20.000 Hz s, seran irrelevantes
aquellas frecuencias que estuvieran por debajo o por encima de
estos valores.
3. Bsica: la relevante. La que no es ni redundante ni irrelevante. La
que debe ser transmitida para que se pueda reconstruir la seal.
Teniendo en cuenta estos tres tipos de informacin, se establecen tres
tipologas de compresin de la informacin:
1. Sin prdidas reales: es decir, transmitiendo toda la entropa del
mensaje (toda la informacin bsica e irrelevante, pero eliminando
la redundante).
2. Subjetivamente sin prdidas: es decir, adems de eliminar la
informacin redundante se elimina tambin la irrelevante.
3. Subjetivamente con prdidas: se elimina cierta cantidad de
informacin bsica, por lo que el mensaje se reconstruir con
errores perceptibles pero tolerables (por ejemplo: la
videoconferencia).

Compresin sin prdidas y compresin con prdidas


En realidad, hay fundamentalmente dos "estilos" diferente de
compresin de datos: con prdidas y sin prdidas. La compresin sin
prdidas implica una transformacin de la representacin de un conjunto
de datos, entonces es posible reproducir exactamente el mismo conjunto
de datos originales al realizar la transformacin por descompresin.

La compresin con prdidas es una representacin que le permite


reproducir algo "bastante parecido" al conjunto de datos original. Una
ventaja de las tcnicas con prdidas es que pueden producir con
frecuencia representaciones de datos ms compactas que las tcnicas
de compresin sin prdidas.
Hay que tener en cuenta que una vez realizada la compresin, no se
puede obtener la seal original, aunque s una aproximacin cuya
semejanza con la original depender del tipo de compresin. Ms a
menudo, las tcnicas de compresin con prdidas se utilizan para
imgenes, archivos de audio y video. La compresin con prdidas podra
ser la adecuada en aquellas reas en las que los observadores humanos
no perciben un patrn de bits literal de una imagen o sonido digital, sino
que caractersticas gestlticas generales de la imagen/sonido
subyacente.
Desde el punto de vista de los datos "normales", la compresin con
prdidas no es una opcin. No queremos un programa que haga
"prcticamente lo mismo" que el que escribimos. No queremos una base
de datos que contenga "prcticamente el mismo" tipo de informacin
que la que incluimos.

Compresin de espacios en blanco


Generalmente, la compresin de espacios en blanco puede
caracterizarse como "eliminar lo que no nos interesa". Aunque esta
tcnica es una tcnica de compresin con prdidas, es til para muchos
tipos de representaciones de datos que encontramos en el mundo real.
Por ejemplo, aunque HTML es mucho ms legible en un editor de textos
si se agregan espacios de indentacin o verticales, ninguno de los
"espacios en blanco" debera hacer ninguna diferencia en la
representacin del documento HTML por un navegador web. Si usted
sabe que un documento HTML est destinado solo para un navegador
web (o para un robot/araa), entonces podra ser una buena idea sacar
todos los espacios en blanco para transferirlos ms rpidamente y
ocupar menos espacio de almacenamiento. En realidad, lo que
eliminamos en la compresin de espacios en blanco, nunca tuvo un
propsito funcional para comenzar.
La compresin de espacios en blanco es extremadamente "barato" de
realizar. Es simplemente cuestin de leer una transmisin de datos y de
excluir algunos valores especficos desde la transmisin de salida. En

muchos casos, no se incluye el paso de "descompresin". Pero incluso


donde nos gustara recrear algo parecido al original en algn lugar por
debajo de la transmisin de datos, eso requerira poco en trminos de
CPU o de memoria. Lo que reproducimos puede o no ser exactamente
con lo que empezamos, segn qu normas y restricciones se incluan en
el original. Una pgina HTML escrita por un humano en un editor de
texto probablemente tendr el espacio que es idiosincrtico. Una vez
ms, a menudo, las herramientas automatizadas producen una
indentacin "razonable" y espacio para HTML.

Codificacin de duracin
La codificacin de duracin (RLE) es la tcnica de compresin sin
prdidas ms utilizada y simple. Al igual que la compresin de espacios
en blanco, es "econmica", especialmente para decodificar. La idea de
trasfondo es que muchas representaciones de datos consisten de
grandes series de bytes repetidos.
Si los bytes repetidos son prominentes dentro de la representacin de
datos esperada, podra ser adecuado y eficiente que el algoritmo
especifique uno o ms bytes de conteo de iteracin seguido de un
caracter. Sin embargo, si tiene lugar una serie caracteres extensa, esa
serie requerir dos (o ms) bytes para decodificarlos, es decir, 00000001
01011000 podra ser la transmisin de bits de salida requerida para un
ASCII "X" de la transmisin de entrada. Entonces, cien "X" en una fila
sera una salida de 01100100 01011000, lo que es bastante bueno.
Lo que se realiza con frecuencia en las variantes RLE consiste en utilizar
selectivamente los bytes para indicar los conteos de iterador o bien que
los bytes se representen a s mismos. Al menos un valor de un byte debe
reservarse para hacer esto, pero puede liberarse en la salida de datos, si
fuese necesario.

Codificacin Huffman
El algoritmo de Huffman es un algoritmo para la construccin de cdigos
de Huffman, desarrollado por David A. Huffman en 1952 y descrito en A
Method for the Construction of Minimum-Redundancy Codes.
Descripcin
El algoritmo consiste en la creacin de un rbol binario que tiene cada
uno de los smbolos por hoja, y construido de tal forma que siguindolo
desde la raz a cada una de sus hojas se obtiene el cdigo Huffman
asociado.
1. Se crean varios rboles, uno por cada uno de los smbolos del
alfabeto, consistiendo cada uno de los rboles en un nodo sin
hijos, y etiquetado cada uno con su smbolo asociado y su
frecuencia de aparicin.
2. Se toman los dos rboles de menor frecuencia, y se unen creando
un nuevo rbol. La etiqueta de la raz ser la suma de las
frecuencias de las races de los dos rboles que se unen, y cada
uno de estos rboles ser un hijo del nuevo rbol. Tambin se

etiquetan las dos ramas del nuevo rbol: con un 0 la de la


izquierda, y con un 1 la de la derecha.
3. Se repite el paso 2 hasta que slo quede un rbol.
Con este rbol se puede conocer el cdigo asociado a un smbolo, as
como obtener el smbolo asociado a un determinado cdigo.
Para obtener el cdigo asociado a un smbolo se debe proceder del
siguiente modo:
1.
2.
3.
4.

Comenzar con un cdigo vaco


Iniciar el recorrido del rbol en la hoja asociada al smbolo
Comenzar un recorrido del rbol hacia arriba
Cada vez que se suba un nivel, aadir al cdigo la etiqueta de la
rama que se ha recorrido
5. Tras llegar a la raz, invertir el cdigo
El resultado es el cdigo Huffman deseado
Para obtener un smbolo a partir de un cdigo se debe hacer as:
1.
2.
3.
4.

Comenzar el recorrido del rbol en la raz de ste


Extraer el primer smbolo del cdigo a descodificar
Descender por la rama etiquetada con ese smbolo
Volver al paso 2 hasta que se llegue a una hoja, que ser el
smbolo asociado al cdigo

En la prctica, casi siempre se utiliza el rbol para obtener todos los


cdigos de una sola vez; luego se guardan en tablas y se descarta el
rbol.

Compresin Lempel-Ziv
LZW (Lempel-Ziv-Welch) es un algoritmo de compresin sin prdida
desarrollado por Terry Welch en 1984 como una versin mejorada del
algoritmo LZ78 desarrollado por Abraham Lempel y Jacob Ziv.
Probablemente, la tcnica de compresin sin prdidas ms significativa
es la tcnica Lempel-Ziv. La idea en LZ78 es codificar una secuencia de
bytes en transferencia con una tabla dinmica
La mayora de los mtodos de compresin se basan en un anlisis inicial
del texto para identificar cadenas repetidas para armar un diccionario de
equivalencias, asignando cdigos breves a estas cadenas. En una
segunda etapa, se convierte el texto utilizando los cdigos equivalentes
para las cadenas repetidas. Esto requiere dos etapas, una de anlisis y
una segunda de conversin y tambin requiere que el diccionario se

encuentre junto con el texto codificado, incrementando el tamao del


archivo de salida.
La clave del mtodo LZW reside en que es posible crear sobre la marcha,
de manera automtica y en una nica pasada un diccionario de cadenas
que se encuentren dentro del texto a comprimir mientras al mismo
tiempo se procede a su codificacin. Dicho diccionario no es transmitido
con el texto comprimido, puesto que el descompresor puede
reconstruirlo usando la misma lgica con que lo hace el compresor y, si
est codificado correctamente, tendr exactamente las mismas cadenas
que el diccionario del compresor tena.
El diccionario comienza pre-cargado con 256 entradas, una para cada
carcter (byte) posible ms un cdigo predefinido para indicar el fin de
archivo. A esta tabla se le van agregando sucesivos cdigos numricos
por cada nuevo par de caracteres consecutivos que se lean (esto no es
literalmente cierto, segn se describe ms adelante), aun cuando
todava no sea posible prever si ese cdigo se reutilizar ms adelante o
no.
Es en este detalle donde se encuentra la brillantez del mtodo: al armar
el diccionario sobre la marcha se evita hacer dos pasadas sobre el texto,
una analizando y la otra codificando y dado que la regla de armado del
diccionario es tan simple, el descompresor puede reconstruirlo a partir
del texto comprimido mientras lo lee, evitando as incluir el diccionario
dentro del texto comprimido. Se puede objetar que el diccionario estar
plagado de cdigos que no se utilizarn y por tanto ser
innecesariamente grande, pero en la prctica el diccionario no crece
demasiado y an si lo hiciera no importa mucho pues el objetivo es que
el archivo comprimido sea pequeo aun cuando los procesos de
compresin y descompresin pudieran ocupar mucha memoria con el
diccionario.
Las entradas del diccionario pueden representar secuencias de
caracteres simples o secuencias de cdigos de tal forma que un cdigo
puede representar dos caracteres o puede representar secuencias de
otros cdigos previamente cargados que a su vez representen, cada uno
de ellos, otros cdigos o caracteres simples, o sea que un cdigo puede
representar desde uno a un nmero indeterminado de caracteres. En
realidad, el algoritmo no discrimina entre cdigos y caracteres simples
pues el diccionario se carga inicialmente de cdigos que representan los

primeros 256 caracteres simples por lo que estos no son ms que otros
cdigos dentro del mismo diccionario.
Cada vez que se lee un nuevo carcter se revisa el diccionario para ver
si forma parte de alguna entrada previa. Todos los caracteres estn
inicialmente predefinidos en el diccionario as que siempre habr al
menos una coincidencia, sin embargo, lo que se busca es la cadena ms
larga posible. Si el carcter ledo no forma parte de ms de una cadena
ms larga, entonces se emite la ms larga que se hubiera encontrado y
se agrega al diccionario una entrada formada por cualquiera que hubiera
sido el cdigo previo y este nuevo cdigo. Si el carcter ledo s forma
parte de ms de una cadena del diccionario, se lee un nuevo carcter
para ver si la secuencia formada por el carcter previo y el nuevo es
alguna de las encontradas en el diccionario. En tanto los caracteres
sucesivos que se vayan leyendo ofrezcan ms de una entrada posible en
el diccionario, se siguen leyendo caracteres. Cuando la cadena slo tiene
una entrada en el diccionario, entonces se emite el cdigo
correspondiente a esa entrada y se incorpora al diccionario una nueva
entrada que representa el ltimo cdigo emitido y el nuevo.
Otra caracterstica importante del algoritmo es que los cdigos en la
salida se representan por cadenas de bits variables. El diccionario
contiene inicialmente 257 cdigos, 256 cdigos para los 256 caracteres
simples posibles con 8 bits y un cdigo que representa el fin de archivo.
Para esto seran necesarios cdigos de 9 bits, lo cual quiere decir que
an hay disponibles 255 cdigos de 9 bits para representar cadenas de
caracteres. Cuando se llenan estas 255 entradas del diccionario, se
amplan los cdigos con un nuevo bit, lo cual permite 512 nuevas
entradas. Cuando se completan estas 512 entradas, se agrega un bit y
se disponen de 1024 nuevas entradas y as sucesivamente. En la
prctica, se verifica que las primeras entradas, correspondientes a
cdigos de 12 bits de longitud (4096 entradas) se llenan rpidamente
por lo que es habitual comenzar el proceso no con cdigos de 9 bits sino
directamente con cdigos de 12 bits.

También podría gustarte