Vous êtes sur la page 1sur 10

Universidad de Cuenca

Programacin 3 G1.

Algoritmos de Compresin de Archivos


Algoritmo de Huffman
Algoritmo de Burrows-Wheeler
Moiss Arvalo, Mauricio Calle, Edwin Narvez

Resumen
El presente informe tiene como objetivo dar a conocer sobre los conceptos bsicos de la
compresin de datos, se detallan los distintos mtodos y las distintas variantes en la compresin
de datos, y su importancia en la era actual. Se centra principalmente en los algoritmos para la
compresin de datos sin prdida, en los cuales se analizan los modelos que pueden abarcar: el
modelo esttico y el modelo dinmico. Adems, trata dos mtodos de compresin de datos: el
mtodo de Huffman y el mtodo de Burrows-Wheeler, en ambos casos se explica de forma
muy detallada la manera en que estos funcionan mediante ejemplos, tambin se explican los
campos de aplicacin.

Palabras Claves: Algoritmos de compresin sin prdida, codificacin de Huffman, algoritmo


de Burrows-Wheeler

Introduccin

A lo largo de la historia se ha demostrado que el ser humano necesita comprimir la informacin


que se desea transmitir, es decir la comprensin de informacin es algo natural para las
personas, los motivos por los cuales el hombre ha deseado comprimir informacin pueden ser
variados, en un principio se deseaba comprimir informacin para ahorrar tiempo en las
conversaciones directas y en la actualidad se desea comprimir datos para que estos sean menos
pesados y por ende estos puedan ser enviados ms rpido por los distintos medios de
comunicacin o para que grandes cantidades informacin pueda ser almacenada
eficientemente.
La compresin de datos es el proceso de convertir una cadena de datos de entrada en otra
cadena de datos que tenga un tamao ms pequeo. Una cadena es un archivo o un buffer en
la memoria.
La compresin de archivos es til y popular por las siguientes razones: 1) A la gente le gusta
acumular datos y odia tirar cualquier cosa. En cualquier momento los dispositivos de
almacenamiento se llenarn, es por ello que la compresin retrasa o demora lo inevitable y el
segundo motivo 2) Las personas detestan esperar mucho tiempo en las transferencias de datos.
Existen gran cantidad de mtodos conocidos para la compresin de datos, a pesar de que estn
basados en ideas diferentes y que dan resultados diferentes tienen en comn que todos se basan
en un mismo principio, este principio es la compresin por medio de la eliminacin de
redundancia de los datos originales del archivo fuente. Cualquier dato que no sea aleatorio
posee una estructura, esta estructura es utilizada para elaborar una representacin ms pequea
de los datos.

Algoritmos de Compresin sin prdida

Los algoritmos de compresin sin prdida son aquellos que tienen como objetivo representar
cierta cadena de datos utilizando y ocupando menor espacio y cuya reconstruccin sea exacta
a la cadena original de datos, es por esta razn que estos tipos de algoritmos son utilizados para
comprimir archivos que no pueden ser degradados o en los cuales no se puede permitir perder
ninguna porcin de informacin, como pueden ser documentos de textos, imgenes y sonido.
La mayora de estos archivos se basan en los conceptos de la Teora de la Informacin, tales
como la Redundancia y Entropa de datos y pueden ser implementados usando uno de los
modelos: el modelo esttico y el modelo basado en diccionarios.
La redundancia hace referencia a los datos que son repetitivos o previsibles y la entropa se
refiere a la informacin nueva o esencial que se define como la diferencia entre la cantidad
total de datos de un mensaje y su redundancia.
El modelo esttico lee y codifica utilizando la probabilidad de aparicin de cada carcter,
representado de forma simple en una tabla esttica de probabilidades, el proceso de generar un
rbol de Huffman completo de todos los datos de la cadena a comprimir tiene un coste
significativo, razn por la cual no siempre se genera este rbol completo, sino que en reemplazo
a ste primero se analiza por bloques de datos representativos dando lugar a dicha tabla de
frecuencias y a partir de esta tabla se genera el rbol de Huffman.
Se debe tener en cuenta que utilizar este modelo conlleva algunas desventajas, entre la principal
tenemos que, si un flujo de entrada no concuerda bien con la estadstica de la tabla de
probabilidades anteriormente acumulada, la compresin se degrada o incluso se da posibilidad
de que el archivo comprimido sea igual a ms pesado que el flujo original.
El modelo basado en diccionarios usa cdigo simple para reemplazar cadenas de smbolos,
acta de la siguiente manera, lee una entrada de datos y observa por grupos de smbolos que
aparecen en el diccionario, si la cadena concuerda, un indicador o ndice puede ocupar en lugar
de toda esa cadena.

