Vous êtes sur la page 1sur 59

ANTES DE COMPRESIN

Redundancia: Datos que son repetitivos o previsibles

Entropa: Cantidad de Informacin promedio que emite una fuente

TIPOS DE INFORMACIN
Redundante: Informacin repetitiva o predecible.

Irrelevante: Informacin que no podemos apreciar y cuya eliminacin por

tanto no afecta al contenido del mensaje.


Bsica: la relevante. La que no es ni redundante ni irrelevante. La que

debe ser transmitida para que se pueda reconstruir la seal.

TIPOS DE COMPRESIN
Sin prdidas reales: es decir, transmitiendo toda la entropa del mensaje

(toda la informacin bsica e irrelevante, pero eliminando la redundante).


Subjetivamente sin prdidas: es decir, adems de eliminar la

informacin redundante se elimina tambin la irrelevante.


Subjetivamente con prdidas: se elimina cierta cantidad de informacin

bsica, por lo que el mensaje se reconstruir con errores perceptibles pero


tolerables (por ejemplo: la videoconferencia).

COMPRESIN SIN PERDIDA VS


COMPRESIN CON PRDIDA
Los datos antes y despus de

comprimirlos son exactos en la


compresin sin prdida.
Una mayor compresin solo implica ms

Puede eliminar datos para reducir an ms

el tamao, con lo que se suele reducir la


calidad.
El bit rate puede ser constante o variable.

tiempo de proceso.
Una vez realizada la compresin, no se

El bit rate siempre es variable en la

compresin sin prdida.


Se utiliza principalmente en la

compresin de texto.

puede obtener la seal original, aunque s


una aproximacin cuya semejanza
depender del tipo de compresin.
Se utiliza principalmente en la compresin

de imgenes, videos y sonidos.

COMPRESIN SIN PRDIDA


Los mtodos de compresin sin prdida de informacin (lossless) se

caracterizan porque se transmite toda la entropa del mensaje (toda la


informacin bsica e irrelevante, pero eliminando la redundante).
Por ejemplo: codificacin de Huffman, codificacin aritmtica y Lempel-Ziv.

Son mtodos idneos para la compresin dura de archivos.

CODIFICACIN
LEMPEL-LZ77
(VENTANA
DESLIZANTE)

Algoritmo de compresin sin perdidas desarrollado por Jacov Ziv y


Abraham Lempel y publicado en un paper en 1997.

La compresin de datos se basa fundamentalmente en buscar repeticiones


en series de datos para despus almacenar solo el dato junto al nmero
de veces que se repite, para ello se utilizan algoritmos de compresin
como el de Lempel Ziv .
El objetivo de la compresin es siempre reducir el tamao de la
informacin, intentando que esta reduccin de tamao no afecte al
contenido.

Compresin sin prdidas:en esta compresin los datos


antes y despus de comprimirlos son exactos, pero una mayor
compresin implica ms tiempo de proceso.
Encompresinsinprdida,esposiblereconstruirexactamente
losdatosoriginales
Compresin con prdidas:puede eliminar datos para reducir
an ms el tamao, con lo que se suele reducir la calidad. En
este tipo de compresin no se obtiene la seal original una vez
realizada la compresin. Se utiliza principalmente en la
compresin de imgenes, videos y sonido.

La compresin sin prdida de datos, es utilizada para comprimir


archivos o informacin que contienen datos que no pueden ser
degradados o perdidos, como pueden ser documentos de texto,
archivos
ejecutables,
etc.
Los mtodos de compresin sin prdida de informacin
(lossless) se caracterizan porque se transmite toda la entropa
del mensaje (toda la informacin bsica e irrelevante, pero
eliminando la redundante).

CARACTERISTICAS
No utiliza diccionario, con lo que las implementaciones concretas
son muy diferentes
Se basa en una ventana deslizante (n)
La ventana se divide en dos: ventana de bsqueda (n-ls) y
ventana hacia delante (ls)
Se buscan coincidencias entre ventanas
Se manejan ternas (puntero, longitud y carcter)

Codificador
Checamos si el primer smbolo de la ventana hacia adelante se
encuentra en la ventana de bsqueda. Si no est, se forma la
terna (0,0,?) ?=primer smbolo de la ventana hacia adelante.
Las dos ventanas se desplazan a la izquierda longitud+1
posiciones.
Si est, veo si alguna de las secuencias que empiezan en l es
igual a alguna que comienza en la ventana. Busco la de mayor
longitud y se forma la tercia (p,l,?) p= posicion o puntero del
primer smbolo de la ventana de bsqueda que contiene la
cadena. Las dos ventanas se desplazan a la izquierda
longitud+1 posiciones.

