Diferencia entre revisiones de «LZW»

Contenido eliminado Contenido añadido
Luckas-bot (discusión · contribs.)
m robot Añadido: ca:LZW
CEM-bot (discusión · contribs.)
m Correcciones menores (v1.58) PR:CEM.; cambios triviales
Línea 6:
La clave del método LZW reside en que es posible crear sobre la marcha, de manera automática 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 codificación. Dicho diccionario no es transmitido con el texto comprimido, puesto que el descompresor puede reconstruirlo usando la misma lógica con que lo hace el compresor y, si está codificado correctamente, tendrá exactamente las mismas cadenas que el diccionario del compresor tenía.
 
El diccionario comienza pre-cargado con 256 entradas, una para cada carácter (byte) posible más un código predefinido para indicar el fin de archivo. A esta tabla se le van agregando sucesivos códigos numéricos por cada nuevo par de caracteres consecutivos que se lean (esto no es literalmente cierto, según se describe más adelante), aúnaun cuando todavía no sea posible prever si ese código se reutilizará más adelante o no.
 
Es en este detalle donde se encuentra la brillantez del método: al armar el diccionario sobre la marcha se evita hacer dos pasadas sobre el texto, una analizando y la otra codificando y dado que la regla de armado del diccionario es tan simple, el descompresor puede reconstruirlo a partir del texto comprimido mientras lo lee, evitando así incluir el diccionario dentro del texto comprimido. Se puede objetar que el diccionario estará plagado de códigos que no se utilizarán y por tanto será innecesariamente grande, pero en la práctica el diccionario no crece demasiado y aún si lo hiciera no importa mucho pues el objetivo es que el archivo comprimido sea pequeño aúnaun cuando los procesos de compresión y descompresión pudieran ocupar mucha memoria con el diccionario.
 
Las entradas del diccionario pueden representar secuencias de caracteres simples o secuencias de códigos de tal forma que un código puede representar dos caracteres o puede representar secuencias de otros códigos previamente cargados que a su vez representen, cada uno de ellos, otros códigos o caracteres simples, o sea que un código puede representar desde uno a un número indeterminado de caracteres. En realidad, el algoritmo no discrimina entre códigos y caracteres simples pues el diccionario se carga inicialmente de códigos que representan los primeros 256 caracteres simples por lo que estos no son más que otros códigos dentro del mismo diccionario.
Línea 81:
 
== Enlaces externos ==
* [http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=/netahtml/srchnum.htm&r=1&f=G&l=50&s1=4,558,302.WKU.&OS=PN/4,558,302&RS=PN/4,558,302 United States Patent 4,558,302]
* [http://www.dogma.net/markn/articles/lzw/lzw.htm "LZW Data Compression", by Mark Nelson] (DDJ Artículo con código fuente)
* [http://www.kyz.uklinux.net/giflzw.php Sad day... GIF patent dead at 20] (Artículo corto y posiblemente con una simplificación de la verdadera historia, que se puede encontrar algo más detallada en la página de [[GIF]])
* [http://software.newsforge.com/software/05/06/23/2150233.shtml?tid=130 ''Bringing back LZW compression'' by Nathan Willis]
* [http://www.compression-links.info/LZW List of LZW libraries, papers and other resources]
* [http://sites.google.com/site/compactamos/ Lista de manuales de algoritmos de compresión sin pérdida]
 
[[Categoría:Compresión de datos]]