Você está na página 1de 13

ESCUELA POLITÉCNICA NACIONAL

FACULTAD DE INGENIERÍA ELÉCTRICA Y


ELECTRÓNICA

TEORIA DE INFORMACIÓN Y CODIFICACIÓN

“CÓDIGO LZW (Lempel-Ziv-Welch)”

ROMERO MATIAS.
SALAZAR FRANCISCO.
ZUÑA BRYAN.

GR2.

PROFESOR: ING. MARIA SOLEDAD JIMÉNEZ.

26-11-2018
Contenido
1. INTRODUCCIÓN...........................................................................................3
2. CAPÍTULO I. CODIGO LEMPEL ZIV.............................................................4
2.1 RESEÑA HISTORICA..........................................................................4
2.2 CODIFICACIÓN BASADA EN DICCIONARIOS..................................4
2.3. ALGORITMO LEMPEL ZIV..................................................................5
3. CAPITULO II. CÓDIGOS DERIVADOS DE LEMPEL ZIV.............................6
3.1. LZ77.....................................................................................................3
3.2. LZ78.....................................................................................................4
3.2. LZ78.....................................................................................................4
4. CAPITULO III.................................................................................................3
4.1. EJEMPLOS DE CODIFICACIÓN LEMPEL ZIV...................................3
4.2. APLICACIONES...................................................................................3
5. CAPITULO IV.................................................................................................3
6.1. CONCLUSIONES Y RECOMENDACIONES.......................................3
6.2. REFERENCIAS BIBLIOGRÁFICAS....................................................3
1. INTRODUCCIÓN.

En la actualidad el uso de tecnología es primordial para el desarrollo de la vida


diaria, tal es el caso que todos están conectados gracias a las herramientas
tecnológicas como computadoras, celulares, dispositivos inteligentes, etc., y así
también haciendo uso del internet. Estas dos palabras tecnología e internet van
de la mano cuando se desea transmitir información de manera on-line de
cualquier tipo como imágenes, música, video entro otros con lo cual se han
desarrollado métodos para la compresión de datos que permiten la reducción
del volumen de datos tratables para representar una determinada información
empleando una menor cantidad de espacio todo para obtener una transmisión
eficiente y fiel. La compresión es un caso particular de la codificación, cuya
característica principal es que el código resultante tenga menor tamaño que el
original. A la hora de hablar de compresión hay que tener presentes dos
conceptos, redundancia (datos que son repetitivos o previsibles) y entropía (la
información nueva o esencial que se define como la diferencia entre la cantidad
total de datos de un mensaje y su redundancia). Se tiene dos alternativas para
la compresión de datos, la compresión con perdida de información o entropía
(lossy) y la compresión sin pérdida de información o entropía (lossless). Uno de
los modelos sin pérdidas que ha demostrado ser válido y muy usado para la
compresión es el que se basa en diccionarios, en los cuales se leen los datos
de entrada y se busca grupos de símbolos que coincidan. Siendo uno de los
más importantes y con varias aplicaciones, el algoritmo Lempel-Ziv, que utiliza
el texto como el diccionario, en general reemplazando las ocurrencias
posteriores de una cadena por números que indican dónde ocurrió antes y su
longitud.
2. CAPÍTULO I. CODIGO LEMPEL ZIV

2.1. RESEÑA HISTÓRICA

El algoritmo Lempel Ziv fue ideado por Jacob Ziv y Abraham Lempel, y
publicado en el IEEE Transactions on Information Theory, vol. IT-23, No 3 de
mayo de 1977, si bien ya había sido presentado anteriormente en el IEEE
International Symposium on Information Theory celebrado en Ronneby, Suecia,
en Junio de 1976. Desde entonces recibe el nombre de compresión Lempel-Ziv
o, para abreviar, LZ. Existe una variante de LZ, denominada LZW (Lempel-Ziv-
Welch), que se ha hecho muy famosa por ser la que se utiliza para comprimir
en el formato de imágenes GIF. Se trata de una modificación de LZ que, a
costa de un menor ratio de compresión, ofrece mejoras en cuanto a velocidad y
uso de memoria, lo que hizo que se usara en los modems que soportan el
protocolo V42bis. Es también el algoritmo empleado en el programa compress.

2.2. CODIFICACION BASADA EN DICCIONARIOS

La codificación basada en diccionario usan el principio de remplazar cadenas


de datos con palabras código que identifican a esa cadena dentro de un
diccionario. El diccionario contiene una lista de subcadenas y palabras código
asociados a cada una de ellas. El diccionario que contiene las cadenas de
símbolos puede ser estático o adaptable (dinámico). Los métodos basados en
diccionario, a diferencia de los métodos estadísticos, usan palabras código de
longitud fija y no requieren de las estadísticas de los símbolos para realizar la
compresión.

