4. CÓDIGO DE HUFFMAN
oEs un método de comprensión que permite obtener un
código de los diversos símbolos a comprimir.
oCrea una estructura arbórea (árbol binario) con todos los
símbolos y con las frecuencias de estos
4
12. Frecuencia de aparición de letras.
1 2 1 1 1
C O D I G
Ordenar según la frecuencia
1 1 1 1 2
C D I G O
12
13. Formamos nodos con pares de nodos.
C D I G O
1 1 1 1 2
C,1 D,1 I,1 G,1 O,2
C,1 D,1
13
14. Formamos nodos con pares de nodos.
C D I G O
1 1 1 1 2
I,1 G,1 O,2
C,1 D,1
Sumamos frecuencias
1+1 = 2
Creamos el Nuevo nodo
NULL, 2
C,1 D,1
14
15. Formamos nodos con pares de nodos.
I,1 G,1 O,2 NULL,2
C,1 D,1
Seleccionamos el siguiente par de nodos.
Agregar el Nuevo nodo.
I,1 G,1
Creamos el Nuevo nodo
NULL, 2
I,1 G,1
15
16. Formamos nodos con pares de nodos.
O,2 NULL,2
C,1 D,1
Seleccionamos el siguiente par de nodos.
Agregar el Nuevo nodo. Creamos el Nuevo nodo
NULL, 2
I,1 G,1
O,2 NULL,2
C,1 D,1
NULL, 4
O,2 NULL,2
C,1 D,1
16
17. Formamos nodos con pares de nodos.
Agregar el Nuevo nodo. Creamos el Nuevo nodo
NULL, 2
I,1 G,1
NULL, 4
O,2 NULL,2
C,1 D,1
NULL, 6
NULL, 2
I,1 G,1
NULL, 4
O,2 NULL,2
C,1 D,1
17
18. Asignamos 0 a los nodos de la izquierda y 1 a
los de la derecha.
NULL, 6
NULL, 2
I,1 G,1
NULL, 4
O,2 NULL,2
C,1 D,1
1
1
1
1
0
00
0
18
19. Armamos la tabla con valores binarios.
I 00
G 01
O 10
C 110
D 111
NULL, 6
NULL, 2
I,1 G,1
NULL, 4
O,2 NULL,2
C,1 D,1
1
1
1
1
0
00
0
19
20. Ordenamos el código según la palabra inicial.
C O D I G O
110 10 111 00 01 10
20
22. Método LZ77
oEs un método de compresión sin perdida publicados por
Abraham Lempel y Jacob Ziv.
oEste algoritmo juntos al LZ78 fueron nombrados en la lista
de hitos del IEEE en 2004
22
23. Como Funciona
oLa compresión de los datos se basa en un modelo basado
en diccionarios.
Ej: Hola están hola si están
1 2 3 4 5 6 7 8 9 10 11 12 13
1 2 3 4 5
H o l a
23
24. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
| | | | |
H o l a
(0,0,H)
24
25. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H
| | | | |
o l a e
(0,0,H)->(0,0,o)
25
26. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o
| | | | |
l a e s
(0,0,H)->(0,0,o)->(0,0,l)
26
27. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l
| | | | |
a e s t
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)
27
28. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a
| | | | |
e s t á
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )
28
29. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a
| | | | |
e s t á n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)
29
30. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a e s t
| | | | |
á n h o
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
30
31. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a e s t á n
| | | | |
h o l a
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)
31
32. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a e s t á n
| | | | |
h o l a
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->
32
33. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a e s t á n
| | | | |
h o l a
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5
33
34. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a e s t á n
| | | | |
h o l a
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1
34
35. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a e s t á n
| | | | |
h o l a
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)
35
36. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a e s t á n h
| | | | |
o l a s
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)
36
37. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a e s t á n h
| | | | |
o l a s
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)
37
38. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
H o l a e s t á n h
| | | | |
o l a s
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)
38
39. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
e s t á n h o l a s
| | | | |
i e s t
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)
39
40. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
e s t á n h o l a s
| | | | |
i e s t
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)
40
41. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
e s t á n h o l a s
| | | | |
i e s t
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)
41
42. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
e s t á n h o l a s i
| | | | |
e s t a
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)
42
43. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
e s t á n h o l a s i
| | | | |
e s t á
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)
43
44. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
e s t á n h o l a s i
| | | | |
e s t á
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(6,1,e)
44
45. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
t á n h o l a s i e
| | | | |
s t á n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(6,1,e)
45
46. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
t á n h o l a s i e
| | | | |
s t á n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(6,1,e)->(10,1,t)
46
47. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
n h o l a s i e s t
| | | | |
á n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(6,1,e)->(10,1,t)
47
48. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
n h o l a s i e s t
| | | | |
á n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(6,1,e)->(10,1,t)->(0,0,á)
48
49. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
h o l a s i e s t á
| | | | |
n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(6,1,e)->(10,1,t)->(0,0,á)
49
50. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
h o l a s i e s t á
| | | | |
n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(6,1,e)->(10,1,t)->(0,0,á)
50
51. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
h o l a s i e s t á
| | | | |
n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(6,1,e)->(10,1,t)->(0,0,á)
(0,0,n)
51
52. Como Funciona
1 2 3 4 5 6 7 8 9 10 11 12 13
h o l a s i e s t á n
| | | | |
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(6,1,e)->(10,1,t)->(0,0,á)
(0,0,n)
52
53. Observaciones
| | | | | |
i e s t á
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
a e s t á n h o l a s
53
54. Observaciones
| | | | | |
e s t á n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
e s t á n h o l a s i
54
55. Observaciones
| | | | | |
e s t á n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
e s t á n h o l a s i
55
56. Observaciones
| | | | | |
e s t á n
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(1,6,EOF)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
e s t á n h o l a s i
56
57. Observaciones
| | | | | |
(0,0,H)->(0,0,o)->(0,0,l)->(0,0,a)->(0,0, )->(0,0,e)->(0,0,s)->(0,0,t)
(0,0,á)->(0,0,n)->(5,1,h)->(2,4,s)->(0,0,i)->(1,6,EOF)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
h o l a s i e s t á n
57
62. Observaciones
1 2 3 4
a b c d
(2,1,c) -> bc -> No es optimo
Tamaño de la etiqueta sobrepasa al valor real
7 -> 2
62
63. Observaciones
Forma de escribir las etiquetas en un archivo.
(0,3,b) -> ~0~3~b -> n~N~VS
n -> posición en el buffer
N -> tamaño del desplazamiento N > Tamaño de la etiqueta
VS-> Valor siguiente al desplazamiento
63
73. Conclusiones de la Prueba LZ77
Tamaño del archivo original: 52 Mb
LZ77:
Numero de Muestras: 10
Tamaño del Buffer: 2000.
Tiempo medio de compresión: 79.54 segundos
Tamaño del archivo comprimido: 32.93 Mb
Compresión: 19.07 Mb
Porcentaje de compresión: 36.67 %
73
74. Conclusiones de la Prueba Huffman
Tamaño del archivo original: 52 Mb
LZ77:
Numero de Muestras: 10
Tamaño del Buffer: 2000.
Tiempo medio de compresión: 79.54 segundos
Tamaño del archivo comprimido: 32.93 Mb
Compresión: 19.07 Mb
Porcentaje de compresión: 36.67 %
74
75. Conclusiones
Los algoritmos de comprensión de archivos son de gran utilidad, porque nos brindan la facilidad de
optimizar la memoria de nuestros dispositivos.
En Huffman es necesario que los arboles binarios se armen correctamente debido a que los códigos
dependen de esto.
Necesariamente cada código debe ser independiente, es decir ningún código debe ser el principio de
otro.
En lz77 mientras más grande sea el buffer mayor será la comprensión, pero así mismo el tiempo que
toma comprimir un archivo aumentara a medida del crecimiento del buffer.
La etiqueta en lz77 tiene que ser de menor longitud que los caracteres a comprimir, ya que al no
cumplirse esto se obtendría un archivo comprimido de mayor tamaño que el archivo original.
Mayor eficiencia del algoritmo de Compresión de Huffman sobre el LZ77, en tiempo y porcentaje de
compresión, aunque puede variar si se aumenta el tamaño del buffer del LZ77 aunque el tiempo de
compresión seria mucho mayor.
75
77. Links de Interés
Videos Explicativo LZ77:
https://www.youtube.com/watch?v=dxlOFcnGE-w
https://www.youtube.com/watch?v=IWm9XjHFIJ0
Link de los Códigos en GitHub:
https://github.com/XaviColla/Huffman-LZ77
Documento:
https://es.scribd.com/document/351869453/Comprension-de-Archivos
77
78. Bibliografía
Jimenez, A. (23 septiembre 2006).Algoritmo de Huffman. XatakaCiencia.
https://www.xatakaciencia.com/matematicas/algoritmo-de-huffman
Ferribenedetti F. (10 enero del 2013). ¿Qué es la comprensión de Archivos? . Softonic.
https://articulos.softonic.com/que-es-compresion-archivos
(20 Junio 2017). LZ77. EcuRed. https://www.ecured.cu/Lz77
78