0% encontró este documento útil (0 votos)
371 vistas6 páginas

Codificación LEMPEL ZIV

Este documento describe el algoritmo de codificación Lempel-Ziv. Busca comprimir datos identificando secuencias repetidas en el texto y reemplazándolas con punteros a instancias previas de esas secuencias. Explica el proceso de codificación y decodificación con un ejemplo. Concluye que Lempel-Ziv es una alternativa a Huffman y ha dado lugar a algoritmos derivados como LZW usado en programas de compresión.

Cargado por

Claudio Banegas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
371 vistas6 páginas

Codificación LEMPEL ZIV

Este documento describe el algoritmo de codificación Lempel-Ziv. Busca comprimir datos identificando secuencias repetidas en el texto y reemplazándolas con punteros a instancias previas de esas secuencias. Explica el proceso de codificación y decodificación con un ejemplo. Concluye que Lempel-Ziv es una alternativa a Huffman y ha dado lugar a algoritmos derivados como LZW usado en programas de compresión.

Cargado por

Claudio Banegas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 6

“UNIVERSIDAD NACIONAL DE LOJA”

FACULTSD DE LA ENERGÍA, LAS INDUSTRIAS Y LOS RECURSOS


NATURALES NO RENOVABLES

CARRERA DE INGENIERÍA EN ELECTRÓNICA Y TELECOMUNICACIONES

CICLO VI

TEORIA DE LA INFORMACION
TEMA: CODIFICACION LEMPEL ZIV

ESTUDIANTE:

Claudio Banegas Valle

DOCENTE

 Ing. Paulo Samaniego Rojas

LOJA – ECUADOR
INTRODUCCION
La compresión de datos busca reducir el número de bits utilizados para almacenar
o transmitir información. Consiste en tomar una secuencia de símbolos y
transformarlos en códigos. (cc) image by nuonsolarteam on Flickr (cc) image by
nuonsolarteam on Flickr GRACIAS (cc) image by nuonsolarteam on Flickr

Una codificación que toma en cuenta los problemas de los supuestos enunciados
anteriormente para la codificación de Huffman sería una donde no solo se consideraran
caracteres uno a uno, sino que donde además se consideraran aquellas secuencias de alta
probabilidad en el texto. Por ejemplo, en el texto:

aaabbaabaa

Obtendríamos un mayor grado de eficiencia si además de considerar caracteres como a y b,


también considerásemos la secuencia aa al momento de codificar.

El algoritmo LZ77.
Éste es el algoritmo original que dio lugar al resto. Más que en diccionarios se basa en el
concepto de ventana móvil que esencialmente restringe la búsqueda de coincidencias a una
porción de los datos de longitud predeterminada. La ventaja es que el número de bits para
indicar referencias se conoce de antemano y no puede crecer. Por otro lado, la codificación
emplea ternas, en lugar de los pares de LZ78 se explicara con un ejemplo. Codifiquemos.

Una generalización de esta idea es el algoritmo de Lempel-Ziv. Este algoritmo consiste en


separar la secuencia de caracteres de entrada en bloques o secuencias de caracteres de
distintos largos, manteniendo un diccionario de bloques ya vistos. Aplicando el algoritmo
de Huffman para estos bloques y sus probabilidades, se puede sacar provecho de las
secuencias que se repitan con más probabilidad en el texto. El algoritmo de codificación es
el siguiente:

1.- Inicializar el diccionario con todos  
    los bloques de largo 1

2.- Seleccionar el prefijo más largo del  
    mensaje que calce con alguna secuencia W  
    del diccionario y eliminar W del mensaje

3.- Codificar W con su índice en el diccionario
4.- Agregar W seguido del primer símbolo del  
    próximo bloque al diccionario.

5.- Repetir desde el paso 2.

Tomar en cuenta los siguiente:

Al ir comprimiendo una secuencia de bits se busca si los próximos símbolos


coinciden con una secuencia anterior, y se sustituye por una tripleta (m, n, s )donde:

m = lugar hacia atrás donde se inicia la secuencia.

n = longitud de la secuencia previa encontrada.

s = Proximo carácter de la cadena comprimida

salsa␣salada

Con LZ77 usando una ventana móvil de tamaño 10. Esta ventana tiene dos partes, una
corresponde al “pasado” y otra al “futuro”.
Digamos que sus tamaños son respectivamente 6 y 4 (según [Sal02], en la práctica la
primera es de miles de bytes y la segunda de decenas de bytes).
En cada paso se consideran las cadenas que parten del primer carácter futuro y se busca
una coincidencia lo más larga posible con cadenas que empiezan en el pasado. La
codificación se expresa con una terna (a,b,c)
Donde
a. dice la distancia a la que está la coincidencia,
b. su longitud y
c. es el primer carácter futuro en el que no hay coincidencia, hacia el que se
moverá la ventana de futuro en el siguiente paso.
Inicialmente no hay nada con que comparar y entonces las primeras codificaciones son
triviales con a=b=0:[ CITATION TeX15 \l 1033 ]

