SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
Árbol de Huffman


   Estructura de Datos
Descripción del problema
n Tenemos un archivo de entrada.
n Asumiremos que el archivo está compuesto
  de bytes (enteros de 8 bits sin signo).
n El problema consiste en codificar
  (comprimir) el archivo de entrada utilizando el
  menor número posible de bits.
n Existe un algoritmo que resuelve el problema,
  y que es conocido como el algoritmo de
  Huffman.

               Estrutura de Datos 2009 - II - Renzo Loui Chavez   2
                             Caycho - 08200088
Solución del problema
     Se podría decir que la solución se obtiene
     aplicando cuatro fases:
1.   Crear un vector de frecuencias de
     aparición de cada byte en el archivo de
     entrada.
2.   Crear el árbol óptimo de codificación de
     Huffman a partir del vector de frecuencias.
3.   Crear una tabla de codificación a partir del
     árbol de codificación.
4.   La codificación propiamente dicha.
                 Estrutura de Datos 2009 - II - Renzo Loui Chavez   3
                               Caycho - 08200088
Vector de frecuencias
n Necesitamos conocer la frecuencia de aparición de
  cada byte en el archivo de entrada.
n Por tanto, tenemos que hacer una primera lectura del
  archivo de entrada.
n El objetivo es crear un vector de la forma:
                                                                  El índice es el
                                                                  valor del byte

-1   0    1        2            …             97        98            …        255 256

     6   25        0            …              3        5             …         5
                                                                                6

              El contenido es                                       Sumamos 1
              la frecuencia Datos 2009 - II - Renzo Loui Chavez
                      Estrutura de                                                     4
                                    Caycho - 08200088                 Si leemos un 255 …
Árbol óptimo de codificación (1)
n Se crea utilizando el algoritmo de Huffman.
n Este algoritmo se puede clasificar como
  algoritmo voraz.
n Las entradas del algoritmo son los bytes
  presentes en el archivo de entrada.
n Trabaja con un conjunto de árboles. Es
  decir, lo que se podría llamar un bosque.
n Nodo de un árbol de Huffman:         índice
  • Al enlace izquierdo se le asigna un valor 0                          peso
  • Al enlace derecho se le asigna un valor 1
                                                                     0          1
  Es lo que se llama un trie binario II(leido “trai”)
                     Estrutura de Datos 2009 - - Renzo Loui Chavez
                                   Caycho - 08200088
                                                                                    5
Árbol óptimo de codificación (2)
n Los nodos hoja del árbol de Huffman serán los
  bytes leídos en el archivo de entrada. En ese caso:
   n   índice = valor del byte (entre 0 y 255)
   n   peso = frecuencia del byte
n 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).
n Un byte sólo está presente en este bosque inicial si
  aparece en el archivo de entrada con una frecuencia
  distinta de cero.
                     Estrutura de Datos 2009 - II - Renzo Loui Chavez   6
                                   Caycho - 08200088
Árbol óptimo de codificación (3)
n Nuestro “bosque” inicial podría consistir, por
  ejemplo, en una lista de nodos.

     índice = 97      índice = 32                       índice = 9    índice = 72
      peso = 10        peso = 8                         peso = 10      peso = 3



n Ahora debemos extraer los dos nodos con
  menor peso.
n Esto nos hace pensar que una lista no es la
  mejor opción posible, pero comentaremos
  esto más adelante.
                   Estrutura de Datos 2009 - II - Renzo Loui Chavez             7
                                 Caycho - 08200088
Árbol óptimo de codificación (4)
n 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.
n 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.

      índice = 97         índice = 9                                índice = 256
       peso = 10          peso = 10                                  peso = 11



                                                      índice = 72           índice = 32
   El nodo así creado se debe                          peso = 3              peso = 8
   introducir en el bosque para
   realizar una nueva selección.
                     Estrutura de Datos 2009 - II - Renzo Loui Chavez                     8
                                   Caycho - 08200088
