Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene...

15
Practica 06: Codificación de Huffman 1 Estructuras de Datos M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom

Transcript of Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene...

Page 1: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Practica 06: Codificación de Huffman

1

Estructuras de Datos

M. en C. Edgardo Adrián Franco Martínez http://[email protected]@edfrancom edgardoadrianfrancom

Page 2: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Contenido• Definición del problema

• Algoritmo de Huffman

• Pasos del código de Huffman

• Actividades

• Observaciones

• Reporte de práctica

• Rubrica de evaluación del reporte

• Entrega vía Web

• Fecha de entrega2

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 3: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Definición del problema

Compiladores (Análisis Léxico II - Edgardo A. Franco)

• Implementar el algoritmo de codificación deHuffman para codificar archivos de texto bajolenguaje C.

• Implementar codificación de Huffman

• Implementar el algoritmo de decodificación

3

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 4: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Algoritmo de Huffman

Compiladores (Análisis Léxico II - Edgardo A. Franco)

• El algoritmo de Huffman es un algoritmo para laconstrucción de códigos de Huffman, desarrolladopor David A. Huffman en 1952 y descrito en AMethod for the Construction of Minimum-Redundancy Codes.

• Este algoritmo toma un alfabeto de n símbolos,junto con sus frecuencias de aparición asociadas, yproduce un código de Huffman para ese alfabeto yesas frecuencias.

4

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 5: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

• Huffman propuso un algoritmo que obtiene unacodificación prefijo óptima.

• Para ello construye un árbol binario de códigos delongitud variable de manera ascendente.

• El algoritmo funciona de la siguiente manera:

• Parte de una secuencia inicial en la que los caracteresa codificar están colocados en orden creciente defrecuencia.

• Esta secuencia inicial se va transformando, a base defusiones, hasta llegar a una secuencia con un únicoelemento que es el árbol de codificación óptimo. 5

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 6: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Pasos del código de Huffman1. Se crean varios árboles, uno por cada uno de los símbolos

del alfabeto, consistiendo cada uno de los árboles en unnodo sin hijos, y etiquetado cada uno con su símboloasociado y su frecuencia de aparición.

2. Se toman los dos árboles de menor frecuencia, y se unencreando un nuevo árbol. La etiqueta de la raíz será la sumade las frecuencias de las raíces de los dos árboles que seunen, y cada uno de estos árboles será un hijo del nuevoárbol. También 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 sólo quede un árbol. 6

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 7: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

ETAPA 1A:45B:13C:12 D:16E:9F:5

A:45B:13C:12 D:16

E:9F:5

14

A:45

B:13C:12

D:16

E:9F:5

14 25

B:13C:12

25

D:16

E:9F:5

14

30 A:45

ETAPA 2

ETAPA 3

ETAPA 4

0 1

0 1 0 1

0 1

0 1

0 17

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 8: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

B:13C:12

25

D:16

E:9F:5

14

30

A:45

ETAPA 4

55

B:13C:12

25

D:16

E:9F:5

14

30

A:45

ETAPA Final

55

100

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 1

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

Una vez terminado el árbol se puedever con facilidad cuál es el código delos símbolos

Ejemplo:E: subiendo por el árbol se recorrenramas etiquetadas con 1, 0, 1 y 1;por lo tanto, el código es 1101.

D: se recorren las ramas 1, 1 y 1, porlo que el código es 111.

8

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 9: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Decodificación del código de Huffman1. A partir del árbol de codificación, comenzar a recorrer los

caminos según los bits de la codificación. Al llegar a un nodohoja se toma el valor de esta y coloca en el archivo original.

2. Se repite el paso 1 a partir del bit siguiente de la codificacióncomenzando un nuevo recorrido a partir de la raíz del árbolde la codificación.

3. La decodificación termina una vez se hallan recorrido todoslos bits de la codificación.

9

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 10: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Actividades

Compiladores (Análisis Léxico II - Edgardo A. Franco)

1. Entender el algoritmo de codificación de Huffman eimplementarlo en lenguaje C para codificar un archivo de texto(Caracteres ASCII).

2. Documentar y explicar el algoritmo y la implementación de esteen C.

3. Construir el programa que sea capaz de reconstruir el archivocodificado a su codificación original.

4. Documentar la implementación realizada del árbol binario ymodificaciones realizadas para esta práctica respecto a laespecificación de la clase.

5. Si se agregaron nuevas operaciones al TAD Árbol binario o serealizo otra librería para Huffman documentarla y explicar lasfunciones.

10

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 11: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Observaciones• En el laboratorio mostrar el funcionamiento de la

implementación.• Autodocumentación del código

• Documentación de funciones y algoritmos

• Archivos de textos de prueba suficientes y detamaños grandes.

• El archivo de salida con el código de Huffman deltexto original deberá ser en modo binario. i.e. secodifica los 0 y 1’s en los bytes del archivo, por lo queel archivo de salida siempre será de menor tamañoqu el archivo del texto original.