Una vez que la segunda s pasa a ser el carácter futuro inicial, se produce una coincidencia
de longitud 2, la cadena sa, y hay que ir 3 cuadros hacia el pasado para encontrarla:

El resto de la codificación, hasta llegar al fin de los datos sería:

De nuevo, en este ejemplo, la codificación aumenta mucho lo que ocuparían


habitualmente los datos iniciales. Esta impresión viene de que es un texto muy
breve. Una situación no ilustrada en el ejemplo anterior, es que no se prohíbe
que una coincidencia se extienda hasta los caracteres futuros. Por ejemplo
0...01‖110...se codificaría con (1,3,0).

Lempel-Ziv (L-Z) es un algoritmo universal para comprimir datos sin pérdida alguna en la
información, es un algoritmo creado por Abraham Lempel, Jacob Ziv y Welch Terry. El
algoritmo está diseñado para tener una versatilidad el momento de su aplicación, pero
generalmente no es óptimo, ya que sólo realiza un análisis limitado de los datos.
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 este algoritmo resulta simple, básicamente busca 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 posición 1. Suponiendo que los tres primeros
elementos, 001, ya han sido codificados, denominándole como una 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 continua 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.

EJEMPLO:
Suponiendo que se quiere codificar la siguiente secuencia de datos:
S=001010210210212021021200
Se usará un buffer de longitud n=18 y una longitud máxima de cadena Ls=9.
La primera sub-cadena a codificar se formará a partir de esa extensión reproducible, 00,
seguida del siguiente elemento que ya no está repetido 1, luego S1=001
La palabra código que representa a esa sub-cadena será, por convenio y en ese orden, el
puntero al comienzo de la repetición menos 1, seguido de la longitud de la repetición,
seguido del elemento final, que no entraba en la repetición. Es decir, para este caso:
C1=021. Puesto que S1 tenía longitud 3, todo el contenido del buffer es desplazado hacia la
izquierda 3 posiciones. En esta segunda situación se continua a partir de la posición 10,
buscando la extensión reproducible de 0102 S2 es la parte que se repite del comienzo de
Ls, 010 (posiciones 10 a 12), más el siguiente elemento, 2, que ya no se repite (posición 13).
Luego S2=0102, que se codifica como C2=732. S3=10210212 y C3=672 Por último, tras
desplazar las 8 posiciones que ocupa S3, se obtiene S4=021021200 y C4=280 LA
DESCOMPRESION PASO A PASO La primera palabra que se lee es '021'. El '0' sirve de
puntero en el buffer, llamado "p''. Se debe leer el carácter que está en la posición p+1, luego
se lee el de la posición 1. Tal y como está el buffer, se desplazan todos sus elementos una
posición hacia la izquierda, y en el hueco que queda a la derecha se introduce el carácter
leído con anterioridad en esa posición 1. El segundo carácter de la palabra código es un '2'.
Ello indica que la operación anterior de leer y desplazar se debe hacer dos veces, por lo que
la repetimos. Al final de todas las figuras se resalta en negrita la parte del buffer que
corresponde a la descodificación de la palabra código. Evidentemente, este tramo se
encuentra siempre al final del buffer, y su longitud es bien simple de calcular: n+1. La
siguiente palabra a decodificar es 732 El proceso con las dos palabras código restantes es
exactamente igual. No obstante, se ofrecen las figuras correspondientes que indica la
decodificación completa. Extrayendo los tramos en negrita del final de cada paso,
obtenemos 001, 0102, 10210212 y 021021200, que juntos vuelven a conformar la secuencia
original S.

Concluciones

Lempel-Ziv es una de las alternativas a Huffman. Existen varias otras derivadas de estas dos
primeras, como LZW (Lempel-Ziv-Welch), que es usado en programas de compresión como el
compress de UNIX.

Bibliografía

[1] TeX, pdfTeX-1.40.14, 25 04 2015. [En línea]. Available:


https://www.uam.es/personal_pdi/ciencias/fchamizo/asignaturas/model1415/entrop.pdf.

[1] TeX, pdfTeX-1.40.14, 25 04 2015. [En línea]. Available:


https://www.uam.es/personal_pdi/ciencias/fchamizo/asignaturas/model1415/entrop.pdf.

También podría gustarte