Árbol óptimo de codificación (5)
n El proceso es iterativo:




           índice = 256                                           índice = 257
            peso = 11                                              peso = 20



    índice = 72    índice = 32                      índice = 97            índice = 9
     peso = 3       peso = 8                         peso = 10             peso = 10




                     Estrutura de Datos 2009 - II - Renzo Loui Chavez                   9
                                   Caycho - 08200088
Árbol óptimo de codificación (6)
n Hasta que nos quedamos con un único nodo:


                                              índice = 258
     (Vacío)
                                               peso = 31



                 índice = 256                                              índice = 257
                  peso = 11                                                 peso = 20



          índice = 72            índice = 32                 índice = 97            índice = 9
           peso = 3               peso = 8                    peso = 10             peso = 10


                        Estrutura de Datos 2009 - II - Renzo Loui Chavez                     10
                                      Caycho - 08200088
Árbol óptimo de codificación (7)
n En la siguiente extracción, el bosque queda vacío y obtenemos
  el árbol de Huffman:
                                                                          ¿Codificación de 97?

   (Vacío)                                 índice = 257                              10
                                            peso = 31


                       0                                                         1
                 índice = 255                                             índice = 256
                  peso = 11                                                peso = 20

             0                           1                       0                        1
         índice = 72         índice = 32                  índice = 97                índice = 9
          peso = 3            peso = 8                     peso = 10                 peso = 10

                       Estrutura de Datos 2009 - II - Renzo Loui Chavez                           11
                                     Caycho - 08200088
Árbol óptimo de codificación (8)
n Es posible que haya notado que son posibles
  varios árboles de codificación.
n Todos son óptimos en el sentido de que
  proporcionan una codificación con el menor
  número de bits.
n 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.
n Esto nos permite extraer el mínimo de una
  manera eficaz.
              Estrutura de Datos 2009 - II - Renzo Loui Chavez   12
                            Caycho - 08200088
Árbol óptimo de codificación (9)
n 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.
n Esto nos permite utilizar como cola de
  prioridad un montículo binario. Recordar
  que un montículo binario se implementa con
  un array.
n 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).

               Estrutura de Datos 2009 - II - Renzo Loui Chavez   13
                             Caycho - 08200088
Tabla de codificación (1)
n La tabla de codificación es un paso
  intermedio entre el árbol de codificación y la
  verdadera codificación.
n Se construye para que la codificación sea
  más sencilla y rápida.
n 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).

                Estrutura de Datos 2009 - II - Renzo Loui Chavez   14
                              Caycho - 08200088
Tabla de codificación (2)
n Un nodo de la tabla de codificación puede contener
  la información siguiente:

          peso           indicePadre                          tipoHijo




n La tabla consiste en un array que sirve para indexar
  nodos de codificación.
n El tamaño de este array nos lo indica el índice del
  nodo raíz del árbol Huffman.

                  Estrutura de Datos 2009 - II - Renzo Loui Chavez       15
                                Caycho - 08200088
Tabla de codificación (3)
       n Se crear el array para indexar.
       n El árbol se recorre en preorden.
       n Y así hasta recorrer todo el árbol …                             32       8    255   1



                                                                          72       3    255   0
                         índice = 257
                          peso = 31

                                                                         255       11   257   0
              0                                            1
                                                                         256
        índice = 255                            índice = 256
         peso = 11                               peso = 20               257       31   -1


   0                    1                0                               1
índice = 72       índice = 32       índice = 97                     índice = 9
                                Estrutura de Datos 2009 - II - Renzo Loui Chavez              16
 peso = 3          peso = 8          pesoCaycho - 08200088 peso = 10
                                               = 10
Codificación
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?


        32         8    255         1                                         0

                                                                              1
        72         3    255         0


                                                          Por tanto, la codificación es …
       255        11    257         0

       256                                                                0       1
                              fin
       257        31     -1
                       Estrutura de Datos 2009 - II - Renzo Loui Chavez                17
                                     Caycho - 08200088
