S08 - 1 Compresion de Archivos
S08 - 1 Compresion de Archivos
S08 - 1 Compresion de Archivos
Unidad II
Seguridad y Criptografa
Semana 8
Compresin de archivos
Objetivos Generales
Entender el manejo, uso de algoritmos y
estructuras de datos avanzados, haciendo
nfasis en los algoritmos de internet,
seguridad y redes.
Objetivo Especfico
Implementar algoritmos para seguridad
y compresin de archivos
Objetivo Instruccional
Implementar algoritmos para la
compresin de archivos.
Contenidos
Introduccin
Codificacin por longitud de series
Algoritmo de Huffman
Introduccin
Compresin de datos
En general, la mayor parte de los
archivos tienen un gran nivel de
redundancia.
Las tcnicas de compresin de
archivos sirven a menudo para
archivos de texto (en los que ciertos
caracteres aparecen con mucha mas frecuencia
que otras),
Introduccin
En que consiste?
Bsicamente la compresin consiste en tomar una
trama
de
smbolos
y
transformarlos
en
cdigos/claves. Si la compresin es eficiente, las
claves resultantes ocuparn menor espacio que los
smbolos originales. La decisin de obtener una
codificacin a partir de ciertos smbolos (o conjunto de
ellos) est basada en un modelo.
El modelo es simplemente una coleccin de datos y
reglas usados para procesar la entrada de smbolos
y determinar su correspondiente codificacin a la
salida.
Por ejemplo un programa usa el modelo para definir
aproximadamente las probabilidades para cada smbolo
y el codificador para producir una codificacin
apropiada basada en esas probabilidades.
Modelo y Codificacin
Introduccin
Introduccin
Introduccin
Tcnicas de compresin
Introduccin
Introduccin
(a cada
mensaje de la fuente asigna una cadena de smbolos del alfabeto de
salida). Se trata de aprovechar la redundancia de informacin
AAAABBBAABBBBBCCCCCCCCDABCBAAABBBBCCCD
Algunos inconvenientes:
El mtodo de compresin de caracteres no funciona con
cadenas que contienen dgitos.
Si se utilizan otros caracteres para codificar las longitudes de
las series, no podra aplicarse el mtodo a cadenas que
contengan esos caracteres.
Nueva interrogante:
Pero que pasa si el carcter de escape aparece tambin en la
serie de entrada?
Una solucin a este problema consiste en utilizar para
representar al carcter de escape una secuencia de escape
con una longitud de serie cero. De esta manera el espacio en
blanco podra representar al cero, y la secuencia de escape
Q<espacio> representara a cualquier aparicin de Q en la
entrada.
AAAAQBBBAABBBBBQQQQQCCCCCCCCDABCBAAABBBBCCCD
QDAQ BBBAAQEBQEQQHCDABCBAAAQDBCCCD
Otro ejemplo: Una secuencia de 51 A, debera codificarse
como:
QZAQYA
Matriz de puntos tpica, con informacin de la codificacin por longitud de series (q apaisada)
Ejemplo:
Palabra a codificar : ABRACADABRA
Empleando el cdigo binario compacto estndar, en el que la
representacin con cinco bits de i reproduce a la i-sima letra
del alfabeto (0 para los espacios en blanco), proporcionan la
siguiente serie de bits.
0000100010100100000100011000010010000001000101001000001
0 1 01 0 10 0 11 0 1 01 0
Esta cadena utiliza solo 15 bits en lugar de los 55 anteriores, pero
depende de los espacios en blanco como delimitador, aun con
estos (10 delimitadores) que sumarian 25 bits, aun sigue siendo
mucho mas compacto.
01101001111011100110100
Una forma fcil de representar el cdigo es a travs de un trie
(ordenacin por residuos).
0
0
R
1
0
B
0
D
1
C
Algoritmo de Huffman
Introduccin
El algoritmo de Huffman es un algoritmo para la
construccin de cdigos de Huffman, desarrollado
por David A. Huffman en 1952 y descrito en A
Method for the Construction of Minimum-Redundancy
Codes.
Este algoritmo toma un alfabeto de n smbolos, junto
con sus frecuencias (cantidad porcentajes) de aparicin
asociadas, y produce un cdigo de Huffman para
ese alfabeto y esas frecuencias.
Algoritmo de Huffman
Descripcin
El algoritmo consiste en la creacin de un rbol binario (trie) que tiene
cada uno de los smbolos por hoja, y construido de tal forma que
siguindolo desde la raz a cada una de sus hojas se obtiene el cdigo
Huffman asociado.
1. Se crean varios rboles, uno por cada uno de los smbolos del alfabeto,
consistiendo cada uno de los rboles en un nodo sin hijos, y etiquetado
cada uno con su smbolo asociado y su frecuencia de aparicin.
2. Se toman los dos rboles de menor frecuencia, y se unen creando un
nuevo rbol. La etiqueta de la raz ser la suma de las frecuencias de las
races de los dos rboles que se unen, y cada uno de estos rboles ser
un hijo del nuevo rbol. Tambin se etiquetan las dos ramas del nuevo
rbol: con un 0 la de la izquierda, y con un 1 la de la derecha.
3. Se repite el paso 2 hasta que slo quede un rbol.
Con este rbol se puede conocer el cdigo asociado a un smbolo, as
como obtener el smbolo asociado a un determinado cdigo.
Algoritmo de Huffman
Algoritmo de Huffman
Obtencin de un smbolo a
partir del cdigo
PROCEDIMIENTO:
Algoritmo de Huffman
Ejemplo de uso
La tabla describe el alfabeto a codificar, junto con las
frecuencias de sus smbolos. En el grfico se muestra el rbol
construido a partir de este alfabeto siguiendo el algoritmo
descrito.
Smbolo
A
B
C
D
E
F
G
Frecuencia
0,15
0,30
0,20
0,05
0,15
0,05
0,10
Algoritmo de Huffman
Ejemplo de construccin
Smbolo
A
B
C
D
E
F
G
1.00
1
0
0..40
1
0..60
0..20
0..30
0
0..30
B
0.15
A
0..10
0
1
0..15
E
0
0..20
C
0..10
G
0..05
D
1
0..05
F
Frecuencia
0,15
0,30
0,20
0,05
0,15
0,05
0,10
Algoritmo de Huffman
Limitaciones
Para poder utilizar el algoritmo de Huffman es
necesario conocer de antemano las frecuencias de
aparicin de cada smbolo, y su eficiencia depende
de lo prximas a las frecuencias reales que sean las
estimadas. Algunas implementaciones del algoritmo
de Huffman son adaptativas, actualizando las
frecuencias de cada smbolo conforme recorre el
texto.
La eficiencia de la codificacin de Huffman
tambin depende del balance que exista entre los
hijos de cada nodo del rbol, siendo ms eficiente
conforme menor sea la diferencia de frecuencias
entre los dos hijos de cada nodo.
Ejemplo
Algoritmo de Huffman
Algoritmo de Huffman
Ejemplo (continuacin)
Si observa el rbol de Huffman, se puede comprobar
que la diferencia de frecuencias entre las ramas del
rbol es menor cuando esta se agrupa.
1.0
1.0
BB
Smbolo
A
B
Frecuencia
0,9844
0,0156
AB
AA
Smbolo
AA
AB
Frecuencia
0,9688
0,0312
Algoritmo de Huffman
Y para la decodificacin?
El rbol se debe almacenar o bien enviarlo junto con
el mensaje para decodificarlo. As el ahorro de
espacio antes mencionado no es totalmente exacto,
porque el mensaje no se puede decodificar sin el trie
y se debe en tener en cuenta el coste que significa
almacenar el rbol (array cdigo) junto con el mensaje.
Por lo tanto, la codificacin Huffman solo es efectiva
para archivos largos donde el ahorro de espacio en
el mensaje es suficiente como para compensar el
coste.
Algoritmo de Huffman
Ejercicio
Mostrar el proceso de construccin del rbol de
codificacin de Huffman cuando se aplica el
mtodo descrito a la cadena ABRACADABRA.
cuantos bits necesita el mensaje cifrado?
TRABAJO DE INVESTIGACION
Run-Length
LZ77
LZW
Aritmticos
RLE
Shannon-Fano
Deflate
GZIP
Basados en TDC
Basados en WAVELETS
TRABAJO PRACTICO
Implementar
los
procedimientos
de
compresin y descompresin descritos para
el mtodo de codificacin por longitud de
series, considerando un alfabeto fijo y
utilizando la letra Q como carcter de
escape.
Implementar
los
procedimientos
de
compresin y descompresin descritos para
el mtodo de codificacin de archivos
binarios.
Tpicos I
Unidad II
Seguridad y Criptografa
Semana 8
Compresin de archivos