• Al decodificador se deberá de dar el archivo con lacadena codificada y el archivo con los parámetros(Tabla de frecuencias o árbol de Huffman codificado)

11

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 12: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Reporte de practica• Portada

• Introducción (Teoría sobre Árbol binario y Huffman)

• Planteamiento del problema

• Algoritmos (Descripción de la abstracción del problema y el algoritmo que dasolución, apoyándose de pseudocódigo, diagramas y figuras en un lenguaje claro)

• Implementación de los algoritmos (Según el algoritmo de Huffman utilizadocomo se implementaron en el código)

• Actividades y Pruebas (Actividades, verificación de la solución, pruebas yresultados de la práctica según lo solicitado)

• Errores detectados (Si existe algún error detectado, el cuál no fue posibleresolver o se desconoce el motivo y solo ocurre con ciertas condiciones es necesariodescribirlo)

• Posibles mejoras (Describir posibles disminuciones de código en laimplementación o otras posibles soluciones)

• Conclusiones (Por cada integrante del equipo)

• Anexo (Códigos fuente *con colores e instrucciones de compilación)

• Bibliografía (En formato IEEE)

12

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 13: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Rubrica de evaluación del reporte

13

Indicador Excelente Muy bien Bien Deficiente

Construcción de párrafos Todos los párrafos incluyen una

introducción, explicaciones o

detalles y una conclusión

Los párrafos incluyen

información relacionada pero

no fueron generalmente bien

organizados

La estructura del párrafo no

estaba clara y las oraciones no

estaban generalmente

relacionadas

Los párrafos son tomados de

otras fuentes y no son

originales.

Redacción No hay errores de gramática,

ortografía y puntuación y la

redacción es coherentemente

No hay errores de gramática,

ortografía y puntuación, pero la

redacción presenta

incoherencias

Pocos errores de gramática,

ortografía y puntuación

Muchos errores de gramática,

ortografía y puntuación

Cantidad de información

Portada, Introducción, Planteamiento del problema,

algoritmos e implementación, actividades y pruebas,

errores detectados, posibles mejoras, conclusiones y

anexos

Todos los temas son tratados de

manera clara y precisa, según lo

solicitado.

La mayoría de los temas son

tratados de manera clara y

precisa

Dos temas no están tratados o

están imprecisos y no cumplen

lo solicitado.

Tres o más temas no están

tratados o están imprecisos y no

cumplen lo solicitado.

Calidad de la información La información está claramente

relacionada con el tema

principal y proporciona varias

ideas secundarias y/o ejemplos

La información da respuestas a

las preguntas principales, y solo

da algunos detalles y/o

ejemplos

La información da respuestas a

las preguntas principales, pero

no da detalles y/o ejemplos

La información tiene poco o

nada que ver con las preguntas

planteadas.

Algoritmos Los algoritmos dan solución

apoyándose de pseudocódigo,

diagramas y/o figuras en un

lenguaje claro.

La mayoría de los algoritmos

dan solución apoyándose de

pseudocódigo, pero diagramas

y/o figuras.

Los algoritmos son mencionados

textualmente pero no se

describen

Los algoritmos no son

expresados en el reporte.

Organización La información está muy bien

organizada con párrafos bien

redactados y con subtítulos con

estilos adecuados

La información está organizada,

pero no se distingue en estilos

adecuados

La información está organizada,

pero los párrafos no están bien

redactados

La información proporcionada

no parece estar organizada o es

copiada de referencias externas

de manera literal

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 14: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Entrega vía Web

• En un solo archivo comprimido (ZIP, RAR, TAR, JAR o GZIP)• Reporte (DOC, DOCX o PDF)

• Códigos fuente (.C, .H, etc.)

• Código documentado: Titulo, descripción, fecha, versión, autor.

• (Funciones y Algoritmos: ¿Qué hace?, ¿Cómo lo hace?, ¿Qué recibe?, ¿Qué devuelve?, ¿Causa de errores?).

• OBSERVACIONES

• *NO enviar ejecutables o archivos innecesarios, las instrucciones decompilación van en el anexo del reporte. (Yo compilare los fuente)

14

Grupo Contraseña

1CM7 Estructuras1cm7

1CM10 Estructuras1cm10

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez

Page 15: Practica 05: Codificación de Huffman - eafranco.com · •Huffman propuso un algoritmo que obtiene una codificación prefijo óptima. •Para ello construye un árbol binario de

Fechas de entrega

Compiladores (Análisis Léxico II - Edgardo A. Franco)

• Demostración Laboratorio de Programación 1 (1107)

• 1CM10, 1CM7 “Miércoles 06 de junio o miércoles13 de junio de 2018”.

• Entrega de reporte y código

• En un solo archivo comprimido.

• Fecha y hora limite de entrega vía Web

• Lunes 18 de Junio de 2018 a las 23:59:59 horas.

15

Estr

uct

ura

s d

e D

ato

sP

ract

ica

06

: Co

dif

icac

ión

de

Hu

ffm

anP

rof.

Edga

rdo

Ad

rián

Fra

nco

Mar

tín

ez