Compresión de datos optima mediante la codificación de Huffman
Codificación de Huffman
-
Upload
miguel-angel -
Category
Software
-
view
54 -
download
0
Transcript of Codificación de Huffman
![Page 1: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/1.jpg)
UNIVERSIDAD DE CUENCAdesde 1867
Miguel MacíasEdisson SiguaChristian Salinas
Algoritmo de compresión de HuffmanProgramación 3 Estructura de Archivos
![Page 2: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/2.jpg)
Generalidades• Se utiliza para la comprensión o encriptación de datos.• Se basa en asignar códigos de distinta longitud de bits a cada uno de
los caracteres de un archivo.• Si se asignan códigos mas cortos a los caracteres que aparecen mas a
menudo se consigue una comprensión del archivo.• La compresión es mayor cuando la variedad de caracteres diferentes
que aparecen es menor.• Para recuperar el archivo original es necesario el código asignado a
cada carácter, así como su longitud en bits
![Page 3: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/3.jpg)
Mecanismo del Algoritmo• Contar cuantas veces aparece cada carácter en el fichero a
comprimir y crear una lista enlazada con la información de caracteres y frecuencias
• Ordenar la lista de menor a mayor en función de la frecuencia
• Convertir cada elemento de la lista en un árbol
![Page 4: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/4.jpg)
Mecanismo del Algoritmo• Fusionar todos estos arboles en uno único, de la siguiente manera:
• Con los dos primero arboles formar un nuevo árbol, cada uno de los arboles originales en una rama.
• Sumar las frecuencias de cada rama en le nuevo árbol.• Insertar el nuevo árbol en el lugar adecuado de la lista según la suma de
frecuencias obtenidas• Para asignar el nuevo código binario de cada carácter solo hay que
seguir el camino adecuado a través del árbol. Si se toma una rama cero, se añade un cero al código, de la misma manera con cualquier rama uno.
• Se recodifica el fichero según los nuevos códigos
![Page 5: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/5.jpg)
EjemploSe toma una texto corto, como por ejemplo:
‘‘ata la jaca en la estaca’’Ahora se cuenta las veces que se repite cada carácter en el texto:
Ahora se ordena por frecuencia de menor a mayor:
‘ ’ a c e j l s t5 9 2 1 1 2 1 2
e j s c l t ‘ ’ a 1 1 1 2 2 2 5 9
![Page 6: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/6.jpg)
EjemploAhora se considera a cada elemento como un nodo raíz un árbol.
e j s c l t ‘ ’ a (1) (1) (1) (2) (2) (2) (5) (9)
![Page 7: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/7.jpg)
EjemploAhora se considera a cada elemento como un nodo raíz un árbol.
Ahora se unen los dos primero nodos (arboles), en un nuevo árbol, se suman sus frecuencias y se las coloca en el lugar correspondiente según el orden.
e j s c l t ‘ ’ a (1) (1) (1) (2) (2) (2) (5) (9)
e j (1) (1)
![Page 8: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/8.jpg)
EjemploAhora se considera a cada elemento como un nodo raíz un árbol.
Ahora de unen los dos primero nodos (arboles), en un nuevo árbol, se suman sus frecuencias y se las coloca en el lugar correspondiente según el orden.
e j s c l t ‘ ’ a (1) (1) (1) (2) (2) (2) (5) (9)
s c l t ‘ ’ a(1) (2) (2) (2) (2) (5) (9)
e j (1) (1)
![Page 9: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/9.jpg)
EjemploY se sigue el mismo proceso sucesivamente:
Los nuevos nodos (arboles) a unir serian s(1) y (2)
s c l t ‘ ’ a(1) (2) (2) (2) (2) (5) (9)
e j (1) (1)
![Page 10: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/10.jpg)
Ejemplo
Nuevos nodos a unirse s (1) (2)
![Page 11: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/11.jpg)
Ejemplo
Recordamos que (2) se divide en e(1) y j (1)
e j (1) (1)
s (1) (2)
![Page 12: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/12.jpg)
Ejemplo
(3)
e j (1) (1)
s (1) (2)
Recordamos que (2) se divide en e(1) y j (1)
Ahora se suman las frecuencias de s(1) (2)
![Page 13: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/13.jpg)
Ejemplo
c l t ‘ ’ a (2) (2) (2) (3) (5) (9)
e j (1) (1)
s (1) (2)
Recordamos que (2) se divide en e(1) y j (1)
Ahora se suman las frecuencias de s(1) (2)
Y agregamos según el orden que corresponda
![Page 14: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/14.jpg)
Ejemplo
c l t ‘ ’ a (2) (2) (2) (3) (5) (9)
e j (1) (1)
s (1) (2)
Recordamos que (2) se divide en e(1) y j (1)
Ahora se suman las frecuencias de s(1) (2)
Y agregamos según el orden que corresponda
Siguientes a unir
![Page 15: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/15.jpg)
Ejemplo
c l(2) (2)
Nuevos nodos a unirse
![Page 16: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/16.jpg)
Ejemplo
(4)
c l(2) (2)
Nuevos nodos a unirseAhora se suman las frecuencias de c(1) l(2)
![Page 17: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/17.jpg)
Ejemplo
t ‘ ’ a (2) (3) (4) (5) (9)
e j(1) (1)
s (1) (2)
c l(2) (2)
Nuevos nodos a unirseAhora se suman las frecuencias de c(1) l(2)
Y agregamos según el orden que corresponda
![Page 18: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/18.jpg)
Ejemplo
t ‘ ’ a (2) (3) (4) (5) (9)
e j(1) (1)
s (1) (2)
c l(2) (2)
Nuevos nodos a unirseAhora se suman las frecuencias de c(1) l(2)
Y agregamos según el orden que corresponda
Siguientes a unir
![Page 19: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/19.jpg)
Ejemplo
t (2)
(3)Nuevos nodos a unirse
![Page 20: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/20.jpg)
Ejemplo
t (2)
(3)
s (1) (2)
Recordamos que (3) se divide en s(1) y (2)
Nuevos nodos a unirse
![Page 21: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/21.jpg)
Ejemplo
t (2)
(3)
e j(1) (1)
s (1) (2)
Nuevos nodos a unirse
Recordamos que (3) se divide en s(1) y (2)Recordamos que (2) se divide en e(1) y j(1)
![Page 22: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/22.jpg)
Ejemplo
t (2)
(3)
e j(1) (1)
s (1) (2)
(5)
Nuevos nodos a unirse
Recordamos que (3) se divide en s(1) y (2)Recordamos que (2) se divide en e(1) y j(1)
Ahora se suman las frecuencias de t(2) y (3)
![Page 23: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/23.jpg)
Ejemplo
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
‘ ’ a (4) (5) (5) (9)
Y agregamos según el orden que corresponda
Nuevos nodos a unirse
Recordamos que (3) se divide en s(1) y (2)Recordamos que (2) se divide en e(1) y j(1)
Ahora se suman las frecuencias de t(2) y (3)
![Page 24: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/24.jpg)
Ejemplo
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
‘ ’ a (4) (5) (5) (9) Siguientes a unir
![Page 25: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/25.jpg)
Ejemplo
(4) (5)
Nuevos nodos a unirse
![Page 26: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/26.jpg)
Ejemplo
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
(4) (5)
Nuevos nodos a unirse
(4) y (5) tiene subárboles binarios generados anteriormente
![Page 27: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/27.jpg)
Ejemplo
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
‘ ’ a (5) (9) (9) (4)
(5)Ahora se suman las frecuencias de (4) y (5), y se colocan en el orden especifico
Nuevos nodos a unirse
(4) y (5) tiene subárboles binarios generados anteriormente
![Page 28: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/28.jpg)
Ejemplo
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
‘ ’ a (5) (9) (9) (4)
(5)Siguientes a unir
![Page 29: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/29.jpg)
Ejemplo
‘ ’ (5) (9) Nuevos nodos a unirse
![Page 30: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/30.jpg)
Ejemplo
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
‘ ’ (5) (9)
(4) (5)(5) y (9) tiene subárboles binarios generados anteriormente
Nuevos nodos a unirse
![Page 31: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/31.jpg)
Ejemplo
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
‘ ’ (5) (9)
(4) (5)
a (9) (14)
Se suman las frecuencias de (5) y (9), y se colocan en el orden especifico
(5) y (9) tiene subárboles binarios generados anteriormente
Nuevos nodos a unirse
![Page 32: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/32.jpg)
Ejemplo
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
‘ ’ (5) (9)
(4) (5)
a (9) (14)Al tener finalmente dos arboles que unir, a(9) y (14), se suman sus frecuencias y se tiene creado el árbol para obtener las claves
![Page 33: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/33.jpg)
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
‘ ’ (5) (9)
(4) (5)
a (9) (14)
(23)
Resultado Final de la estructura del arbol
Se asigna las claves, las ramas a la izquierda son cero y a la derecha unos
Ejemplo
![Page 34: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/34.jpg)
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
‘ ’ (5) (9)
(4) (5)
a (9) (14)
(23)
Resultado Final de la estructura del arbol
Se asigna las claves, las ramas a la izquierda son cero y a la derecha unos
0
0
0
0 0
0
0
1
1
1
1 1
1
1
Ejemplo
![Page 35: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/35.jpg)
c l(2) (2)
t (2)
(3)
e j(1) (1)
s (1) (2)
‘ ’ (5) (9)
(4) (5)
a (9) (14)
(23)0
0
0
0 0
0
0
1
1
1
1 1
1
1
EjemploCarácter - Clave
a 0 ' ' 10c 1100l 1101t 1110s 11110e 111110j 111111
Mas se repite ‘‘a’’ , menos se repite ‘‘e,s,j’’
![Page 36: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/36.jpg)
El texto ‘‘ata la jaca a la estaca’’, transformado a binario mediante código ASCII, es igual a :01100001 01110100 01100001 00100000 01101100 01100001 00100000 01101010 01100001 01100011 01100001 00100000 01100001 00100000 01101100 01100001 00100000 01100101 01110011 01110100 01100001 01100011 01100001 Esta representado por 184 bits, es decir 23 bytes.
Ejemplo
![Page 37: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/37.jpg)
Ejemploa 0
' ' 10c 1100l 1101t 1110s 11110
e 111110
j 111111
Se puede traducir ahora el texto mediante las claves generadas con Huffman.
a t a ' ' l a ' ' j a c a ' ' a ' ' l a ' ' e s t a c a
0 1110 0 10 1101 0 10 111111 0 1100 0 10 0 10 1101 0 10 111110 11110 1110 0 1100 0
![Page 38: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/38.jpg)
Ejemploa t a ' ' l a ' ' j a c a ' ' a ' ' l a ' ' e s t a c a
0 1110 0 10 1101 0 10 111111 0 1100 0 10 0 10 1101 0 10 111110 11110 1110 0 1100 0
Finalmente se debe empaquetar los bits en grupos de 8, es decir bytes.
01110010 11010101 11111011 00010010 11010101 11110111 10111001 10000000
En total 8 bytes, mientras que el archivo original tenia 23
![Page 39: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/39.jpg)
Conclusiones
• Huffman es una manera de lograr comprensión de la información sin perdidas de manera que la información enviada pueda llegar completa.
• Se tiene que conocer inicialmente las frecuencias de cada carácter en el archivo y ordenarlas para poder generar el árbol binario que nos ayuda a generar las claves de cada carácter
![Page 40: Codificación de Huffman](https://reader035.fdocuments.net/reader035/viewer/2022081503/5877a6541a28ab826e8b6271/html5/thumbnails/40.jpg)
Conclusiones• La asignación de claves para cada carácter depende de la cantidad de
veces que se repita cada carácter en el texto.• Mientras se repita mas veces el carácter, tendrá una clave mas pequeña• Mientras menos se repita el carácter tendrá una clave mas grande.
• Independientemente del archivo a comprimir, lo que determina que tan compacto sea el archivo resultante, será el numero de veces que se repita los caracteres y símbolos que estén en el mismo:• El caso mas optimo para la codificación de Huffman es cuando la mayoría de caracteres se
repiten• El pero caso es cuando existe muy pocos o no se repiten ninguna carácter dentro del
archivo a comprimir