3. CONCEPTO
La codificación Huffman es un algoritmo usado para
compresión de datos.
El algoritmo de codificación/compresión Huffman se
propuso en 1952 como una forma sencilla y óptima de
mapear cada símbolo de un alfabeto con un código
(codeword) de longitud óptima.
La codificación Huffman usa un método específico para
elegir la representación de cada símbolo, que da lugar a
un código prefijo que representa los caracteres más
comunes usando las cadenas de bits más cortas, y
viceversa.
4. PROCEDIMIENTO
El proceso de asignación de códigos se lleva a cabo
mediante la construcción de un árbol binario:
Recorrer el árbol en pre-orden hacia el nodo que contiene el
carácter con su frecuencia.
Los nodos menos probables se unen sucesivamente para
formar otro nodo de mayor probabilidad, de forma que cada
uno de los enlaces añade un bit al código de los símbolos
que estamos juntando.
Este proceso termina cuando sólo se dispone de un nodo, de
forma que éste representa la raíz del árbol.
5. FACTOR DE COMPRENSIÓN.
• La compresión de datos es la reducción del volumen de datos
tratables para representar una determinada información empleando
una menor cantidad de espacio.
• El espacio que ocupa una información codificada (datos, señal digital,
etc.) sin compresión es el cociente entre la frecuencia de muestreo y la
resolución. Por tanto, cuantos más bits se empleen mayor será el
tamaño del archivo.
6. EJEMPLO 1.
• Palabra a codificar : LAPTOP
1.Contar el número de peticiones de cada carácter es decir el
número de repeticiones de cada uno de los caracteres
L A P T O P
14. • Se pone en una lista enlazada los caracteres y sus frecuencias. Y
eliminamos los que se repiten (Se deja uno solo).
• El siguiente paso es crear un nuevo árbol binario pasando los dos
primeros nodos como hojas del árbol.
L
1
A 1
T
1
O
1
P 2
15. Null:
2
L:1 A:1
El nodo raíz se guarda como null junto con la suma de las
frecuencias de los nodos hijos.
16. • La lista quedaría de esta manera:
• El siguiente paso es insertar nuestro árbol a la lista de nodos de forma
ordenada; como la frecuencia de nuestro nodo raíz es dos, entonces
se colocaría al final de la lista ya que en este caso no hay frecuencias
más altas.
T
1
O
1
P
2
18. • Repetimos el mismo paso volvemos a tomar los dos primero nodos de
la lista y formamos el árbol con el nodo raíz que en la frecuencia es la
suma de los hijos.
Null:2
T:1 O:1
19. • Ahora insertamos el árbol de manera ordenada en la lista de nodos
que teníamos definida anteriormente.
P 2 Null 2 Null 2
L:1 A:1 T:1 O:1
20. • Volvemos a tomar los dos nodos siguientes y formamos el árbol.
Null:
4
P:2
Null:
2
L:1 A:1
21. • Ahora insertamos el árbol de manera ordenada a nuestra lista.
Null 2 Null 4
T:1 O:1 P:2
Null:
2
L:1 A:1
23. • Ahora es momento de poner los pesos de nuestro árbol.
Null:6
Null:
3
Null:
3
T:1 O:1
Null:
2
L:1 A:1
P:2
0 1
0 1
0
1
1
0
24. • Los valores de cada una de las letras son:
P : 10
T: 00
O: 01
A: 111
L: 110
25. • Entonces la palabra entera es la unión de el valor de cada letra.
L A P T O P
110 111 10 00 01 10
26. CONCLUSIONES
• La codificación de Huffman es útil para la codificación de las palabras
y ponerlas en binario ya que el árbol que se forma para la codificación
es binario.
• Los resultados de la codificación en algunos casos son diferentes
dependiendo del recorrido que se use para el árbol pero existe
coincidencia en algunas letras que es el mismo resultado en binario.
28. LZW (Lempel-Ziv-Welch) es un algoritmo de compresión sin
pérdida desarrollado por Terry Welch en 1984
La clave del método LZW reside en que es posible crear sobre
la marcha, de manera automática y en una única pasada un
diccionario de cadenas que se encuentren dentro del texto a
comprimir mientras al mismo tiempo se procede a su
codificación. Dicho diccionario no es transmitido con el texto
comprimido, puesto que el descompresor puede reconstruirlo
usando la misma lógica con que lo hace el compresor y, si
está codificado correctamente, tendrá exactamente las
mismas cadenas que el diccionario del compresor tenía.
INTRODUCCIÓN
29. • Los códigos 0-255 de la tabla de códigos siempre
se asignan para representar bytes simples del
archivo de entrada.
• Cuando comienza la codificación, la tabla de
códigos contiene sólo las primeras 256 entradas,
siendo el resto de la tabla espacios en blanco.
• La compresión se consigue utilizando códigos 256
a 4095 para representar secuencias de bytes.
• A medida que la codificación continúa, LZW
identifica secuencias repetidas en los datos, y los
agrega a la tabla de códigos.
• La decodificación se logra tomando cada código
del archivo comprimido y traduciéndolo a través de
37. DESCOMPRESIÓN LZW
• El descompresor LZW crea la misma tabla de cadenas
durante la descompresión.
• Comienza con las primeras 256 entradas de tabla
inicializadas a caracteres individuales.
• La tabla de cadenas se actualiza para cada carácter en el
flujo de entrada, excepto el primero.
• La decodificación se logra leyendo códigos y traduciéndolos
a través de la tabla de códigos que se está construyendo.
38. EJEMPLO: LZW DESCOMPRESIÓN
Ejemplo: Usar LZW para descomprimir la secuencia de salida del ejemplo
de compresión anterior:
<66><65><256><257><65><260>.
39. EJEMPLO: LZW DESCOMPRESIÓN PASO 1
<66><65><256><257><65><260> Old = 65 S = A
New = 66 C = A
STRING TABLEENCODER OUTPUT
stringcodewordstring
B
BA256A
40. EJEMPLO: LZW DESCOMPRESIÓN PASO 2
<66><65><256><257><65><260> Old = 256 S = BA
New = 256 C = B
STRING TABLEENCODER OUTPUT
stringcodewordstring
B
BA256A
AB257BA
41. EJEMPLO: LZW DESCOMPRESIÓN PASO 3
<66><65><256><257><65><260> Old = 257 S = AB
New = 257 C = A
STRING TABLEENCODER OUTPUT
stringcodewordstring
B
BA256A
AB257BA
BAA258AB
42. EJEMPLO: LZW DESCOMPRESIÓN PASO 4
<66><65><256><257><65><260> Old = 65 S = A
New = 65 C = A
STRING TABLEENCODER OUTPUT
stringcodewordstring
B
BA256A
AB257BA
BAA258AB
ABA259A
43. EJEMPLO: LZW DESCOMPRESIÓN PASO 5
<66><65><256><257><65><260> Old = 260 S = AA
New = 260 C = A
STRING TABLEENCODER OUTPUT
stringcodewordstring
B
BA256A
AB257BA
BAA258AB
ABA259A
AA260AA
44. Este algoritmo comprime muy bien secuencias repetitivas
de datos.
Como las palabras de código son 12 bits, cualquier
carácter codificado único ampliará el tamaño de los datos
en lugar de reducirlo.
En este ejemplo, 72 bits están representados con 72 bits
de datos. Después de que se construye una tabla de
cadena razonable, la compresión mejora drásticamente.
Ventajas de LZW sobre Huffman:
LZW no requiere información previa sobre el flujo de datos
de entrada.
CONCLUSIONES
45. BIBLIOGRAFÍA
• Denecker Koen and Van Overloop Jeroen, An Experimental Comparison of several Lossless Image
Coders for Medical Images, 1068-0314/97, 1997 IEEE.
• Luis Gabriel Rueda, Manuel Osear Ortega, Un Modelo de Codificación Dinámica del Método de
Huffman, para la Compresión de Datos en Línea, 1er. Congreso Argentino de Ciencias de la
Computación, Domicilio: Ignacio de la Rosa y Meglioli (5400) San Juan.
• https://www.cs.duke.edu/csed/curious/compression/lzw.html
• http://es.ccm.net/contents/731-compresion-lzw
• http://www.grc.upv.es/docencia/tdm/practicas/P1.pdf
• http://joselu.webs.uvigo.es/material/Algoritmo%20de%20Huffman.pdf
• https://learn.yancyparedes.net/2013/10/an-implementation-of-the-huffman-code-for-
compressing-and-decompressing-strings
46. LINKS:
Algoritmo de compresión sin pérdida LZW:
https://github.com/EstebanViz/LZW-Ucuenca
Codificación de Huffman :
https://github.com/EstebanViz/Huffman-C-GUI-GTK-