EJEMPLO
Cadena a codificar: aababacbacbacbcacbacbbaa
Longitud de la ventana n=18
Longitud de la ventana hacia delante ls=6

aababacbacbacbcacbacbbaa
Calculamos el tamao de la ventana de bsqueda
ls=18-9=9
Ventana hacia delante ls=9
Ventana de
bsqueda

Ventana hacia
delante

a a b a b a c b a c b a c b c a c b a c b b a a
9 8 7 6 5 4 3 2 1

n-

Verificamos si el primer smbolo de la ventana hacia delante se


encuentra en la ventana de bsqueda si es as buscamos la
cadenas mas larga de smbolos que se repitan
Ventana de
bsqueda

Ventana hacia
delante

aababac bac bac bc ac bac bbaa


987654321

Y se forma la terna (3, 5,


c)

Las dos ventanas se desplazan longitud+1 a la izquierda como


tenemos la terna (3, 5, c) las ventanas se desplazan 6 smbolos
a la izquierda
Ventana de
bsqueda

aababa

Ventana hacia
delante

c bac bac bc ac bac bbaa


987654321

Y se forma la terna (7, 6, b)

Las dos ventanas se desplazan longitud+1 a la izquierda como


tenemos la terna (7, 6, b) las ventanas se desplazan 7 smbolos
a la izquierda
Ventana de
bsqueda

Ventana hacia
delante

aababa c bac bac bc ac bac bbaa


98 7 6 5 4 3 2 1

Y se forma la terna (4, 1, a)

En este caso conviene


tomar el puntero del
que se encuentra mas
cerca del uno en este
ejemplo es el 4 ya que
son menos bits los que
se mandan.

Resultado
Ventana de bsqueda: aababacba
(3, 5, c)
(7, 6, b)
(4, 1, a)

Decodificador
La ventana inicial es la ventana de bsqueda
Se lee la terna si la terna es (0,0,?). Se coloca el
smbolo ? Al final de la cadena
Si la terna es (p,l,c). Se colocan los l smbolos a
partir de la posicin p y se aade al final el
carcter c

La ventana inicial es la ventana de bsqueda


a a b a b a c b a
9 8 7 6 5 4 3 2 1

Y se lee la terna (3, 5, c)

Caracteres que salen de la


terna 1

a a b a b a c b a c b a c b c
9 8 7 6 5 4 3 2 1

Smbolo que se aade de


la terna

a a b a b a c b a c b a c b c
9 8 7 6 5 4 3 2 1

Y se lee la terna (7, 6, b)

Caracteres que salen de la


terna 2

a a b a b a c b a c b a c b c a c b a c b b
9 8 7 6 5 4 3 2 1

Smbolo
que
se
aade de la terna

a a b a b a c b a c b a c b c a c b a c b b
9 8 7 6 5 4 3 2 1

Y se lee la terna (4, 1, a)

a a b a b a c b a c b a c b c a c b a c b b a a
9 8 7 6 5 4 3 2 1
Es la cadena de caracteres la cual se tenia al
principio

se derivan ZIP, GZIP, WINZIP, ARJ

LZ77 -> LZ78


Un ao despus de la publicacin

de Jacob Ziv (LZ77) y Abraham


Lempel introdujo otro mtodo de
compresin

ALGORITMO LEMPEL-ZIVWELCH
LZW (Lempel-Ziv-Welch) es

un algoritmo de compresin
sin prdida desarrollado por
Terry Welch en 1984 como
una versin mejorada del
algoritmo LZ78 desarrollado
por Abraham Lempel y Jacob
Ziv

LZW
Abandona el concepto de ventana deslizante.
LZW es adaptativo, debido a que el contenido de las tablas se genera a

partir de los datos de entrada a comprimir.

El diccionario es una lista potencialmente ilimitada de frases previamente

tratadas.

LZW explota la redundancia en la codificacin debido a que smbolos ms

frecuentes forman cadenas ms largas en la tabla, con lo que el nmero de


bits por carcter disminuye.

La patente de LZW la ostenta UNISYS CORPORATION.


A partir de 1995 decidi cobrar una tasa y se desat controversia, debido a

que su uso se haba extendido ampliamente

VENTAJAS DEL LZW


Al armar el diccionario sobre la marcha se evita hacer dos pasadas sobre el

texto, una analizando y la otra codificando.

El descompresor puede reconstruirlo a partir del texto comprimido

mientras lo lee, evitando as incluir el diccionario dentro del texto


