SlideShare una empresa de Scribd logo
Algoritmos voraces Códigos de Huffman
Descripción del problema Tenemos un  archivo de entrada . Asumiremos que el archivo está compuesto de  bytes  (enteros de 8 bits sin signo). El problema consiste en  codificar  (comprimir) el archivo de entrada utilizando el menor número posible de bits. Existe un algoritmo que resuelve el problema, y que es conocido como el  algoritmo de Huffman .
Solución del problema Se podría decir que la solución se obtiene aplicando cuatro fases: Crear un  vector de frecuencias  de aparición de cada byte en el archivo de entrada. Crear el  árbol óptimo de codificación  de Huffman a partir del vector de frecuencias. Crear una  tabla de codificación  a partir del árbol de codificación. La  codificación  propiamente dicha.
Vector de frecuencias Necesitamos conocer la  frecuencia  de aparición de cada byte en el archivo de entrada. Por tanto, tenemos que hacer una primera lectura del archivo de entrada. El objetivo es crear un vector de la forma: Si leemos un  255  … 5 … 5 3 … 0 25 6 256 255 … 98 97 … 2 1 0 -1 El índice es el valor del  byte El contenido es la  frecuencia 6 Sumamos 1
Árbol óptimo de codificación (1) Se crea utilizando el  algoritmo de Huffman . Este algoritmo se puede clasificar como  algoritmo voraz . Las  entradas  del algoritmo son los bytes presentes en el archivo de entrada. Trabaja con un  conjunto de árboles . Es decir, lo que se podría llamar un  bosque . Nodo  de un árbol de Huffman: Al enlace izquierdo se le asigna un valor 0 Al enlace derecho se le asigna un valor 1 Es lo que se llama un  trie binario  (leido “trai”) índice peso 0 1
Árbol óptimo de codificación (2) Los  nodos hoja  del árbol de Huffman serán los bytes leídos en el archivo de entrada. En ese caso: índice  = valor del byte (entre 0 y 255) peso  = frecuencia del byte A partir del vector de frecuencias construimos un  bosque  de árboles que sólo tienen un nodo. Cada nodo representará a un byte, con su índice (valor) y su peso (frecuencia). Un byte sólo está presente en este bosque inicial si aparece en el archivo de entrada con una frecuencia distinta de cero.
Árbol óptimo de codificación (3) Nuestro “bosque” inicial podría consistir, por ejemplo, en una lista de nodos. Ahora debemos extraer los dos nodos con  menor peso . Esto nos hace pensar que una lista no es la mejor opción posible, pero comentaremos esto más adelante. índice  = 97 peso  = 10 índice  = 32 peso  = 8 índice  = 9 peso  = 10 índice  = 72 peso  = 3
Árbol óptimo de codificación (4) A partir de los dos nodos con menor peso extraídos se construye un nuevo nodo. Su  peso  será la suma de los pesos de sus hijos. El  índice  es indiferente por ahora. Sólo es importante para la construcción de la tabla de codificación. A partir de ahora tomará los valores 256, 257, 258, etc. El nodo así creado se debe introducir en el bosque para realizar  una nueva selección. índice  = 97 peso  = 10 índice  = 9 peso  = 10 índice  = 32 peso  = 8 índice  = 72 peso  = 3 índice  = 256 peso  = 11
Árbol óptimo de codificación (5) El proceso es iterativo: índice  = 32 peso  = 8 índice  = 72 peso  = 3 índice  = 256 peso  = 11 índice  = 9 peso  = 10 índice  = 97 peso  = 10 índice  = 257 peso  = 20
Árbol óptimo de codificación (6) Hasta que nos quedamos con un único nodo: (Vacío) índice  = 32 peso  = 8 índice  = 72 peso  = 3 índice  = 256 peso  = 11 índice  = 9 peso  = 10 índice  = 97 peso  = 10 índice  = 257 peso  = 20 índice  = 258 peso  = 31
Árbol óptimo de codificación (7) En la siguiente extracción, el bosque queda vacío y obtenemos el árbol de Huffman: índice  = 32 peso  = 8 índice  = 72 peso  = 3 índice  = 9 peso  = 10 índice  = 97 peso  = 10 (Vacío) ¿Codificación de  97 ? 0 1 10 índice  = 255 peso  = 11 índice  = 256 peso  = 20 índice  = 257 peso  = 31 1 0 1 0
Árbol óptimo de codificación (8) Es posible que haya notado que son posibles varios árboles de codificación. Todos son óptimos en el sentido de que proporcionan una codificación con el menor número de bits. La mejor estructura para almacenar los nodos del bosque (conjunto de candidatos) es una  cola de prioridad , donde la  prioridad  es el  peso  del nodo. Esto nos permite extraer el mínimo de una manera eficaz.
Árbol óptimo de codificación (9) El estudio de Huffman nos dice que si el número de entradas es  C , el número máximo de nodos del árbol de codificación es  2C – 1 . Esto nos permite utilizar como cola de prioridad un  montículo binario . Recordar que un montículo binario se implementa con un array. En nuestro caso C es, como máximo, igual a 256. El montículo binario puede tener un tamaño seguro de (2 * 256 – 1).
Tabla de codificación (1) La tabla de codificación es un paso intermedio entre el árbol de codificación y la verdadera codificación. Se construye para que la codificación sea más sencilla y rápida. Sin embargo, para construirla es necesario que cada nodo del árbol de Huffman pueda  referenciar a su padre , y que almacene información sobre el  tipo de hijo  que es él mismo (0 ó 1).
Tabla de codificación (2) Un nodo de la tabla de codificación puede contener la información siguiente: La tabla consiste en un array que sirve para indexar nodos de codificación. El tamaño de este array nos lo indica el índice del nodo raíz del árbol Huffman. tipoHijo indicePadre peso
Tabla de codificación (3) Se crear el array para indexar. El árbol se recorre en  preorden . Y así hasta recorrer todo el árbol … índice  = 32 peso  = 8 índice  = 72 peso  = 3 índice  = 9 peso  = 10 índice  = 97 peso  = 10 0 1 257 256 255 72 32 índice  = 255 peso  = 11 índice  = 256 peso  = 20 índice  = 257 peso  = 31 1 0 1 0 -1 31 0 257 11 0 255 3 1 255 8
Codificación La codificación a partir de la tabla de codificación es casi inmediata. Es necesaria una segunda lectura del archivo. ¿Codificación de  32 ? 1 0 fin Por tanto, la codificación es … 0 1 257 256 255 72 32 -1 31 0 257 11 0 255 3 1 255 8
Complejidad Estudiemos la complejidad del algoritmo que crea el árbol de Huffman, que es el que nos interesa por ser voraz. La extracción en una cola de prioridad tiene una complejidad  O(logn) . Por tanto, la complejidad de todo el algoritmo, que es iterativo, será  O(n logn) .
Consideraciones finales Para conseguir la  decodificación  es necesario almacenar en el archivo codificado más información que los bits de los códigos. Evidentemente nos interesa que esa información ocupe el menor espacio posible. ¿Quizás la tabla de codificación? Pero esta, es otra historia …
Bibliografía Estructuras de datos en Java Mark Allen Weiss Editorial: Addison-Wesley Técnicas de Diseño de Algoritmos Rosa Guerequeta y Antonio Vallecillo