Codificacin de Huffman

La codificacin de Huffman es un mtodo de alto valor para la compresin de datos, es


utilizado como base para varios programas populares que se encuentra en diversas plataformas,
se diferencia de los dems mtodos porque construye sus cdigos mediante un rbol de cdigo
y se lo recorre desde lo ms profundo hacia arriba.

Algoritmo de Huffman

Es un algoritmo para la construccin de cdigos Huffman, desarrollado por David A. Huffman


en 1952, ste algoritmo toma un alfabeto de n-caracteres, los asocia junto a sus frecuencias de
aparicin y produce un cdigo de Huffman en base a ese alfabeto y esas frecuencias registradas.
El algoritmo de Huffman crea un rbol binario donde cada carcter es una hoja y se construye
de tal forma que siguindolo desde la raz a cada una de las hojas se obtiene el cdigo de
Huffman asociado a l. Sigue el siguiente proceso.

1. Se crea varios rboles, uno por cada carcter del alfabeto, consistiendo cada uno de los
rboles en nodo sin hijos y etiquetado cada uno con su carcter y con su frecuencia de
aparicin.
2. Se toman los dos rboles de menor frecuencia y se unen al nuevo rbol. La etiqueta de
la raz ser la suma de las frecuencias de las races de los dos sub-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 1 la de la izquierda y un 0 la de la derecha.
3. Se repite el paso 2 hasta que slo quede un rbol.

Ejemplo:

a4 se combina con a5 y ambas se sustituyen por el smbolo a45, cuya probabilidad


es de 0,2.
Ahora quedan cuatro smbolos disponibles: a1con una probabilidad de 0,4 y
a2, a3, a45 con probabilidades de 0,2 cada uno. Se seleccionan de forma
arbitraria a3 y a45, combinndolos y reemplazndolos por el smbolo auxiliar a345
cuya probabilidad es de 0,4.
En este momento tenemos tres smbolos, a1, a2 y a345 con probabilidades 0,4,
0,2 y 0,4, respectivamente. Se seleccionan de forma arbitraria a2 y a345,
combinndolos y reemplazndolos por el smbolo auxiliar a2345 cuya
probabilidad es de 0,6.
Finalmente, combinamos los dos smbolos restantes, a1 y a2345, sustituyndolos
por a12345 con una probabilidad de 1,0.

Vea Ilustracin 1.

Para obtener el cdigo asociado a un smbolo se debe proceder del siguiente modo:

1. Comenzar con un cdigo vaco.


2. Iniciar el recorrido del rbol en la hoja asociado al smbolo.
3. Comenzar un recorrido del rbol hacia arriba.
4. Cada vez que se suba de nivel, aadir al cdigo la etiqueta de la rama que se ha
recorrido (1 o 0).
5. Al llegar a la raz, invertir el cdigo.
6. El resultado es el cdigo de Huffman.

El proceso para obtener un smbolo a partir de un cdigo es el siguiente:


1. Comenzar el recorrido del rbol desde la raz.
2. Extraer el primer smbolo del cdigo a descodificar
3. Descender por la rama etiquetada con ese smbolo.
4. Repetir desde el paso 2 hasta que se llegue a una hoja, que ser el smbolo asociado
al cdigo.

En el ejemplo anterior del rbol de Huffman Ilustracin 1. Se obtendra lo siguiente:


