Análisis de algoritmos

Documentos relacionados
Análisis de algoritmos

Estructuras de Datos. Practica 06: Codificación de Huffman

Análisis de algoritmos

Practica 05: El problema de las N-Reinas

Practica 01: Evaluación de expresiones infijas

Practica 04: Soluciones Recursivas

Practica 03: Diccionario con hashing abierto

Practica 02: Simulaciones con el TAD Cola

Análisis de algoritmos

Practica 03: Uso de expresiones regulares en Python

Análisis de algoritmos

Practica 04: Sistema bancario

Practica 01:Prefijos, sufijos, subcadenasy operaciones con cadenas

Practica 02: Operaciones entre lenguajes

Practica 03: Eliminación Gaussiana

Practica 07: Maquina de Turing

Practica 04:Conversión de AFN a AFD

Practica 06:Autómata de pila de una GLC

Practica 05: Limpieza de gramáticas libres de contexto

Práctica 01 - Preprocesamiento básico para un código fuente en lenguaje C Compiladores - Profr. Edgardo Adrián Franco Martínez

Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información Organización del Computador CI-3815

Tema 01: Presentación de la unidad de aprendizaje

Clase 01: Presentación del curso

Encuadre de la Unidad de Aprendizaje

Laboratorio 02: Ejercicios de programación en C

Practica 02: Construcción de bibliotecas en C

Algoritmos glotones 2 (código de Huffman) mat-151

Estructura de Datos. Códigos de Huffman. Primer Semestre, Compresión de Archivos. Compresión de Archivos

Proyecto final "Sistema de instrumentación virtual"

ÁRBOLES CRISTIAN ALFREDO MUÑOZ ÁLVAREZ JUAN DAVID LONDOÑO CASTRO JUAN PABLO CHACÓN PEÑA EDUARDO GONZALES

Presentación de la unidad de aprendizaje

Análisis de algoritmos

Compresión. UCR ECCI CI-2414 Recuperación de Información Prof. M.Sc. Kryscia Daviana Ramírez Benavides

Tema 02: Algoritmia y pseudocódigo

Tema 08: TAD Árbol. M. en C. Edgardo Adrián Franco Martínez edgardoadrianfrancom

Ejercicios 01: Diagramas de flujo y pseudocódigo

Estructura de datos y de la información Boletín de problemas - Tema 10

F. Javier Gil Chica 2010

INSTITUTO POLITÉCNICO NACIONAL

Ejercicio 05: Mapa conceptual: Estructuras de Datos Lineales (Pilas, Colas & Listas)

Algoritmos voraces (greedy)

Tratamiento probabilístico de la Información. INGENIERÍA DE SISTEMAS Cursada 2017

Tema 2 Introducción a la Programación en C.

Tema 14: Arreglos estáticos en C

COMPRESIÓN DE MENSAJES

Tema 09: Convertidor Analógico Digital

Práctica 03 Ejercicios con Lex

Tema II: Metodología para la construcción de programas. Profesora: Nelly García Mora

Tema 04: Lenguajes de programación y el lenguaje C

Análisis de algoritmos

Compresión de Datos. Método de Huffman. Dpto. Informática

17 Análisis sintáctico II Compiladores - Profr. Edgardo Adrián Franco Martínez. Gramáticas limpias y bien formadas

Algoritmos y Complejidad

Lunes: 07:00-09:00 hrs Miércoles: 18:00-20:00 hrs. I. Fundamentos de las estructuras de datos II. Estructuras de datos fundamentales

Tema II: Metodología para la construcción de programas

Lógica: Algoritmo: Archivo: Base de datos: Bit:

Práctica 5. Códigos Huffman y Run-Length

Fundamentos de Informática 3. Construcción de Software

Facultad de Ciencias de la Computación

Tema: Introducción a la Programación Estructurada

Clase 01 y 02: Presentación de la unidad de aprendizaje

Proyecto programado 2

Tarea 3 Búsqueda por Interpolación y Extrapolación

Practica 01: Programación en C bajo Linux y funciones

Tema 08: Convertidor Digital Analógico

Diseño Estructurado de Algoritmo

TRABAJO PRACTICO Nº 1 Traductor ASCII / BASE64

DISEÑO DE ALGORITMOS. Ingeniería Ingeniería en Sistemas. Hardware. Clave de la materia: 215. UNIVERSIDAD AUTÓNOMA DE CHIHUAHUA Clave: 08MSU0017H

INSTITUTO TECNOLÓGICO DE MORELIA

Capítulo 9. Introducción a los lenguajes formales. Continuar

Tema 09: TAD Árbol binario

Télématique ISSN: Universidad Privada Dr. Rafael Belloso Chacín. Venezuela

Banda Ancha. Compresión, Almacenamiento y Transmisión Eficiente de Señales de Voz, Video y Datos. MSc. Luis Rojas

