Вы находитесь на странице: 1из 17

Anlisis de algoritmos

Practica 04: Codificacin voraz de Huffman


Entrega Aula Virtual: 09 de Noviembre de 2015

Contenido

Definicin del problema


Algoritmo de Huffman
Pasos del cdigo de Huffman

Actividades
Observaciones
Reporte de prctica
Entrega va Web
Fecha de entrega

Definicin del problema

Implementar el algoritmo voraz de codificacin de


Huffman para codificar archivos de cualquier tipo bajo
lenguaje C.
Implementar codificacin voraz de Huffman
Implementar el algoritmo de decodificacin

Medir y comprobar las ventajas de tamao de los


archivos una vez realizadas diferentes codificaciones de
archivos.
Medir los tiempos de ejecucin de las
implementaciones (codificador y decodificador) para
distintos tamao de problema (tamaos de archivo).

Algoritmo de 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 MinimumRedundancy Codes.

Este algoritmo toma un alfabeto de n smbolos,


junto con sus frecuencias de aparicin asociadas, y
produce un cdigo de Huffman para ese alfabeto y
esas frecuencias.

Es un algoritmo usado para compresin de datos.


El termino se requiere al uso de una tabla de
cdigos de longitud variable para codificar un
determinado smbolo (como puede ser un carcter
en un archivo), donde la tabla ha sido rellenada de
una manera especifica basndose en la probabilidad
estimada de aparicin de cada posible valor de
dicho smbolo.

Compiladores (Anlisis Lxico II - Edgardo A. Franco)

Huffman propuso un algoritmo voraz que obtiene


una codificacin prefijo ptima.
Para ello construye un rbol binario de cdigos de
longitud variable de manera ascendente.
El algoritmo funciona de la siguiente manera:
Parte de una secuencia inicial en la que los caracteres
a codificar estn colocados en orden creciente de
frecuencia.
Esta secuencia inicial se va transformando, a base de
fusiones, hasta llegar a una secuencia con un nico
elemento que es el rbol de codificacin ptimo.

Pasos del algoritmo voraz de


codificacin de Huffman

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.

ETAPA 1

F:5

E:9

C:12

B:13

C:12

B:13

D:16

A:45

D:16

A:45

ETAPA 2
14
0

F:5

E:9

ETAPA 3
14

D:16

A:45

25

F:5

E:9

C:12

B:13

ETAPA 4
25

30

C:12

B:13

A:45
1

14

D:16

F:5

E:9

ETAPA 4

55

25

A:45

30

C:12

B:13

Una vez terminado el rbol se puede


ver con facilidad cul es el cdigo de
los smbolos

14

Ejemplo:
E: subiendo por el rbol se recorren
ramas etiquetadas con 1, 0, 1 y 1;
por lo tanto, el cdigo es 1101.

D:16

F:5

E:9

D: se recorren las ramas 1, 1 y 1, por


lo que el cdigo es 111.

ETAPA Final
55

55

A:45
0

25
0

C:12

B:13

30

14

D:16

F:5

E:9

A: 0
B: 101
C: 100
D: 111
E: 1101
F: 1100

Decodificacin del cdigo de Huffman

1. A partir del rbol de codificacin, comenzar a recorrer los


caminos segn los bits de la codificacin. Al llegar a un nodo
hoja se toma el valor de esta y coloca en el archivo original.

2. Se repite el paso 1a partir del bit siguiente de la codificacin


comenzando un nuevo recorrido a partir de la raz del rbol
de la codificacin.
3. La decodificacin termina una vez se hallan recorrido todos
los bits de la codificacin.

Actividades

1. Entender el algoritmo de codificacin voraz de


Huffman e implementarlo en lenguaje C para
codificar cualquier tipo de archivo.

2. Documentar y explicar el algoritmo


implementacin de este en ANSI C.

la

3. Construir el programa que sea capaz de reconstruir el


