4. OBJETIVOS
● Conocer el funcionamiento del Algoritmo Huffman.
● Implementar el algoritmo de Huffman en C.
● Entender la compresión utilizada en Internet
● Conocer los algoritmos de compresión HTTP
● Implementar el algoritmo GZIP
4
5. ALGORITMOS DE COMPRESIÓN
● “El arte o la ciencia de representar información de una
forma compacta” [Sayood].
● Guardar la mayor cantidad de datos posibles en la menor
cantidad de espacio posible
● Tecnicas de Compresion:
○ Un algoritmo de compresión que toma una entrada X y
genera una representación Xc que necesita menos bits.
○ Un algoritmo de reconstrucción que trabaja en la
representación comprimida Xc y genera la
reconstrucción Y.
5
7. ALGORITMOS DE COMPRESIÓN
● Algoritmos de compresión con pérdida
Representar cierta cantidad de información utilizando una
menor cantidad de la misma, siendo imposible una
reconstrucción exacta de la misma.
● Algoritmos de compresión sin pérdida
Representar cierta cantidad de información utilizando una
fracción menor en almacenamiento de datos establecida,
siendo posible una reconstrucción exacta de los datos
originales.
7
9. ALGORITMO DE HUFFMAN
Es un algoritmo usado para compresión de datos dentro de la
compresión sin pérdida.
Fue desarrollado por David A. Huffman en 1992 mientras era
estudiante de doctorado en el MIT, el algoritmo fue publicado
en "A Method for the Construction of Minimum-Redundancy
Codes".
9
10. ALGORITMO DE HUFFMAN
Dado un conjunto de símbolos con sus respectivos pesos.
Los pesos son la frecuencia de aparición de un dato en una cadena.
“Genciencia” el peso del símbolo “i” = 2, ya que aparece en dos ocasiones
La salida del algoritmo es el mismo conjunto de símbolos de entrada codificado
mediante un código binario con un tamaño menor.
10
11. ALGORITMO DE HUFFMAN
Algoritmo Genérico:
1) Cuenta las veces que aparece cada carácter y se realiza una lista enlazada.
2) Ordenamos por frecuencia de menor a mayor.
3) Consideremos ahora que cada elemento es el nodo raíz de un árbol.
4) Fundimos los dos primeros nodos (árboles) en un nuevo árbol, suma sus frecuencias y
se coloca en el lugar correspondiente (Repite hasta tener un solo arbol).
5) Asignamos los códigos, las ramas a la izquierda son ceros, y a la derecha unos.
6) Y traduce texto.
11
18. ALGORITMO DE HUFFMAN
Se repite el proceso hasta obtener un solo árbol binario.
El cual en nuestro caso nos quedaría:
C,1
NULL,2
I,1
NULL,4
O,2
NULL,6
G,1
NULL,2
D,1
18
19. ALGORITMO DE HUFFMAN
Ponemos el valor de 0 a los nodos de la izquierda y 1 a los
de la derecha.
C,1
NULL,2
I,1
NULL,4
O,2
NULL,6
G,1
NULL,2
D,1
0
0 1
1
0
0
1
1
19
20. ALGORITMO DE HUFMAN
Obtenemos el valor binario de cada letra.Ejemplo : para (I)
necesitamos pasar por el nodo [null, 2] que tiene el valor 0 y
llegamos al nodo de [I] que tiene el valor 0. Por lo tanto el valor
de (I) será (00).
LETRAS CODIGO
I 00
G 01
O 10
C 110
D 111
20
21. ALGORITMO DE HUFFMAN
Por último asignamos los códigos a la palabra y obtendremos
todo la secuencia de códigos correspondientes.
C O D I G O
110 10 111 00 01 10
21
23. HTTP (Hypertext Transfer Protocol)
La Compresión HTTP es una capacidad que se puede construir en
los servidores web y clientes de Internet para mejorar la velocidad
de transferencia y la mejorar el uso del ancho de banda.
23
24. HTTP (Hypertext Transfer Protocol)
Permite la compresión con y sin pérdida.
Los esquemas de compresión más comunes incluyen gzip y
Deflate
Soporta tokens tanto estandarizados como de terceros.
Una compresión con pérdida es mucho más eficiente por
velocidad
24
25. HTTP-Compression End to end
Una compresión del cuerpo de un mensaje que se realiza por el servidor y
durará sin cambios hasta que llegue al cliente.
25
26. HTTP-Compression Hop by hop
La compresión no ocurre en el recurso en el servidor, creando una
representación específica que se transmite, sino en el cuerpo del mensaje entre
dos nodos en la ruta entre el cliente y el servidor.
26
27. Tokens de Content-Encoding
Un token o componente léxico es una cadena de caracteres que tiene un significado coherente
lenguaje de programación. Palabras clave (if, else, while, int, ...), identificadores, números,
signos.
La lista oficial de tokens disponible para servidores y clientes es mantenida por IANA,e incluye:
deflate - compresión basada en el algoritmo deflate (descrito en RFC 1951), envuelto en el
interior del formato de datos zlib (RFC 1950);
exi - Intercambio Eficiente de XML
gzip - formato zip GNU (que se describe en el RFC 1952). Este método es el de más amplio
soporte a marzo de 2011.
identity - No se utiliza ninguna transformación. Este es el valor predeterminado para la
codificación de contenido. 27
28. HTTP-Beneficios
Beneficio
Dependiendo del tipo de archivo, en general se puede obtener una
compresión del 90% y en promedio, el ancho de banda que se ahorra puede
ser dos o tres veces menos que de no utilizar la compresión HTTP.
Ventajas-Desventajas
· Menor consumo de ancho de banda, traducido en menor gasto de
dinero .
· Menor tiempo de transferencia de datos entre el servidor y el cliente.
· Mayor utilización del CPU del servidor.
28
30. Gzip
El formato gzip se utiliza en la compresión( End to end ) HTTP , una técnica
utilizada para acelerar el envío de HTML y otros contenidos en la World
Wide Web.
30
31. Gzip
GZIP es el método de compresión más popular utilizado en la web hoy en día.
Es un algoritmo de compresión de código abierto desarrollado por el proyecto
GNU.
GZIP funciona mejor en contenido basado en texto y proporciona un promedio
de 70 a 90 por ciento de ahorro de bytes.
GZIP es compatible con todos los navegadores web más utilizados en la
actualidad.
31
32. Gzip-Algoritmo
El algoritmo encuentra cadenas duplicadas en los datos de entrada.
La segunda ocurrencia de una cadena es reemplazada por un puntero a la
cadena anterior, en forma de un par (distancia,longitud).
Las distancias están limitadas a 32K bytes, y las longitudes son limitadas a
258 bytes.
Cuando una cadena no se produce ningún duplicado dentro 32K bytes, se
emite como una secuencia de bytes .
32