DIPLOMADO VIRTUAL EN GESTÓN CULTURAL CURSO POLÍTICAS CULTURALES RÚBRICAS DE EVALUACIÓN POR UNIDADES

CURSO: INGENIERÍA DE TELECOMUNICACIONES TRABAJO COLABORATIVO 2 Director de Curso: Mg. Sixto Enrique Campaña Bastidas

PROGRAMA INSTITUCIONAL DOMINÓ TIC-ENP P á g i n a 1

Análisis y Complejidad de Algoritmos. Arboles Binarios. Arturo Díaz Pérez

01 Presentación del curso Investigación 1

Sistemas de Información. MTI Arturo López Saldiña

Lenguajes. Ciclo de desarrollo. Cód. Máquina Lenguajes alto nivel Lenguaje ensamblador 6-2. Introducción a los microprocesadores IIE FI - UDELAR

Ejercicios: Programación en C

Algoritmos Voraces. Introducción. Andrés Becerra Sandoval. Lenguajes III. Ponticia Universidad Javeriana

MANUAL DEL TRABAJO RECEPCIONAL TSU

Se impartirán clases presenciales para fortalecer el conocimiento de las distintas estructuras de datos

Lunes: 18:00-20:00 hrs Miércoles: 18:00-20:00 hrs. I. Fundamentos de las estructuras de datos II. Estructuras de datos fundamentales

PROGRAMA DE LABORATORIO POS-REQUISITO: Primer Semestre 2019 Ing. Mario José Bautista Fuentes AUXILIAR: Nery Galvez

Análisis de algoritmos

3.Conocimientos previos requeridos 7.Estimación de la dedicación del alumno. 4.Contenidos mínimos. 1.Introducción. 2.Objetivos generales

GUÍA DOCENTE ABREVIADA DE LA ASIGNATURA

Algo sobre Compresión de Datos

Laboratorio 03: Ejercicios de Programación con la estructura para (for)

: Algorítmica y Estructura de Datos I

UNIVERSIDAD AUTÓNOMA DEL ESTADO DE HIDALGO ESCUELA PREPARATORIA DE CD. SAHAGÚN NOMBRE DE LA ASIGNATURA: BIOLOGÍA BÁSICA SEMESTRE: PRIMERO.

Transcripción:

Practica 03: Codificación voraz de Huffman M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com edfrancom@ipn.mx @edfrancom edgardoadrianfrancom 1

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 Fechas de Entrega 2

Definición del problema Implementar el algoritmo de codificación de Huffman para codificar archivos de cualquier tipo bajo lenguaje C. Implementar codificación voraz de Huffman Implementar el algoritmo de decodificación Medir y comprobar las ventajas de tamaño de los archivos una vez realizadas diferentes codificaciones de archivos. Medir los tiempos de ejecución de las implementaciones (codificador y decodificador). 3 Compiladores (Análisis Léxico II - Edgardo A. Franco)

Algoritmo de Huffman El algoritmo de Huffman es un algoritmo para la construcción de códigos de Huffman, desarrollado por David A. Huffman en 1952 y descrito en A Method for the Construction of Minimum- Redundancy Codes. Este algoritmo toma un alfabeto de n símbolos, junto con sus frecuencias de aparición asociadas, y produce un código de Huffman para ese alfabeto y esas frecuencias. 4 Compiladores (Análisis Léxico II - Edgardo A. Franco)

El algoritmo de Huffman es un algoritmo para la construcción de códigos de Huffman, desarrollado por David A. Huffman en 1952 y descrito en A Method for the Construction of Minimum-Redundancy Codes. Este algoritmo toma un alfabeto de n símbolos, junto con sus frecuencias de aparición asociadas, y produce un código de Huffman para ese alfabeto y esas frecuencias. Es un algoritmo usado para compresión de datos. El termino se requiere al uso de una tabla de códigos de longitud variable para codificar un determinado símbolo (como puede ser un carácter en un archivo), donde la tabla ha sido rellenada de una manera especifica basándose en la probabilidad estimada de aparición de cada posible valor de dicho símbolo. Compiladores (Análisis Léxico II - Edgardo A. Franco) 5

Huffman propuso un algoritmo voraz que obtiene una codificación prefijo óptima. Para ello construye un árbol binario de códigos 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 están 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 codificación óptimo. 6

Pasos del código de Huffman 1. Se crean varios árboles, uno por cada uno de los símbolos del alfabeto, consistiendo cada uno de los árboles en un nodo sin hijos, y etiquetado cada uno con su símbolo asociado y su frecuencia de aparición. 2. Se toman los dos árboles de menor frecuencia, y se unen creando un nuevo árbol. La etiqueta de la raíz será la suma de las frecuencias de las raíces de los dos árboles que se unen, 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. 7