Más contenido relacionado

PPTX
357502575-resuelto-TPN-2-Muestreo.pptx
PPTX
Tema 4 codificación de canal
PPTX
PDF
Códigos de línea
PPT
PPT
Mod demod am_2014_1(1)
PPTX
3.PCM Digitalizacion de señal analogica
PPTX
codificaciones unipolar, polar, bipolar
357502575-resuelto-TPN-2-Muestreo.pptx
Tema 4 codificación de canal
Códigos de línea
Mod demod am_2014_1(1)
3.PCM Digitalizacion de señal analogica
codificaciones unipolar, polar, bipolar

La actualidad más candente (20)

PPT
Lecture 3 codificación fuente
PPT
CODIGO DE HUFFMAN
PPT
Lecture 6 formateo de señales en pcm
PPTX
Modulacion am
PPTX
Huffman y-lzw
DOCX
Señales digitales tran z
PPTX
Sección 2.6: Sistemas descritos mediante ecuaciones en diferencias
PPTX
Modulación por desplazamiento de fase (psk) exposicion
PPTX
Huffman
PDF
PPTX
Códigos
PDF
Practica #15 modulacion - demodulacion FSK
PPTX
Unidad 2 TELECOMUNICACIONES
PDF
Ejercicios Modulación Análoga & Digital resultados(fam)-rev3
PPTX
Modulacion y Codificacion Digital - Analogo (ASK, FSK & PSK)
PPTX
Capacidad del canal
PPTX
Seccion 3.5 Análisis en el dominio Z de sistemas LTI
PDF
Muestreo y cuantificación de una señal analógica con MatLab
PDF
Informe laboratorio n°1
PPT
Teorema del muestro y PCM
Lecture 3 codificación fuente
CODIGO DE HUFFMAN
Lecture 6 formateo de señales en pcm
Modulacion am
Huffman y-lzw
Señales digitales tran z
Sección 2.6: Sistemas descritos mediante ecuaciones en diferencias
Modulación por desplazamiento de fase (psk) exposicion
Huffman
Códigos
Practica #15 modulacion - demodulacion FSK
Unidad 2 TELECOMUNICACIONES
Ejercicios Modulación Análoga & Digital resultados(fam)-rev3
Modulacion y Codificacion Digital - Analogo (ASK, FSK & PSK)
Capacidad del canal
Seccion 3.5 Análisis en el dominio Z de sistemas LTI
Muestreo y cuantificación de una señal analógica con MatLab
Informe laboratorio n°1
Teorema del muestro y PCM
Publicidad