archivo codificado a su codificacin original.
4. Documentar la implementacin y realizar estadsticas
de compresin para distintos archivos.
Compiladores (Anlisis Lxico II - Edgardo A. Franco)

5. Encontrar una aproximacin de la funcin de


compresin (% de comprensin alcanzados con
distintos tamaos y tipos de archivos).
6. Para cada implementacin realizada medir los
tiempos de ejecucin utilizando diferentes
tamaos de problema (archivos).
7. Encontrar una aproximacin de la funcin
temporal para distintos tamaos de problema.

Compiladores (Anlisis Lxico II - Edgardo A. Franco)

8. Finalmente responda a las siguientes preguntas:


i.

Los niveles de codificacin de archivos proporcionan una


ventaja respecto al tamao del archivo original en el
promedio de los casos?
ii. Los tiempos de codificacin o decodificacin del archivo
son muy grandes?
iii. Ocurrieron perdidas de la informacin al codificar los
archivos?
iv. El comportamiento experimental del algoritmos era el
esperado? Por que?
v. Qu caractersticas deber tener una imagen BMP para
codificarse en menor espacio?
vi. Qu caractersticas deber de tener un archivo de texto
para tener una codificacin en menor espacio?
vii. De 3 aplicaciones posibles en problemas de la vida real a la
codificacin de Huffman.
viii. Existi un entorno controlado para realizar las pruebas
experimentales? Cul fue?
ix. Qu recomendaciones daran a nuevos equipos para
realizar esta practica?

Observaciones

Es necesario probar con una gran cantidad de archivos para


poder concluir mejor aspectos como % de compresin
esperados, factores que modifican la codificacin, ventajas y
desventajas.
Indique cual fue su plataforma experimental (Caractersticas
del hardware, compilador, sistema operativo, entorno
controlado, etc)
Se sugiere crear scripts que faciliten la experimentacin.
En el laboratorio mostrar el funcionamiento de las tres
implementaciones.
Autodocumentacin del cdigo
Documentacin de funciones y algoritmos
Archivos de prueba suficientes y variados clasificados por tipo y
caractersticas.

Reporte de practica

Portada
Introduccin (Teora sobre Programacin voraz y Huffman)
Planteamiento del problema
Algoritmos (Descripcin de la abstraccin del problema

y el algoritmo que da
solucin, apoyndose de pseudocdigo, diagramas y figuras en un lenguaje claro)

Implementacin de los algoritmos


implementaron en el cdigo)

(Segn los algoritmos utilizados como se

Actividades y Pruebas

(Actividades, verificacin de la solucin, pruebas y


resultados de la prctica segn lo solicitado)

Errores detectados

(Si existe algn error detectado, el cul no fue posible


resolver o se desconoce el motivo y solo ocurre con ciertas condiciones es necesario
describirlo)

Posibles mejoras

(Describir posibles disminuciones de cdigo en la


implementacin o otras posibles soluciones)

Conclusiones (Por cada integrante del equipo)


Anexo (Cdigos fuente *con colores e instrucciones de compilacin)
Bibliografa (En formato IEEE)

Entrega  

En un solo archivo comprimido (ZIP, RAR)


Reporte (PDF)
Cdigos fuente (C++ o Java)
Cdigo documentado: Titulo, descripcin, fecha, versin, autor.
(Funciones y Algoritmos: Qu hace?, Cmo lo hace?, Qu recibe?, Qu
devuelve?, Causa de errores?).
OBSERVACIONES
*NO enviar ejecutables o archivos innecesarios, las instrucciones de
compilacin van en el anexo del reporte. (Yo compilare los fuente)

Fecha de entrega

^cin (d)
Lunes 09 de noviembre de 2015

Entrega de reporte y cdigo


En un solo archivo comprimido

Fecha y hora limite de entrega va Web


Lunes 09 de Noviembre de 2015 a las 18:00:00 hrs.

Compiladores (Anlisis Lxico II - Edgardo A. Franco)

Вам также может понравиться