ETAPA 1 F:5 E:9 C:12 B:13 D:16 A:45 ETAPA 2 14 C:12 B:13 D:16 A:45 ETAPA 3 F:5 E:9 14 D:16 25 A:45 F:5 E:9 C:12 B:13 ETAPA 4 25 C:12 B:13 30 A:45 14 F:5 E:9 D:16 8

ETAPA 4 55 A:45 Una vez terminado el árbol se puede ver con facilidad cuál es el código de los símbolos 25 C:12 B:13 14 F:5 E:9 30 D:16 Ejemplo: E: subiendo por el árbol se recorren ramas etiquetadas con 1, 0, 1 y 1; por lo tanto, el código es 1101. ETAPA Final 55 D: se recorren las ramas 1, 1 y 1, por lo que el código es 111. A:45 55 25 30 C:12 B:13 14 F:5 E:9 D:16 A: 0 B: 101 C: 100 D: 111 E: 1101 F: 1100 9

Decodificación del código de Huffman 1. A partir del árbol de codificación, comenzar a recorrer los caminos según los bits de la codificación. Al llegar a un nodo hoja 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ón comenzando un nuevo recorrido a partir de la raíz del árbol de la codificación. 3. La decodificación termina una vez se hallan recorrido todos los bits de la codificación. 10

Actividades 1. Entender el algoritmo de codificación voraz de Huffman e implementarlo en lenguaje C para codificar cualquier archivo. 2. Documentar y explicar el algoritmo y la implementación de este en C. 3. Construir el programa que sea capaz de reconstruir el archivo codificado a su codificación original. 4. Documentar la implementación y realizar estadísticas de compresión para distintos archivos. 11 Compiladores (Análisis Léxico II - Edgardo A. Franco)

5. Encontrar una aproximación de la función de compresión (grafica de % de comprensión alcanzados con distintos tamaños de archivos). 6. Para cada implementación realizada medir los tiempos de ejecución (tiempo de codificación y decodificación). 7. Encontrar una aproximación de la función temporal para distintos tamaños de problema. 12 Compiladores (Análisis Léxico II - Edgardo A. Franco)

8. Finalmente responda a las siguientes preguntas: i. Los niveles de codificación de archivos proporcionan una ventaja respecto al tamaño del archivo original en el promedio de los casos? ii. Los tiempos de codificación o decodificación del archivo son muy grandes? iii. Ocurrieron perdidas de la información al codificar los iv. archivos? El comportamiento experimental del algoritmos era el esperado? Por que? v. Qué características deberá tener una imagen BMP para codificarse en menor espacio? vi. Qué características deberá de tener un archivo de texto para tener una codificación en menor espacio? vii. De 3 aplicaciones posibles en problemas de la vida real a la codificación de Huffman. viii. Existió un entorno controlado para realizar las pruebas experimentales? Cuál fue? ix. Qué recomendaciones darían a nuevos equipos para realizar esta practica? 13 Compiladores (Análisis Léxico II - Edgardo A. Franco)

Observaciones Es necesario probar con una gran cantidad de archivos para poder concluir mejor aspectos como % de compresión esperados, factores que modifican la codificación, ventajas y desventajas. Indique cual fue su plataforma experimental (Características del hardware, compilador, sistema operativo, entorno controlado, etc.) Se sugiere crear scripts que faciliten la experimentación. En el laboratorio mostrar el funcionamiento de las tres implementaciones. Autodocumentación del código Documentación de funciones y algoritmos Archivos de prueba suficientes y variados clasificados por tipo y características. 14

Reporte de practica Portada Introducción (Teoría sobre Programación voraz y Huffman) Planteamiento del problema Algoritmos (Codificación y decodificación) Descripción de la abstracción del problema y el algoritmo que da solución, apoyándose de pseudocódigo, diagramas y figuras en un lenguaje claro. Implementación de los algoritmos (Según los algoritmos utilizados como se implementaron en el código) Actividades y Pruebas (Actividades, verificación de la solución, pruebas y resultados de la práctica según lo solicitado) Errores detectados (Si existe algún error detectado, el cuál no fue posible resolver o se desconoce el motivo y solo ocurre con ciertas condiciones es necesario describirlo) Posibles mejoras (Describir posibles disminuciones de código en la implementació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) 15

Rubrica de evaluación del reporte 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 son tomados de otras fuentes y no son originales. 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 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 16

Entrega vía Web Grupo 3CM1 3CM3 Contraseña analisis3cm1 analisis3cm3 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 de compilación van en el anexo del reporte. (Yo compilare los fuente) 17

Fechas de entrega Demostración Laboratorio de Programación 2 (2107) 3CM3 Lunes 11 o lunes 18 de junio de 2018. 3CM1 Miércoles 13 o miércoles 20 de junio de 2018. Entrega de reporte y código En un solo archivo comprimido. Fecha y hora limite de entrega vía Web Martes 19 de Junio de 2018 a las 23:59:59 hrs. 18 Compiladores (Análisis Léxico II - Edgardo A. Franco)