comprimido.

El algoritmo sirve para comprimir cualquier secuencia de bits,

independientemente de si es texto o cualquier otro tipo de informacin.

LA CLAVE
La clave del mtodo LZW reside en que es posible crear sobre la marcha,

de manera automtica 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 codificacin.

Dicho diccionario no es transmitido con el texto comprimido, puesto que el

descompresor puede reconstruirlo usando la misma lgica con que lo hace


el compresor y, si est codificado correctamente, tendr exactamente las
mismas cadenas que el diccionario del compresor tena.

APLICACIONES LZW
Lleg a ser utilizado en el programa compress , un programa de

compresin del Shell de UNIX en 1986(Actualmente ya no existe)

Empleado en el formato grfico GIF a partir de 1987.


Puede ser utilizado, opcionalmente, en archivos TIFF. TIFF (Tagged Image

File Format) es un formato de archivo informtico para imgenes

LZW es 10 veces ms rpido que gzip o zip.


En textos largos, comprime aproximadamente a la mitad del tamao

original. Otros tipos de datos son tambin comprimidos tilmente en


muchos casos.

COMPRESIN LZW
Asumir que las letras en un texto estn limitadas a D={a,b,c}
A cada letra, se les asigna un nmero consecutivo que empieza en 0
La tabla inicial sera:

Cdig 0
o
Clave a

COMPRESIN LZW
1.

Se escanea el texto de izquierda a derecha

2.

Se encuentra el prefijo p ms largo, para el cual hay un cdigo en la tabla.

3.

Representar a p por su cdigo pcod en el diccionario.

4.

Agregar pc, donde pc es el prefijo p y c es el siguiente carcter en el texto a


comprimir.

5.

Vaya al paso 2

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=a
Pcod =0
C=a
Representamos a con 0 y se agrega a la tabla aa, con su respectivo cdigo.
Texto comprimido = 0

Cd 0
igo
Clav a

aa

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=a
Pcod=0
C=b
Representamos a con 0 y se agrega a la tabla ab, con su respectivo cdigo.
Texto comprimido = 00

Cdi 0
go
Clave a

aa

ab

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=b
Pcod=1
C=a
Representamos b con 1 y se agrega a la tabla ba, con su respectivo cdigo.
Texto comprimido = 0|0|1

Cdi 0
go
Clave a

aa

ab

ba

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=ab
Pcod=4
C=a
Representamos ab con 4 y se agrega a la tabla aba, con su respectivo

cdigo.

Texto comprimido = 0|0|1|4|

Cdi 0 1
go
Clave a b

aa

ab

ba

aba

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=a
Pcod=0
C=c
Representamos a con 0 y se agrega a la tabla ac, con su respectivo cdigo.
Texto comprimido = 0|0|1|4|0

Cdi 0 1
go
Clave a b

aa ab ba

ab

ac

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=c
Pcod=2
C=b
Representamos c con 2 y se agrega a la tabla cb, con su respectivo cdigo.
Texto comprimido = 0|0|1|4|0|2|

Cdi 0 1
go
Clave a b

2 3

c aa ab ba ab ac cb

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=ba
Pcod=5
C=c
Representamos ba con 5 y se agrega a la tabla bac, con su respectivo

cdigo.

Texto comprimido = 0|0|1|4|0|2|5

Cdi 0 1 2 3 4 5 6 7 8 9
go
Clave a b c aa ab ba ab ac cb ba

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=cb
Pcod=8
C=a
Representamos cb con 8 y se agrega a la tabla cba, con su respectivo

cdigo.

Texto comprimido = 0|0|1|4|0|2|5|8|

Cdig 0 1
o
Clave a b

2 3

c aa ab ba aba ac cb

10

ba
c

cb
a

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=ac
Pcod=7
C=b
Representamos ac con 7 y se agrega a la tabla acb, con su respectivo

cdigo.

Texto comprimido = 001402587

7 8 9 10 11
Cdig 0 1 2 3 4 5 6
o
Clave a b c aa ab ba ab ac cb ba cb ac

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=b
Pcod=1
C=c
Representamos b con 1 y se agrega a la tabla bc, con su respectivo cdigo.
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|

Cdi 0 1 2 3 4 5 6 7 8 9 10 11 12
go
Clave a b c aa ab ba ab ac cb ba cb ac bc

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=c
Pcod=2
C=a
Representamos c con 2 y se agrega a la tabla ca, con su respectivo cdigo.
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|

