Algoritmo Lempel Ziv Welch

59
ANTES DE COMPRESIÓN… Redundancia: Datos que son repetitivos o previsibles Entropía: Cantidad de Información promedio que emite una fuente

description

Compresión de datos: Algoritmo Lempel Ziv

Transcript of Algoritmo Lempel Ziv Welch

Algoritmo Lempel-Ziv-Welch

Antes de CompresinRedundancia: Datos que son repetitivos o previsibles

Entropa: Cantidad de Informacin promedio que emite una fuente

Tipos de InformacinRedundante: 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 CompresinSin 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 prdidaLos datos antes y despus de comprimirlos son exactos en la compresin sin prdida.

Una mayor compresin solo implica ms tiempo de proceso.

El bit rate siempre es variable en la compresin sin prdida.

Se utiliza principalmente en la compresin de texto. 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.

Una vez realizada la compresin, no se 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 PrdidaLos 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 n-ls=18-9=9

Ventana hacia delante ls=9

aababacbacbacbcacbacbbaaVentana de bsquedaVentana hacia delante987654321Verificamos 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 aababacbacbacbcacbacbbaa987654321Y se forma la terna (3, 5, c)Ventana de bsquedaVentana hacia delanteLas dos ventanas se desplazan longitud+1 a la izquierda como tenemos la terna (3, 5, c) las ventanas se desplazan 6 smbolos a la izquierdacbacbacbcacbacbbaa987654321Y se forma la terna (7, 6, b)Ventana de bsquedaVentana hacia delanteaababaLas dos ventanas se desplazan longitud+1 a la izquierda como tenemos la terna (7, 6, b) las ventanas se desplazan 7 smbolos a la izquierdabcacbacbbaa987654321Y se forma la terna (4, 1, a)Ventana de bsquedaVentana hacia delanteaababacbacbacEn 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 aababacba987654321Y se lee la terna (3, 5, c)aababacbacbacbc987654321Caracteres que salen de la terna 1Smbolo que se aade de la terna aababacbacbacbc987654321Y se lee la terna (7, 6, b)aababacbacbacbcacbacbb987654321Caracteres que salen de la terna 2Smbolo que se aade de la terna aababacbacbacbcacbacbb987654321Y se lee la terna (4, 1, a)aababacbacbacbcacbacbbaa987654321Es la cadena de caracteres la cual se tenia al principio se derivan ZIP, GZIP, WINZIP, ARJLZ77 -> LZ78Un ao despus de la publicacin de Jacob Ziv (LZ77) y Abraham Lempel introdujo otro mtodo de compresin