Para a1 la traduccin 0
a2 10
a3 111
a4 1101
a5 1100

El cdigo de Huffman no es nico ya que tanto en la generacin del rbol como en el


posicionamiento de la traduccin se han tomado valores aleatorios. Esto se puede observar en
la Ilustracin 2.
Para a1 la traduccin 11
a2 01
a3 00
a4 101
a5 100

Algoritmo de Burrows-Wheeler

La mayora de mtodos de compresin operan de manera continua en el que el codificador


introduce uno o varios bytes y los procesa hasta detectar el indicar final de archivo. El mtodo
de Burrows-Wheeler trabaja en modo bloque, donde la cadena de datos se analiza y lee por
bloques, y cada bloque es codificado por separado de la cadena.
El mtodo de Burrows-Wheeler funciona bien tanto para imgenes, audio y texto y con
resultados muy buenos, en algunos casos la compresin es de 1 bit por byte e inclusive mejor.
De forma general, la idea principal de este mtodo es comenzar con una cadena S de n smbolos
y desorganizarla, produciendo otra cadena L que debe satisfacer dos condiciones:
1. Cualquier regin de L tender a tener una concentracin de slo unos pocos smbolos.
2. Es posible reconstruir la cadena original S a partir de L.
Matemticamente, se resolver a travs de una permutacin, y que una cadena de smbolos n
tiene n! (n factorial) permutaciones, lo que implica que sea un nmero muy grande, es por este
motivo que se utiliza una permutacin particular que debe ser cuidadosamente seleccionada.
El codificador de Burrows-Wheeler procede de la siguiente manera:
1. La cadena L es creada por el codificador como una permutacin de S. El codificador
tambin genera informacin adicional denotada por I y que ser utilizada en el paso 3.
2. El codificador comprime L e I, y escribe los resultados en la cadena de salida. Este paso
comienza tpicamente con RLE1, continua con la codificacin mover al frente, y
finalmente aplica la codificacin de Huffman.
3. El decodificador lee la cadena de salida y la decodifica aplicando los mismos mtodos
que en el anterior paso, pero en orden inverso. El resultado es la cadena L y la variable
I.
4. Ambas L e I son usadas por el decodificador para reconstruir la cadena original.

Ejemplo:
Usaremos la cadena swiss_miss.
Dada la cadena de datos de n smbolos se construye una matriz de n x n, donde almacena
la cadena S en la primera fila, seguida por n-1 copias de S, cada una desplazada
cclicamente un smbolo a la izquierda Ilustracin 3.
A partir de esto la matriz se ordena lexicogrficamente2 por filas, produciendo la matriz
ordenada Ilustracin 4.
La permutacin de L seleccionada por el codificador es la ltima columna de la matriz
ordenada. La informacin necesaria para reconstruir eventualmente S a partir de L es
el nmero de la fila de cadena original en la matriz ordenada, que es nuestro ejemplo
es 8, este nmero se almacena en I.

El decodificador lee un flujo comprimido, lo descomprime utilizando Huffman y mover-al-


frene y luego re-construye la cadena S a partir de la L descomprimida siguiendo estos pasos:
La primera columna de la matriz ordenada (columna F de Ilustracin 5) se construye a
partir de L. Esto se logra ya que F y L contienen los mismos smbolos y F esta ordenada.
El decodificador nicamente ordena la cadena L para obtener F.
Mientras ordena L, el decodificador prepara una matriz auxiliar T que muestra las
relaciones entre los elementos de L y F Ilustracin 5. El primer elemento de T es 4 ya
que el ste se encuentra en la posicin 4 de F. El segundo elemento de T es 9, es decir
que este se encontrara en la 9 posicin de F, y as sucesivamente.
La cadena F ya no es necesaria. El decodificador utiliza L, I y T para reconstruir S de
acuerdo con:

1
La compresin RLE o Run-length encoding es una forma muy simple de compresin de datos en la que
secuencias de datos con el mismo valor consecutivas son almacenadas como un nico valor ms su recuento. Esto
es ms til en datos que contienen muchas de estas secuencias.
2 El orden lexicogrfico es el que se utiliza para ordenar caracteres. Normalmente se diferencia entre letras