Destacado (19)

PPTX
Presentacion de uetemm
PDF
Arbol De Huffman
PPTX
Datos agrupados 01
PPTX
Inventarios de habitaciòn
DOCX
Inventario de bienes muebles
PPT
CODIFICACIÒN
DOC
Formatos de inventarios
PDF
Codificación e identificación de productos – código de barras GS1
PPTX
Inventarios para el servicio de alimentos y bebidas
PDF
Máximo Común Divisor (mcd) y Mínimo Común Múltiplo (mcm)
PPT
El nombre de dios y sus significados
PDF
Sidur bircat shelomo libro de rezos
PPT
Meditacion en los 72 nombres de Dios
PDF
Sidur LOS CAMINOS DE LA TORA Nusaj Sefardí Antiguo
PDF
pinjas arameo y español
PDF
72nombresde diosfichas
PDF
Descubra suas letras hebraicas de poder
PPT
Clasificación arancelaria
PPTX
Tipos, Clasificación y Estilos de Muebles
Presentacion de uetemm
Arbol De Huffman
Datos agrupados 01
Inventarios de habitaciòn
Inventario de bienes muebles
CODIFICACIÒN
Formatos de inventarios
Codificación e identificación de productos – código de barras GS1
Inventarios para el servicio de alimentos y bebidas
Máximo Común Divisor (mcd) y Mínimo Común Múltiplo (mcm)
El nombre de dios y sus significados
Sidur bircat shelomo libro de rezos
Meditacion en los 72 nombres de Dios
Sidur LOS CAMINOS DE LA TORA Nusaj Sefardí Antiguo
pinjas arameo y español
72nombresde diosfichas
Descubra suas letras hebraicas de poder
Clasificación arancelaria
Tipos, Clasificación y Estilos de Muebles
Publicidad