Complejidad
n Estudiemos la complejidad del algoritmo que
  crea el árbol de Huffman, que es el que nos
  interesa por ser voraz.
n La extracción en una cola de prioridad tiene
  una complejidad O(logn).
n Por tanto, la complejidad de todo el
  algoritmo, que es iterativo, será O(n logn).



               Estrutura de Datos 2009 - II - Renzo Loui Chavez   18
                             Caycho - 08200088
Algoritmo de Huffman (Pseudocódigo)
(1)
n {Precondición: C es el conjunto de caracteres
  y f es el vector de frecuencias}.

n {Poscondición: z es el árbol de un código
  libre de prefijos óptimo para (C,f)}.

      C
                                                                   z
       f


                Estrutura de Datos 2009 - II - Renzo Loui Chavez       19
                              Caycho - 08200088
Algoritmo de Huffman
(Pseudocódigo) (2)
Función Huffman(C:conjunto;f:vectFrec) devuelve árbol
    //variables Q:colaPrioridades; i,fx,fy,fz: entero; z,x,y: árbol
    Inicio
    creaVacía(Q);
    para todox en C hacer
           inserta(Q,<x,f[x]>)
    fpara;
    para i:=1 hasta|C|-1 hacer
           <x,fx>:=primero(Q); borra(Q);
           <y,fy>:=primero(Q); borra(Q);
           fz:=fx+fy;
           z:=creaÁrbol(raíz=>fz,hijoIzq=>x;hijoDer=>y);
           inserta(Q,<z,fz>)
    fpara;
    <z,fz>:=primero(Q); borra(Q)
    devuelve z
fin


                             Estrutura de Datos 2009 - II - Renzo Loui Chavez   20
                                           Caycho - 08200088
Consideraciones finales
n Para conseguir la decodificación es
  necesario almacenar en el archivo codificado
  más información que los bits de los códigos.
n Evidentemente nos interesa que esa
  información ocupe el menor espacio posible.
n Enlace a la aplicación Aqui




               Estrutura de Datos 2009 - II - Renzo Loui Chavez   21
                             Caycho - 08200088
Bibliografía
n Estructuras de datos en Java
 Mark Allen Weiss
 Editorial: Addison-Wesley

n Técnicas de Diseño de Algoritmos
 Rosa Guerequeta y Antonio Vallecillo




             Estrutura de Datos 2009 - II - Renzo Loui Chavez   22
                           Caycho - 08200088
Integrantes
n Renzo Loui Chávez Caycho                                       08200088




              Estrutura de Datos 2009 - II - Renzo Loui Chavez              23
                            Caycho - 08200088

Más contenido relacionado

La actualidad más candente

Metodos de ordenacion radix sort
Metodos de ordenacion radix sortMetodos de ordenacion radix sort
Metodos de ordenacion radix sorttephyfree
 
Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.Ana Castro
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoTAtiizz Villalobos
 
Algoritmos intercalación
Algoritmos intercalaciónAlgoritmos intercalación
Algoritmos intercalaciónPaul Arévalo
 
Metodos Busqueda Interna
Metodos Busqueda InternaMetodos Busqueda Interna
Metodos Busqueda Internasawmuk
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoJosé Antonio Sandoval Acosta
 
Estructura de Datos - Unidad VI: Métodos de Búsqueda
Estructura de Datos - Unidad VI: Métodos de BúsquedaEstructura de Datos - Unidad VI: Métodos de Búsqueda
Estructura de Datos - Unidad VI: Métodos de BúsquedaJosé Antonio Sandoval Acosta
 
Ordenamiento en C++
Ordenamiento en C++Ordenamiento en C++
Ordenamiento en C++compumet sac
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento internoFernando Solis
 
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Eli Diaz
 
Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..NANO-06
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacionLuis Igoodbad
 
5. algoritmos de búsqueda
5. algoritmos de búsqueda5. algoritmos de búsqueda
5. algoritmos de búsquedaFernando Solis
 