Métodos y aplicaciones

-Método diccionario estático: La codificación de tipo estática encuentran una


cadena de caracteres repetidos al leer datos en una ubicación específica, como
su nombre lo indica se mantiene permanentemente, en algunos casos permite
la adición de cadenas, pero nunca su eliminación. el cual no es modificado
durante el proceso de codificación, sino que se mantiene desde antes de
empezar el proceso, se suele utilizar cuando el mensaje a codificar es grande
pero fijo como por ejemplo una aplicación para celulares que almacena el
contenido de un libro en un espacio de almacenamiento reducido.

-Método diccionario dinámico: La codificación de tipo dinámica los datos se


escanean desde el principio y la primera cadena de caracteres se registra en el
diccionario. Cuando se encuentra la cadena de caracteres registrada, la
referiremos al diccionario. Se conservan las cadenas que se han introducido
anteriormente, lo que permite adiciones y supresiones de cadenas conforme se
vaya leyendo datos de entrada.
2.3. ALGOTIRMO DE LEMPEL ZIV

Es un algoritmo de compresión sin pérdidas, es decir que la información


emitida por una fuente va a ser la misma que el receptor reciba después de la
transmisión. La idea en que se basa es de buscar secuencias repetidas dentro
de los datos, y cada vez que encuentra una de ellas la remplaza por un puntero
a la zona en la que comienza la primera secuencia, más la longitud que se
debe tomar a partir de esa posición. En caso de que no haya repeticiones, se
emite la secuencia como un literal. Lo que conforma el núcleo de la idea, es
identificar lo que Lempel-Ziv llama extensión reproducible de una cadena
dentro de otra.

Suponiendo tener una secuencia S=00101011. Poniéndole tabulado, de forma


que se pueda hacer referencia a cada elemento de la secuencia fijándose en el
orden en el que aparece dentro de esta. La primera fila de la figura a
continuación, indica la posición dentro del buffer y la segunda su contenido. Se
considera la posición más a la izquierda como primera posición (posición 1).
Suponiendo que los tres primeros elementos, 001, ya han sido codificados,
denominándole como secuencia 1. Ahora se tiene que codificar lo que sigue:
01011, llamada secuencia 2. La secuencia 2 empieza por 0101. Si se fija en lo
que ya está codificado, la secuencia 1; se tiene que finalizar en 01, pero si se
continúa entrando en la secuencia 2 ahora se observa que empieza por 01. Si
juntamos el final de la secuencia 1 con el principio de la secuencia 2, tenemos
0101, que es igual al comienzo de la secuencia a codificar o secuencia 2. Es
decir: los elementos 4, 5, 6 y 7 de la secuencia total son una "repetición'' de los
elementos 2, 3, 4 y 5. Por tanto se codificarán como un puntero a la posición
número 2 más una longitud de 4.

FIGURA 1. Secuencia S

La codificación se lleva a cabo introduciendo los datos dentro de un buffer de


una longitud prefijada, n, dentro del cual se van buscando subcadenas ya
repetidas haciendo uso del método descrito anteriormente.
3. CAPÍTULO II. CODIGOS DERIVADOS DE LEMPEL ZIV

3.1. LZ77

El nuevo modelo de Lempel-Ziv fue llamado lz77 (lz son las iniciales de sus
creadores y 77 el año en que se creó). LZ77 o denominado como lz1 es un
compresor basado en algoritmo sin pérdida se utilizan cuando la información a
comprimir es crítica y no se puede perder información. El modelo lz77 es muy
usado porque es fácil de implementar y es bastante eficiente.

Funcionamiento

En este algoritmo el codificador analiza el texto como una secuencia de


caracteres, mediante una ventana deslizable compuesta por dos partes; un
buffer de anticipación que es la opción que está a punto de ser codificada y un
buffer de búsqueda (la ventana en sí), que es la parte dónde se buscan
secuencias iguales a las existentes en el buffer de anticipación. Para codificar
el contenido, o parte de él, del buffer de anticipación, se busca la secuencia
igual en el buffer de búsqueda y la codificación resulta en indicar esta
repetición como una tripleta [offset, longitud, carácter siguiente].
Donde:
 Offset es la distancia desde el principio del buffer de anticipación hasta
el comienzo de la secuencia repetida.
 Longitud es la cantidad de caracteres repetidos.
 Carácter siguiente es el símbolo siguiente a la secuencia en el buffer de
anticipación.