Similar a Código Huffman (20)

DOCX
Algoritmos compresión Cubi-Romero-Toledo
PDF
Semana 5: CTW y Diccionarios
PPTX
Grafos 9.2 2016
PDF
Codificación de huffman
PPTX
Grafos 9.2_2016
PPTX
CE143 - S06 Compresión de datos y ecuaciones en diferencias_c1 (1).pptx
PPTX
CE143 - S06 Compresión de datos y ecuaciones en diferencias_c1.pptx
PDF
Grafos 9.2 2016
DOC
(86)resumen visual basic
ODP
PDF
Algoritmos de compresion
DOCX
Asignación de direcciones ip capitulo8
PPT
Codigos De Huffman
PDF
Direccionamiento de red IPv4
PPTX
CODIGO HUFFMAN-1.pptx
DOCX
Cuarto periodo
PDF
Comandos vb
PDF
Algoritmo md5
DOCX
Codigos binarios
PPTX
Clase06 25-06-12
Algoritmos compresión Cubi-Romero-Toledo
Semana 5: CTW y Diccionarios
Grafos 9.2 2016
Codificación de huffman
Grafos 9.2_2016
CE143 - S06 Compresión de datos y ecuaciones en diferencias_c1 (1).pptx
CE143 - S06 Compresión de datos y ecuaciones en diferencias_c1.pptx
Grafos 9.2 2016
(86)resumen visual basic
Algoritmos de compresion
Asignación de direcciones ip capitulo8
Codigos De Huffman
Direccionamiento de red IPv4
CODIGO HUFFMAN-1.pptx
Cuarto periodo
Comandos vb
Algoritmo md5
Codigos binarios
Clase06 25-06-12

Más de Salvador Fernández Fernández (20)

PDF
Servicio web soap en java con net beans
PDF
Ejemplo Base de Datos SQLite (Android)
PDF
PDF
Ejemplo de paso de funciones como parámetros a otra función
PDF
Ejemplo usopunteros
PDF
Solucion ejercicios punteros cadenas-vectores
PDF
Ejercicios punteros cadenas-vectores
PDF
Diagramas de flujo
PDF
Introducción a Enterprise Java Beans
PDF
Colorear fotografias en blanco y negro
PDF
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
PDF
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
PDF
PDF
Cableado Estructurado de Red
PDF
Redes De Computadores UOC
PDF
Fundamentos Divide Y Venceras
PDF
Divide y Vencerás
PDF
Java orientado a objetos
Servicio web soap en java con net beans
Ejemplo Base de Datos SQLite (Android)
Ejemplo de paso de funciones como parámetros a otra función
Ejemplo usopunteros
Solucion ejercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectores
Diagramas de flujo
Introducción a Enterprise Java Beans
Colorear fotografias en blanco y negro
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
10 mentiras con las que siempre engañan a los diseñadores gráficos por John Dani
Cableado Estructurado de Red
Redes De Computadores UOC
Fundamentos Divide Y Venceras
Divide y Vencerás
Java orientado a objetos

Último (20)

PPTX
Mecanismos-de-Propagacion de ondas electromagneticas
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
PPTX
Curso de generación de energía mediante sistemas solares
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PDF
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
PPTX
Sesion 1 de microsoft power point - Clase 1
PDF
Diapositiva proyecto de vida, materia catedra
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
DOCX
Zarate Quispe Alex aldayir aplicaciones de internet .docx
PPTX
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
PPTX
Presentación de Redes de Datos modelo osi
PDF
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
PPTX
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx
Mecanismos-de-Propagacion de ondas electromagneticas
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
Curso de generación de energía mediante sistemas solares
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
informe_fichas1y2_corregido.docx (2) (1).pdf
Instrucciones simples, respuestas poderosas. La fórmula del prompt perfecto.
la-historia-de-la-medicina Edna Silva.pptx
Historia Inteligencia Artificial Ana Romero.pptx
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
CONTABILIDAD Y TRIBUTACION, EJERCICIO PRACTICO
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
Sesion 1 de microsoft power point - Clase 1
Diapositiva proyecto de vida, materia catedra
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
Zarate Quispe Alex aldayir aplicaciones de internet .docx
ANCASH-CRITERIOS DE EVALUACIÓN-FORMA-10-10 (2).pptx
Presentación de Redes de Datos modelo osi
programa-de-estudios-2011-guc3ada-para-el-maestro-secundarias-tecnicas-tecnol...
sa-cs-82-powerpoint-hardware-y-software_ver_4.pptx