Vectores - Informática
Vectores - InformáticaVectores - Informática
Vectores - Informáticacompumet sac
 

La actualidad más candente (20)

Arboles multicamino
Arboles  multicaminoArboles  multicamino
Arboles multicamino
 
Metodos de ordenacion radix sort
Metodos de ordenacion radix sortMetodos de ordenacion radix sort
Metodos de ordenacion radix sort
 
Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.
 
Reporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamientoReporte metodos de busqueda y ordenamiento
Reporte metodos de busqueda y ordenamiento
 
Algoritmos intercalación
Algoritmos intercalaciónAlgoritmos intercalación
Algoritmos intercalación
 
Árboles Multicamino, B y B+
Árboles Multicamino, B y B+Árboles Multicamino, B y B+
Árboles Multicamino, B y B+
 
Metodos Busqueda Interna
Metodos Busqueda InternaMetodos Busqueda Interna
Metodos Busqueda Interna
 
Estructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamientoEstructura de Datos - Unidad 5 metodos de ordenamiento
Estructura de Datos - Unidad 5 metodos de ordenamiento
 
Estructura de Datos - Unidad VI: Métodos de Búsqueda
Estructura de Datos - Unidad VI: Métodos de BúsquedaEstructura de Datos - Unidad VI: Métodos de Búsqueda
Estructura de Datos - Unidad VI: Métodos de Búsqueda
 
Ordenamiento en C++
Ordenamiento en C++Ordenamiento en C++
Ordenamiento en C++
 
Hash mitad al cuadrado pdf
Hash mitad al cuadrado pdfHash mitad al cuadrado pdf
Hash mitad al cuadrado pdf
 
Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4
 
Programación 3: listas enlazadas
Programación 3: listas enlazadasProgramación 3: listas enlazadas
Programación 3: listas enlazadas
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno
 
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
Investigacion ed (pseudocodigo, algoritmo, listas, colas, arboles)
 
Curso básico de ensamblador
Curso básico de ensambladorCurso básico de ensamblador
Curso básico de ensamblador
 
Pilas como estructura de datos..
Pilas como estructura de datos..Pilas como estructura de datos..
Pilas como estructura de datos..
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacion
 
5. algoritmos de búsqueda
5. algoritmos de búsqueda5. algoritmos de búsqueda
5. algoritmos de búsqueda
 
Vectores - Informática
Vectores - InformáticaVectores - Informática
Vectores - Informática
 