maysculas y minsculas, y adems se consideran los nmeros y los signos de puntuacin.


De acuerdo al ejemplo, se procedera as:

El verdadero principio de compresin de L se basa en su atributo principal, es a saber, que


contiene concentraciones de smbolos idnticos. La utilizacin de RLE tiene sentido, pero solo
como un primer paso en un proceso de compresin de mltiples etapas. El paso principal de la
compresin de L debe utilizar el mtodo mover-al-frente. Aplicado en nuestro ejemplo de la
siguiente manera:
Se inicializa A con una lista de los smbolos que aparecen en la cadena A= (_, i, m, s,
w).
Para i = 0, , n-1, se codifican el smbolo Li como el nmero de smbolos que le
preceden en A, y luego se mueve el smbolo Li hasta el comienzo de A
Se combina los cdigos del paso 2 en una lista C, que se comprime an ms utilizando
Huffman o la codificacin aritmtica.

Los resultados se visualizan en la Ilustracin 6.

Conclusiones

En nuestra era resulta imprescindible utilizar algoritmos de compresin de datos, ya que estos
acarrean grandes beneficios para mejorar las telecomunicaciones y el almacenamiento de
informacin. Grandes algoritmos han sido desarrollados, implementando varios modelos de
acuerdo a su campo de uso, aun as, comparten la caracterstica comn de la eliminacin de
redundancia de caracteres. Tambin es necesario aclarar que varios de estos mtodos se
complementan entre s para lograr la mayor compresin, en especfico el mtodo de Burrows-
Wheeler es implementado con ayuda de la codificacin de Huffman y otros mtodos ms.
La calidad de la compresin depender mucho del campo y del formato del cual se est
comprimiendo, por este motivo es difcil decidir cul mtodo es mejor que otro.

El cdigo se encuentra en los siguientes links:


Huffman: https://github.com/edwinnm/Codificaci-n-de-Huffman
Burrows-Wheeler: https://github.com/edwinnm/Burrows-Wheeler

Referencias

[1]"Compresin de Burrows-Wheeler", Es.wikipedia.org, 2017. [Online]. Available:


https://es.wikipedia.org/wiki/Compresi%C3%B3n_de_Burrows-Wheeler. [Accessed: 20-
Jun- 2017].
[2]"Algoritmo de Huffman", Es.wikipedia.org, 2017. [Online]. Available:
https://es.wikipedia.org/wiki/Algoritmo_de_Huffman. [Accessed: 20- Jun- 2017].
[3]"Codificacin Huffman", Es.wikipedia.org, 2017. [Online]. Available:
https://es.wikipedia.org/wiki/Codificaci%C3%B3n_Huffman. [Accessed: 20- Jun-
2017].
[4]Compresin de Datos La referencia completa, 4th ed. California, 2014.
[5]"Algoritmo de compresin sin prdida", Es.wikipedia.org, 2017. [Online]. Available:
https://es.wikipedia.org/wiki/Algoritmo_de_compresi%C3%B3n_sin_p%C3%A9rdida.
[Accessed: 20- Jun- 2017].
[6]"Run-length encoding", Es.wikipedia.org, 2017. [Online]. Available:
https://es.wikipedia.org/wiki/Run-length_encoding. [Accessed: 20- Jun- 2017].
[7]2017. [Online]. Available: http://ocw.udl.cat/enginyeria-i-arquitectura/codificacio-i-
transport-de-la-infomacio/Contenidos/2/CompSinPerd.pdf. [Accessed: 20- Jun- 2017].

Figuras
Ilustracin 1: rbol de Huffman

Ilustracin 2: rbol de Huffman alterno


Ilustracin 3: Matriz de n x n

Ilustracin 4: Matriz ordenada lexicogrfica


Ilustracin 5: Decodificacin

Ilustracin 6: Codificacin y decodificacin mediante mover-al-frente

Vous aimerez peut-être aussi