Está en la página 1de 8

4.

12 Codificación de
Huffman

Aplicaciones de la
Teoría de Grafos
a la vida real

Alberto Conejero y Cristina Jordán
Depto. Matemática Aplicada
E.T.S. Ingeniería Informática
Universitat Politècnica de València

Aplicaciones de la Teoría de Grafos a la vida real Ahorrar memoria. Es fundamental en la compresión de ficheros de video y audio.… La representación de caracteres o símbolos en ordenadores se puede realizar codificando en binario. ¿Cómo podemos conseguir este código? 4. La compresión de datos nos permitirá ahorrar espacio de memoria y reducir el tiempo de transmisión de datos. podríamos ahorrar memoria. utilizando palabras de longitud constante (por ejemplo el código ASCII con cadenas de longitud 7 bits). asociando a los caracteres más frecuentes cadenas de menor longitud.12 Codificación de Huffman . Si permitimos utilizar diferentes longitudes de cadena.

‘‘ +’’ . Ejemplos Caracteres ‘‘x’’.‘‘(’’. ‘‘)’’ Código 1: Código 2: x  01 x  1110 y  10 y  1111 )  11 (  00 *  101 +  0 *  110 +  10 )  01 (  00 ¿Qué significa? Código 1 00010101110101 00 01 0 10 11 101 01 ( x + y ) * x 0 00 10 101 11 01 01 + ( y * ) x x Código 2 001110101111011101110 00 1110 10 1111 01 110 1110 ( x + y ) * x 4.Aplicaciones de la Teoría de Grafos a la vida real Código prefijo Un conjunto de P de cadenas binarias asociadas a un conjunto de símbolos se llama código prefijo (también llamados códigos instantáneos) si ninguna de las cadenas de P es prefijo de otra cadena de P. ‘‘ y’’.12 Codificación de Huffman . ‘‘*’’.

Aplicaciones de la Teoría de Grafos a la vida real Código prefijo Los códigos obtenidos como se indica a continuación a partir de un árbol dirigido con raíz es un código prefijo Obtención de código prefijo 1. Se construye un árbol dirigido con raíz binario donde: el arco de salida izquierdo de cada vértice está etiquetado con 1 el arco de salida derecho de cada vértice está etiquetado con 0 2. Los vértices de grado de salida 0 (hojas) éstan etiquetados con caracteres Ejemplo 1 0 1 1 1 y 0 0 0 + 1 0 ) ( x  1110 +  10 y  1111 *  110 (  00 )  01 * x 4.12 Codificación de Huffman .

35. Las frecuencias con que éstos aparecen vienen reflejadas en la tabla siguiente: Caracteres x Frecuencias 10 y * + ( ) 10 15 25 20 20 20 ( 20 ) 10. 60 40 25 20 25 20 35 35 60 4. ‘‘ +’’ . 25. ‘‘)’’. 15. 35 20 25 15 25.Aplicaciones de la Teoría de Grafos a la vida real Ejemplo Obtención del mejor código prefijo asociado a los símbolos ‘‘x’’. 20. 20. 25 25 + 15 * 10 x 10 y 15.12 Codificación de Huffman . ‘‘ * ’’. 40 20 40 40. 20. 25 20 20.‘‘(’’. ‘‘ y’’. 10. 20. 20. 20.

‘‘ * ’’. ‘‘ +’’ . Las frecuencias con que éstos aparecen vienen reflejadas en la tabla siguiente: Caracteres x Frecuencias 10 y * + ( ) 10 15 25 20 20 0 1 1 ( 0 1 0 ) + x  0001 y  0000 *  001 +  01 (  11 )  10 1 * 0 1 x 0 y 4.‘‘(’’.Aplicaciones de la Teoría de Grafos a la vida real Ejemplo Obtención del mejor código prefijo asociado a los símbolos ‘‘x’’.12 Codificación de Huffman . ‘‘)’’. ‘‘ y’’.

 Se obtiene a partir de la construcción de un árbol binario con raíz donde los símbolos son las etiquetas de las hojas Datos de entrada Conjunto de símbolos junto a sus frecuencias (es decir.12 Codificación de Huffman . probabilidades de aparición) 4.Aplicaciones de la Teoría de Grafos a la vida real Código Huffman Objetivo  Obtención de código prefijo utilizando el menor número posible de bits. de entre todos los posibles códigos binarios para el conjunto de símbolos dados.

L. Si el número de elementos de la nueva lista L es distinto de 2 ir a PASO 2. PASO 3.12 Codificación de Huffman . pu y pv. pu+ pv. Se reemplaza el vértice cuya etiqueta sea la suma de dos valores. PASO 2. Se localizan los dos valores más pequeños de la lista. Se listan las frecuencias de menor a mayor.Aplicaciones de la Teoría de Grafos a la vida real Código Huffman Proceso PASO 1. PASO 4. Se eliminan de la lista L. Ir a PASO 4 hasta que las etiquetas del árbol dirigido con raíz generado coincidan con los valores de entrada dados. 4. Se inserta en L el valor pu+ pv de forma que siga siendo una lista de números creciente. Sea T(L) una arborescencia binaria con vértice raíz v0 y dos vértices de grado de entrada 1 que etiquetamos con los valores de la última lista L. por un árbol dirigido con raíz binario cuya raíz sea dicho vértice y los otros dos vértices tengan como etiquetas los valores pu y pv.