Cdi 0 1 2 3 4 5 6 7 8 9 10 11 12 13
go
Clave a b c aa ab ba ab ac cb ba cb ac bc ca

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=ac
Pcod=7
C=b
Representamos ac con 7 y se agrega a la tabla acb, con su respectivo

cdigo.

Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|

Cdigo

0 1

10

11

12

13

14

Clave

a b

aa

ab

ba

aba

ac

cb

bac cba acb bc

ca

acb

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
P=b
Pcod=1
C=a
Representamos b con 1
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|

Cdigo

0 1 2

12

1
3

14

Clave

a b

aa

ab

ba

aba

ac

cb

bac cba acb bc

c
a

acb

10

11

COMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido

ab a

ba cb

ac

ac

DESCOMPRESIN LZW
La caracterstica ms importante de LZW consiste en que no es necesario

transmitir la tabla de cadenas desde el compresor al descompresor.

Empricamente, se ha encontrado que el decodificador es al menos el

doble de rpido que su respectivo codificador debido a que no realiza


bsquedas en la tabla.

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
0 representa a
Texto Descomprimido=a
Pcod=0 y p=a
p=a seguido del siguiente caracter (c) se agrega a la tabla

Cdi 0
go
Clave a

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
0 representa a
Texto Descomprimido=aa
Pcod=0 y p=a
ultimop=a seguido del primer caracter de p(a) se agrega a la tabla

Cdi 0
go
Clave a

aa

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
1 representa b
Texto Descomprimido=aab
Pcod=1 y p=b
ultimop=a seguido del primer caracter de p(b) se agrega a la tabla

Cdi 0
go
Clave a

aa

ab

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
4 representa ab
Texto Descomprimido=aabab
Pcod=4 y p=ab
ultimop=b seguido del primer caracter de p(a) se agrega a la tabla

Cdi 0
go
Clave a

aa

ab

ba

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
0 representa a
Texto Descomprimido=aababa
Pcod=0 y p=a
ultimop=ab seguido del primer caracter de p(a) se agrega a la tabla

Cdi 0 1
go
Clave a b

aa

ab

ba

aba

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
2 representa c
Texto Descomprimido=aababac
Pcod=2 y p=c
ultimop=a seguido del primer caracter de p(c) se agrega a la tabla

Cdi 0 1
go
Clave a b

aa ab ba

ab

ac

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
5 representa ba
Texto Descomprimido=aababacba
Pcod=5 y p=ba
ultimop=c seguido del primer caracter de p(b) se agrega a la tabla

Cdi 0 1
go
Clave a b

2 3

c aa ab ba ab ac cb

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
5 representa ba
Texto Descomprimido=aababacba
Pcod=5 y p=ba
ultimop=ba seguido del primer caracter de p(c) se agrega a la tabla

Cdi 0 1 2 3 4 5 6 7 8 9
go
Clave a b c aa ab ba ab ac cb ba

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
8 representa cb
Texto Descomprimido=aababacbacb
Pcod=8 y p=cb
ultimop=cb seguido del primer caracter de p(a) se agrega a la tabla

Cdig 0 1
o
Clave a b

2 3

c aa ab ba aba ac cb

10

ba

cb

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
7 representa ac
Texto Descomprimido=aababacbacbac
Pcod=7 y p=ac
ultimop=ac seguido del primer caracter de p(b) se agrega a la tabla

7 8 9 10 11
Cdig 0 1 2 3 4 5 6
o
Clave a b c aa ab ba ab ac cb ba cb ac

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
1 representa b
Texto Descomprimido=aababacbacbacb
Pcod=1 y p=b
ultimop=b seguido del primer caracter de p(c) se agrega a la tabla

Cdi 0 1 2 3 4 5 6 7 8 9 10 11 12
go
Clave a b c aa ab ba ab ac cb ba cb ac bc

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
2 representa c
Texto Descomprimido=aababacbacbacbc
Pcod=2 y p=c
ultimop=c seguido del primer caracter de p(a) se agrega a la tabla

Cdi 0 1 2 3 4 5 6 7 8 9 10 11 12 13
go
Clave a b c aa ab ba ab ac cb ba cb ac bc ca

DESCOMPRESIN LZW
Texto Original= aababacbacbacbcacb
Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|
Convertir los cdigos de izquierda a derecha
7 representa ac
Texto Descomprimido=aababacbacbacbcac
Pcod=7 y p=ac
ultimop=ac seguido del primer caracter de p(b) se agrega a la tabla

Cdigo

0 1

10

11

12

13

14

Clave

a b

aa

ab

ba

aba

ac

cb

bac cba acb bc

ca

acb

Vous aimerez peut-être aussi