Se usa un prefijo, un bit que actúa como una bandera, de forma similar a un
interruptor con dos estados que nos permite saber qué tipo de datos vienen a
continuación. Si el prefijo es 0, entonces lo que viene es un byte sin comprimir.
Si, por el contrario, el prefijo es 1, entonces lo que sigue a continuación es un
par desplazamiento/tamaño. A estos prefijos también se les llama “banderas”.
El par desplazamiento/tamaño es llamado una palabra clave. Una palabra clave
es un grupo de bits (o bytes) que contienen alguna clase de información usada
por el compresor y el descompresor. La otra salida posible de LZ77 es un
literal, la cual es simplemente un byte sin comprimir, de manera que la salida
de LZ77 puede ser de tres formas:

 Literales: son simplemente bytes sin comprimir.


 Palabras clave: en nuestro caso son pares tamaño/desplazamiento.
 Banderas: simplemente nos indican si los datos que hay a continuación
son literales o palabras clave.

FIGURA2.Cadena con salida real de un codigo LZ77


3.2. LZ78

En 1978 crearon el compresor LZ78 especializado en compresión de imágenes


(o la compresión de cualquier tipo de archivo binario). Es un algoritmo de
compresión basado en un diccionario construido dinámicamente en tiempo de
ejecución, es decir, que va ser creado tanto en la codificación como en la
descodificación, por lo que debe seguir las mismas reglas, diccionario idéntico.
Los datos comprimidos constan de dos elementos:

 Índice que aborda la entrada más larga del diccionario correspondiente


(i).
 Primer símbolo no coincidente (c).

Cuando aún no se encuentra un símbolo en el diccionario, la palabra código un


índice de valor 0 y procede a ser agregado al diccionario. A diferencia de LZ77,
este algoritmo no utiliza ninguna combinación de dirección y longitud de
secuencia, por lo que solo almacena el índice del diccionario, pero el
mecanismo para agregar el primer símbolo de desviación permanece desde el
LZ77. Además, el LZ78 ya tiene un diccionario de cadenas previamente
localizadas. Este diccionario comienza vacío o casi vacío y su tamaño está
limitado por la cantidad de memoria disponible. El algoritmo LZ78 tiene la
capacidad de capturar patrones y mantenerlos indefinidamente pero el tamaño
del diccionario está creciendo continuamente durante el proceso de
codificación, razón por la cual es un gran inconveniente. Por lo cual existen
varios métodos para limitar el tamaño del diccionario:

a) Dejar de agregar entradas y continuar como un codificador estático.


b) Desechar el diccionario y empezar desde cero después de que se
haya alcanzado un cierto número de entradas.

Funcionamiento

 Usa ventana “infinita” (todo el mensaje procesado previamente)


 Mantiene un diccionario explícito
 Genera un par y agrega (N,D) y agraga N D como nueva entrada al
diccionario. N: puntero a máxima coincidencia. D: próximo símbolo (no
coincidente)
3.3. LZW

En 1984, Terry Welch de Unisys lo modificó para utilizarlo en controladores de


disco duro; por lo tanto, se agregó la inicial de su apellido a la abreviatura LZ, lo
que originó el término LZW.
LZW es un algoritmo muy rápido tanto para la compresión como para la
descompresión, basado en la multiplicidad de aparición de secuencias de
caracteres en la cadena que se debe codificar. Su principio consiste en sustituir
patrones con un código de índice y construir progresivamente un diccionario.

Características:
 Funciona en bits y no en bytes, por lo tanto, no depende de la manera
en que el procesador codifica información.
 Es uno de los algoritmos más populares y se utiliza particularmente en
formatos TIFF y GIF.
 Dado que el método de compresión LZW ha sido patentado por Unisys,
el que se utiliza en imágenes PNG es el algoritmo LZ77, por el que no se
pagan derechos de autor.
 En textos largos, comprime aproximadamente a la mitad del tamaño
original, en escenarios optimas es capas de reducir en un 78% el
tamaño final de un archivo sin perdida.

Construcción del diccionario

El diccionario comienza con los 256 valores de la tabla ASCII. El archivo a


comprimir se divide en cadenas de bytes (por lo tanto, para las imágenes
monocromáticas codificadas en 1 bit, esta compresión no es muy eficaz), cada
una de estas cadenas se compara con el diccionario y se agrega si no se
encuentra ahí.
Compresión

El algoritmo pasa por la cadena de información y la codifica. Si una cadena


nunca es más corta que la palabra más larga del diccionario, ésta se transmite.
Descompresión

Durante la descompresión, el algoritmo reconstruye el diccionario en la


dirección opuesta; por lo tanto, no necesita almacenarse.

Funcionamiento

1) Precarga el diccionario con los símbolos individuales