Código Huffman

  • 2. Descripción del problema Tenemos un archivo de entrada . Asumiremos que el archivo está compuesto de bytes (enteros de 8 bits sin signo). El problema consiste en codificar (comprimir) el archivo de entrada utilizando el menor número posible de bits. Existe un algoritmo que resuelve el problema, y que es conocido como el algoritmo de Huffman .
  • 3. Solución del problema Se podría decir que la solución se obtiene aplicando cuatro fases: Crear un vector de frecuencias de aparición de cada byte en el archivo de entrada. Crear el árbol óptimo de codificación de Huffman a partir del vector de frecuencias. Crear una tabla de codificación a partir del árbol de codificación. La codificación propiamente dicha.
  • 4. Vector de frecuencias Necesitamos conocer la frecuencia de aparición de cada byte en el archivo de entrada. Por tanto, tenemos que hacer una primera lectura del archivo de entrada. El objetivo es crear un vector de la forma: Si leemos un 255 … 5 … 5 3 … 0 25 6 256 255 … 98 97 … 2 1 0 -1 El índice es el valor del byte El contenido es la frecuencia 6 Sumamos 1
  • 5. Árbol óptimo de codificación (1) Se crea utilizando el algoritmo de Huffman . Este algoritmo se puede clasificar como algoritmo voraz . Las entradas del algoritmo son los bytes presentes en el archivo de entrada. Trabaja con un conjunto de árboles . Es decir, lo que se podría llamar un bosque . Nodo de un árbol de Huffman: Al enlace izquierdo se le asigna un valor 0 Al enlace derecho se le asigna un valor 1 Es lo que se llama un trie binario (leido “trai”) índice peso 0 1
  • 6. Árbol óptimo de codificación (2) Los nodos hoja del árbol de Huffman serán los bytes leídos en el archivo de entrada. En ese caso: índice = valor del byte (entre 0 y 255) peso = frecuencia del byte A partir del vector de frecuencias construimos un bosque de árboles que sólo tienen un nodo. Cada nodo representará a un byte, con su índice (valor) y su peso (frecuencia). Un byte sólo está presente en este bosque inicial si aparece en el archivo de entrada con una frecuencia distinta de cero.
  • 7. Árbol óptimo de codificación (3) Nuestro “bosque” inicial podría consistir, por ejemplo, en una lista de nodos. Ahora debemos extraer los dos nodos con menor peso . Esto nos hace pensar que una lista no es la mejor opción posible, pero comentaremos esto más adelante. índice = 97 peso = 10 índice = 32 peso = 8 índice = 9 peso = 10 índice = 72 peso = 3
  • 8. Árbol óptimo de codificación (4) A partir de los dos nodos con menor peso extraídos se construye un nuevo nodo. Su peso será la suma de los pesos de sus hijos. El índice es indiferente por ahora. Sólo es importante para la construcción de la tabla de codificación. A partir de ahora tomará los valores 256, 257, 258, etc. El nodo así creado se debe introducir en el bosque para realizar una nueva selección. índice = 97 peso = 10 índice = 9 peso = 10 índice = 32 peso = 8 índice = 72 peso = 3 índice = 256 peso = 11
  • 9. Árbol óptimo de codificación (5) El proceso es iterativo: índice = 32 peso = 8 índice = 72 peso = 3 índice = 256 peso = 11 índice = 9 peso = 10 índice = 97 peso = 10 índice = 257 peso = 20
  • 10. Árbol óptimo de codificación (6) Hasta que nos quedamos con un único nodo: (Vacío) índice = 32 peso = 8 índice = 72 peso = 3 índice = 256 peso = 11 índice = 9 peso = 10 índice = 97 peso = 10 índice = 257 peso = 20 índice = 258 peso = 31
  • 11. Árbol óptimo de codificación (7) En la siguiente extracción, el bosque queda vacío y obtenemos el árbol de Huffman: índice = 32 peso = 8 índice = 72 peso = 3 índice = 9 peso = 10 índice = 97 peso = 10 (Vacío) ¿Codificación de 97 ? 0 1 10 índice = 255 peso = 11 índice = 256 peso = 20 índice = 257 peso = 31 1 0 1 0
  • 12. Árbol óptimo de codificación (8) Es posible que haya notado que son posibles varios árboles de codificación. Todos son óptimos en el sentido de que proporcionan una codificación con el menor número de bits. La mejor estructura para almacenar los nodos del bosque (conjunto de candidatos) es una cola de prioridad , donde la prioridad es el peso del nodo. Esto nos permite extraer el mínimo de una manera eficaz.
  • 13. Árbol óptimo de codificación (9) El estudio de Huffman nos dice que si el número de entradas es C , el número máximo de nodos del árbol de codificación es 2C – 1 . Esto nos permite utilizar como cola de prioridad un montículo binario . Recordar que un montículo binario se implementa con un array. En nuestro caso C es, como máximo, igual a 256. El montículo binario puede tener un tamaño seguro de (2 * 256 – 1).
  • 14. Tabla de codificación (1) La tabla de codificación es un paso intermedio entre el árbol de codificación y la verdadera codificación. Se construye para que la codificación sea más sencilla y rápida. Sin embargo, para construirla es necesario que cada nodo del árbol de Huffman pueda referenciar a su padre , y que almacene información sobre el tipo de hijo que es él mismo (0 ó 1).
  • 15. Tabla de codificación (2) Un nodo de la tabla de codificación puede contener la información siguiente: La tabla consiste en un array que sirve para indexar nodos de codificación. El tamaño de este array nos lo indica el índice del nodo raíz del árbol Huffman. tipoHijo indicePadre peso
  • 16. Tabla de codificación (3) Se crear el array para indexar. El árbol se recorre en preorden . Y así hasta recorrer todo el árbol … índice = 32 peso = 8 índice = 72 peso = 3 índice = 9 peso = 10 índice = 97 peso = 10 0 1 257 256 255 72 32 índice = 255 peso = 11 índice = 256 peso = 20 índice = 257 peso = 31 1 0 1 0 -1 31 0 257 11 0 255 3 1 255 8
  • 17. Codificación La codificación a partir de la tabla de codificación es casi inmediata. Es necesaria una segunda lectura del archivo. ¿Codificación de 32 ? 1 0 fin Por tanto, la codificación es … 0 1 257 256 255 72 32 -1 31 0 257 11 0 255 3 1 255 8
  • 18. Complejidad Estudiemos la complejidad del algoritmo que crea el árbol de Huffman, que es el que nos interesa por ser voraz. La extracción en una cola de prioridad tiene una complejidad O(logn) . Por tanto, la complejidad de todo el algoritmo, que es iterativo, será O(n logn) .
  • 19. Consideraciones finales Para conseguir la decodificación es necesario almacenar en el archivo codificado más información que los bits de los códigos. Evidentemente nos interesa que esa información ocupe el menor espacio posible. ¿Quizás la tabla de codificación? Pero esta, es otra historia …
  • 20. Bibliografía Estructuras de datos en Java Mark Allen Weiss Editorial: Addison-Wesley Técnicas de Diseño de Algoritmos Rosa Guerequeta y Antonio Vallecillo