Algoritmo Lempel-Ziv-WelchLZW (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 ZivLZW

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 LZWAl 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 CLAVELa 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 LZWLleg 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 imgenesLZW 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 LZWAsumir 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 0La tabla inicial sera:

Cdigo012ClaveabcCompresin LZWSe escanea el texto de izquierda a derecha

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

Representar a p por su cdigo pcod en el diccionario.

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

Vaya al paso 2Compresin LZWTexto Original= aababacbacbacbcacbP=aPcod =0C=aRepresentamos a con 0 y se agrega a la tabla aa, con su respectivo cdigo.Texto comprimido = 0

Cdigo0123ClaveabcaaCompresin LZWTexto Original= aababacbacbacbcacbP=aPcod=0C=bRepresentamos a con 0 y se agrega a la tabla ab, con su respectivo cdigo.Texto comprimido = 00

Cdigo01234ClaveabcaaabCompresin LZWTexto Original= aababacbacbacbcacbP=bPcod=1C=aRepresentamos b con 1 y se agrega a la tabla ba, con su respectivo cdigo.Texto comprimido = 0|0|1

Cdigo012345ClaveabcaaabbaCompresin LZWTexto Original= aababacbacbacbcacbP=abPcod=4C=aRepresentamos ab con 4 y se agrega a la tabla aba, con su respectivo cdigo.Texto comprimido = 0|0|1|4|

Cdigo0123456ClaveabcaaabbaabaCompresin LZWTexto Original= aababacbacbacbcacbP=aPcod=0C=cRepresentamos a con 0 y se agrega a la tabla ac, con su respectivo cdigo.Texto comprimido = 0|0|1|4|0

Cdigo01234567ClaveabcaaabbaabaacCompresin LZWTexto Original= aababacbacbacbcacbP=cPcod=2C=bRepresentamos c con 2 y se agrega a la tabla cb, con su respectivo cdigo.Texto comprimido = 0|0|1|4|0|2|

Cdigo012345678ClaveabcaaabbaabaaccbCompresin LZWTexto Original= aababacbacbacbcacbP=baPcod=5C=cRepresentamos ba con 5 y se agrega a la tabla bac, con su respectivo cdigo.Texto comprimido = 0|0|1|4|0|2|5

Cdigo0123456789ClaveabcaaabbaabaaccbbacCompresin LZWTexto Original= aababacbacbacbcacbP=cbPcod=8C=aRepresentamos cb con 8 y se agrega a la tabla cba, con su respectivo cdigo.Texto comprimido = 0|0|1|4|0|2|5|8|

Cdigo012345678910ClaveabcaaabbaabaaccbbaccbaCompresin LZWTexto Original= aababacbacbacbcacbP=acPcod=7C=bRepresentamos ac con 7 y se agrega a la tabla acb, con su respectivo cdigo.Texto comprimido = 001402587

Cdigo01234567891011ClaveabcaaabbaabaaccbbaccbaacbCompresin LZWTexto Original= aababacbacbacbcacbP=bPcod=1C=cRepresentamos 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|

Cdigo0123456789101112ClaveabcaaabbaabaaccbbaccbaacbbcCompresin LZWTexto Original= aababacbacbacbcacbP=cPcod=2C=aRepresentamos 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|

Cdigo012345678910111213ClaveabcaaabbaabaaccbbaccbaacbbccaCompresin LZWTexto Original= aababacbacbacbcacbP=acPcod=7C=bRepresentamos 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|

Cdigo01234567891011121314ClaveabcaaabbaabaaccbbaccbaacbbccaacbCompresin LZWTexto Original= aababacbacbacbcacbP=bPcod=1C=aRepresentamos b con 1Texto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|

Cdigo01234567891011121314ClaveabcaaabbaabaaccbbaccbaacbbccaacbCompresin LZWTexto Original= aababacbacbacbcacbTexto comprimidoaababacbacbacbcacb0014025871271Descompresin LZWLa 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 LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha0 representa aTexto Descomprimido=aPcod=0 y p=ap=a seguido del siguiente caracter (c) se agrega a la tabla

Cdigo012ClaveabcDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha0 representa aTexto Descomprimido=aaPcod=0 y p=aultimop=a seguido del primer caracter de p(a) se agrega a la tabla

Cdigo0123ClaveabcaaDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha1 representa bTexto Descomprimido=aabPcod=1 y p=bultimop=a seguido del primer caracter de p(b) se agrega a la tabla

Cdigo01234ClaveabcaaabDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha4 representa abTexto Descomprimido=aababPcod=4 y p=abultimop=b seguido del primer caracter de p(a) se agrega a la tabla

Cdigo012345ClaveabcaaabbaDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha0 representa aTexto Descomprimido=aababaPcod=0 y p=aultimop=ab seguido del primer caracter de p(a) se agrega a la tabla

Cdigo0123456ClaveabcaaabbaabaDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha2 representa cTexto Descomprimido=aababacPcod=2 y p=cultimop=a seguido del primer caracter de p(c) se agrega a la tabla

Cdigo01234567ClaveabcaaabbaabaacDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha5 representa baTexto Descomprimido=aababacbaPcod=5 y p=baultimop=c seguido del primer caracter de p(b) se agrega a la tabla

Cdigo012345678ClaveabcaaabbaabaaccbDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha5 representa baTexto Descomprimido=aababacbaPcod=5 y p=baultimop=ba seguido del primer caracter de p(c) se agrega a la tabla

Cdigo0123456789ClaveabcaaabbaabaaccbbacDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha8 representa cbTexto Descomprimido=aababacbacbPcod=8 y p=cbultimop=cb seguido del primer caracter de p(a) se agrega a la tabla

Cdigo012345678910ClaveabcaaabbaabaaccbbaccbaDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha7 representa acTexto Descomprimido=aababacbacbacPcod=7 y p=acultimop=ac seguido del primer caracter de p(b) se agrega a la tabla

Cdigo01234567891011ClaveabcaaabbaabaaccbbaccbaacbDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha1 representa bTexto Descomprimido=aababacbacbacbPcod=1 y p=bultimop=b seguido del primer caracter de p(c) se agrega a la tabla

Cdigo0123456789101112ClaveabcaaabbaabaaccbbaccbaacbbcDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha2 representa cTexto Descomprimido=aababacbacbacbcPcod=2 y p=cultimop=c seguido del primer caracter de p(a) se agrega a la tabla

Cdigo012345678910111213ClaveabcaaabbaabaaccbbaccbaacbbccaDescompresin LZWTexto Original= aababacbacbacbcacbTexto comprimido = 0|0|1|4|0|2|5|8|7|1|2|7|1|Convertir los cdigos de izquierda a derecha7 representa acTexto Descomprimido=aababacbacbacbcacPcod=7 y p=acultimop=ac seguido del primer caracter de p(b) se agrega a la tabla

Cdigo01234567891011121314Claveabcaaabbaabaaccbbaccbaacbbccaacb