2) Lee la frase (con mayor coincidencia en diccionario) y la codifica con su
índice
3) Agrega al diccionario una nueva entrada
frase + 1º símbolo no coincidente
4) Si no termina el mensaje, vuelve al 2)

Propuesta original: usa puntero de 12 bits, hasta 4096 entradas al diccionario


Cuando se completa distintas estrategias como seguir con diccionario estático /
eliminar frases menos frecuentes / vaciar y reiniciar
4. CAPÍTULO III.

4.1. EJEMPLOS DE CODIFICACIÓN LEMPEL ZIV

COMPRESION LZ77
La cadena es:
AAACCCDDDAAABCCDD
Tiene: 17*8= 136 bits
Ventana de Búsqueda: 9
Ventana de avance: 3

FIGURA 3.FUENTE S

Buscamos la coincidencia más larga, en este caso la primera coincidencia se


da en la posición 7 luego en el 8 y último en el 9, escogemos el 9 por que es el
que tiene la coincidencia más larga. AAA (Ventana de avance) y AAA (de la
posición 9, 8 y 7)

Generamos el primer triplete que sería [9, 3, B]

Ahora corremos longitud + 1 (3+1) posiciones para establecer la nueva ventana


de búsqueda y ventana de avance.

FIGURA 4. DECODIFICACIÓN FUENTE S

La subcadena coincidente esta desde la 9,8 y 7 que es CCD con coincide con
la ventana de avance.

Generamos el segundo triplete que sería [9, 3, D]

Ya no podemos desplazarnos más porque ya llegamos al tope de la cadena.

El comprimido sería:
La ventana de Búsqueda + los tripletes
9 + (2*3)=15
15*8 = 120 bits.
COMPRESION LZ78

En la codificación

FIGURA 5 CODIFICACIÓN FUENTE S

El mensaje comprimido es: (0, A) (0, B) (2, C) (3, A) (2, A) (4, A) (6, B)

En la decodificación

FIGURA 6 DECODIFICACIÓN FUENTE S

El mensaje descomprimido es: ABBCBCABABCAABCAAB


COMPRESION LZW

En la codificación

In a a b a b a b a a a
Out 0 0 1 3 5 2

FIGURA 7. ESTRUCTURA DE ARBOL FUENTE S

En la decodificación

leer número de frase y:

1.si está en el diccionario -> decodificar su frase (salida actual), y agregar


salida anterior + 1º símbolo de la salida actual
2.si no está -> decodificar y agregar salida anterior + 1º símbolo de la salida
anterior

FIGURA 8. DECODIFICACIÓN FUENTE S


4.2. APLICACIONES

5. CAPÍTULO IV

5.1. CONCLUSIONES Y RECOMENDACIONES

El algoritmo LZW procesa los datos de entrada y a la vez un diccionario


mantiene una correspondencia entre las palabras más larga y una lista de
valores de códigos, entonces estas palabras se reemplazan por sus códigos
correspondientes con lo que el archivo de entrada se comprime. Por lo tanto, la
eficiencia del algoritmo aumenta a medida que aumenta el número de palabras
largas y repetitivas en los datos de la entrada

5.2. REFERENCIAS BIBLIOGRAFICAS

https://es.wikipedia.org/wiki/LZSS

https://en.wikipedia.org/wiki/LZ77_and_LZ78

http://multimedia.ufp.pt/codecs/compressao-sem-perdas/codificacao-baseada-em-
dicionarios/lz78/

https://www.incubaweb.com/un-poco-de-historia-algoritmos-lz77-lz78-y-lzw/

https://es.wikipedia.org/wiki/Algoritmo_de_compresi%C3%B3n_sin_p%C3%A9rdida

https://es.wikipedia.org/wiki/Codificaci%C3%B3n_por_diccionario

https://users.dcc.uchile.cl/~bebustos/apuntes/cc3001/compresion/

http://alojamientos.us.es/gtocoma/pid/pid6/pid66.htm

https://prezi.com/ddpms--pu1va/copy-of-codigo-lempel-ziv/

https://programacion.net/articulo/introduccion_a_la_compresion_de_datos_lempelziv-
_gzip_186/4

https://users.dcc.uchile.cl/~bebustos/apuntes/cc30a/compresion/

https://es.wikipedia.org/wiki/LZW

https://es.wikipedia.org/wiki/LZW#Un_ejemplo_simple_del_algoritmo_LZW_de_compresi
%C3%B3n
https://www.ecured.cu/Lz77

https://prezi.com/4lu95lbkozvv/compresion-lz77/

https://riunet.upv.es/handle/10251/80465

https://prezi.com/xsxbt84gfmzn/lzw-lempel-ziv-welch-algoritmo-de-compresion/

https://es.ccm.net/contents/731-compresion-lzw

Você também pode gostar