Arbol De Huffman

  • 1. Árbol de Huffman Estructura de Datos
  • 2. Descripción del problema n Tenemos un archivo de entrada. n Asumiremos que el archivo está compuesto de bytes (enteros de 8 bits sin signo). n El problema consiste en codificar (comprimir) el archivo de entrada utilizando el menor número posible de bits. n Existe un algoritmo que resuelve el problema, y que es conocido como el algoritmo de Huffman. Estrutura de Datos 2009 - II - Renzo Loui Chavez 2 Caycho - 08200088
  • 3. Solución del problema Se podría decir que la solución se obtiene aplicando cuatro fases: 1. Crear un vector de frecuencias de aparición de cada byte en el archivo de entrada. 2. Crear el árbol óptimo de codificación de Huffman a partir del vector de frecuencias. 3. Crear una tabla de codificación a partir del árbol de codificación. 4. La codificación propiamente dicha. Estrutura de Datos 2009 - II - Renzo Loui Chavez 3 Caycho - 08200088
  • 4. Vector de frecuencias n Necesitamos conocer la frecuencia de aparición de cada byte en el archivo de entrada. n Por tanto, tenemos que hacer una primera lectura del archivo de entrada. n El objetivo es crear un vector de la forma: El índice es el valor del byte -1 0 1 2 … 97 98 … 255 256 6 25 0 … 3 5 … 5 6 El contenido es Sumamos 1 la frecuencia Datos 2009 - II - Renzo Loui Chavez Estrutura de 4 Caycho - 08200088 Si leemos un 255 …
  • 5. Árbol óptimo de codificación (1) n Se crea utilizando el algoritmo de Huffman. n Este algoritmo se puede clasificar como algoritmo voraz. n Las entradas del algoritmo son los bytes presentes en el archivo de entrada. n Trabaja con un conjunto de árboles. Es decir, lo que se podría llamar un bosque. n Nodo de un árbol de Huffman: índice • Al enlace izquierdo se le asigna un valor 0 peso • Al enlace derecho se le asigna un valor 1 0 1 Es lo que se llama un trie binario II(leido “trai”) Estrutura de Datos 2009 - - Renzo Loui Chavez Caycho - 08200088 5
  • 6. Árbol óptimo de codificación (2) n Los nodos hoja del árbol de Huffman serán los bytes leídos en el archivo de entrada. En ese caso: n índice = valor del byte (entre 0 y 255) n peso = frecuencia del byte n 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). n Un byte sólo está presente en este bosque inicial si aparece en el archivo de entrada con una frecuencia distinta de cero. Estrutura de Datos 2009 - II - Renzo Loui Chavez 6 Caycho - 08200088
  • 7. Árbol óptimo de codificación (3) n Nuestro “bosque” inicial podría consistir, por ejemplo, en una lista de nodos. índice = 97 índice = 32 índice = 9 índice = 72 peso = 10 peso = 8 peso = 10 peso = 3 n Ahora debemos extraer los dos nodos con menor peso. n Esto nos hace pensar que una lista no es la mejor opción posible, pero comentaremos esto más adelante. Estrutura de Datos 2009 - II - Renzo Loui Chavez 7 Caycho - 08200088
  • 8. Árbol óptimo de codificación (4) n 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. n 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. índice = 97 índice = 9 índice = 256 peso = 10 peso = 10 peso = 11 índice = 72 índice = 32 El nodo así creado se debe peso = 3 peso = 8 introducir en el bosque para realizar una nueva selección. Estrutura de Datos 2009 - II - Renzo Loui Chavez 8 Caycho - 08200088
  • 9. Árbol óptimo de codificación (5) n El proceso es iterativo: índice = 256 índice = 257 peso = 11 peso = 20 índice = 72 índice = 32 índice = 97 índice = 9 peso = 3 peso = 8 peso = 10 peso = 10 Estrutura de Datos 2009 - II - Renzo Loui Chavez 9 Caycho - 08200088
  • 10. Árbol óptimo de codificación (6) n Hasta que nos quedamos con un único nodo: índice = 258 (Vacío) peso = 31 índice = 256 índice = 257 peso = 11 peso = 20 índice = 72 índice = 32 índice = 97 índice = 9 peso = 3 peso = 8 peso = 10 peso = 10 Estrutura de Datos 2009 - II - Renzo Loui Chavez 10 Caycho - 08200088
  • 11. Árbol óptimo de codificación (7) n En la siguiente extracción, el bosque queda vacío y obtenemos el árbol de Huffman: ¿Codificación de 97? (Vacío) índice = 257 10 peso = 31 0 1 índice = 255 índice = 256 peso = 11 peso = 20 0 1 0 1 índice = 72 índice = 32 índice = 97 índice = 9 peso = 3 peso = 8 peso = 10 peso = 10 Estrutura de Datos 2009 - II - Renzo Loui Chavez 11 Caycho - 08200088
  • 12. Árbol óptimo de codificación (8) n Es posible que haya notado que son posibles varios árboles de codificación. n Todos son óptimos en el sentido de que proporcionan una codificación con el menor número de bits. n 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. n Esto nos permite extraer el mínimo de una manera eficaz. Estrutura de Datos 2009 - II - Renzo Loui Chavez 12 Caycho - 08200088
  • 13. Árbol óptimo de codificación (9) n 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. n Esto nos permite utilizar como cola de prioridad un montículo binario. Recordar que un montículo binario se implementa con un array. n 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). Estrutura de Datos 2009 - II - Renzo Loui Chavez 13 Caycho - 08200088
  • 14. Tabla de codificación (1) n La tabla de codificación es un paso intermedio entre el árbol de codificación y la verdadera codificación. n Se construye para que la codificación sea más sencilla y rápida. n 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). Estrutura de Datos 2009 - II - Renzo Loui Chavez 14 Caycho - 08200088
  • 15. Tabla de codificación (2) n Un nodo de la tabla de codificación puede contener la información siguiente: peso indicePadre tipoHijo n La tabla consiste en un array que sirve para indexar nodos de codificación. n El tamaño de este array nos lo indica el índice del nodo raíz del árbol Huffman. Estrutura de Datos 2009 - II - Renzo Loui Chavez 15 Caycho - 08200088
  • 16. Tabla de codificación (3) n Se crear el array para indexar. n El árbol se recorre en preorden. n Y así hasta recorrer todo el árbol … 32 8 255 1 72 3 255 0 índice = 257 peso = 31 255 11 257 0 0 1 256 índice = 255 índice = 256 peso = 11 peso = 20 257 31 -1 0 1 0 1 índice = 72 índice = 32 índice = 97 índice = 9 Estrutura de Datos 2009 - II - Renzo Loui Chavez 16 peso = 3 peso = 8 pesoCaycho - 08200088 peso = 10 = 10
  • 17. Codificación 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? 32 8 255 1 0 1 72 3 255 0 Por tanto, la codificación es … 255 11 257 0 256 0 1 fin 257 31 -1 Estrutura de Datos 2009 - II - Renzo Loui Chavez 17 Caycho - 08200088
  • 18. Complejidad n Estudiemos la complejidad del algoritmo que crea el árbol de Huffman, que es el que nos interesa por ser voraz. n La extracción en una cola de prioridad tiene una complejidad O(logn). n Por tanto, la complejidad de todo el algoritmo, que es iterativo, será O(n logn). Estrutura de Datos 2009 - II - Renzo Loui Chavez 18 Caycho - 08200088
  • 19. Algoritmo de Huffman (Pseudocódigo) (1) n {Precondición: C es el conjunto de caracteres y f es el vector de frecuencias}. n {Poscondición: z es el árbol de un código libre de prefijos óptimo para (C,f)}. C z f Estrutura de Datos 2009 - II - Renzo Loui Chavez 19 Caycho - 08200088
  • 20. Algoritmo de Huffman (Pseudocódigo) (2) Función Huffman(C:conjunto;f:vectFrec) devuelve árbol //variables Q:colaPrioridades; i,fx,fy,fz: entero; z,x,y: árbol Inicio creaVacía(Q); para todox en C hacer inserta(Q,<x,f[x]>) fpara; para i:=1 hasta|C|-1 hacer <x,fx>:=primero(Q); borra(Q); <y,fy>:=primero(Q); borra(Q); fz:=fx+fy; z:=creaÁrbol(raíz=>fz,hijoIzq=>x;hijoDer=>y); inserta(Q,<z,fz>) fpara; <z,fz>:=primero(Q); borra(Q) devuelve z fin Estrutura de Datos 2009 - II - Renzo Loui Chavez 20 Caycho - 08200088
  • 21. Consideraciones finales n Para conseguir la decodificación es necesario almacenar en el archivo codificado más información que los bits de los códigos. n Evidentemente nos interesa que esa información ocupe el menor espacio posible. n Enlace a la aplicación Aqui Estrutura de Datos 2009 - II - Renzo Loui Chavez 21 Caycho - 08200088
  • 22. Bibliografía n Estructuras de datos en Java Mark Allen Weiss Editorial: Addison-Wesley n Técnicas de Diseño de Algoritmos Rosa Guerequeta y Antonio Vallecillo Estrutura de Datos 2009 - II - Renzo Loui Chavez 22 Caycho - 08200088
  • 23. Integrantes n Renzo Loui Chávez Caycho 08200088 Estrutura de Datos 2009 - II - Renzo Loui Chavez 23 Caycho - 08200088