Articulo de referencia

Lempel–Ziv–Storer–Szymanski

Lempel–Ziv–Storer–Szymanski ( LZSS ) es un algoritmo de compresión de datos sin pérdidas , derivado de LZ77 , creado en 1982 por James A. Storer y Thomas Szymanski . LZSS se des...

Lempel–Ziv–Storer–Szymanski ( LZSS ) es un algoritmo de compresión de datos sin pérdidas , derivado de LZ77 , creado en 1982 por James A. Storer y Thomas Szymanski . LZSS se describió en el artículo "Data compression via textual substitution" publicado en el Journal of the ACM (1982, pp. 928–951). [ 1 ] 

LZSS es una técnica de codificación por diccionario . Intenta reemplazar una cadena de símbolos con una referencia a la ubicación de esa misma cadena en un diccionario.

La principal diferencia entre LZ77 y LZSS radica en que, en LZ77, la referencia al diccionario puede ser más larga que la cadena que reemplaza. En LZSS, dichas referencias se omiten si la longitud es menor que el punto de equilibrio. Además, LZSS utiliza indicadores de un bit para señalar si el siguiente bloque de datos es un literal (byte) o una referencia a un par desplazamiento/longitud.

Ejemplo

Aquí comienza « Huevos verdes con jamón» del Dr. Seuss , con números de caracteres al inicio de cada línea para mayor comodidad. «Huevos verdes con jamón» es un buen ejemplo para ilustrar la compresión LZSS, ya que el libro en sí solo contiene 50 palabras únicas, a pesar de tener un total de 170 palabras. [ 2 ] Por lo tanto, las palabras se repiten, pero no de forma consecutiva.

 0: Soy Sam 9: 10: Sam soy yo 19: 20: ¡Ese Sam-yo-soy! 35: ¡Ese Sam-yo-soy! 50: No me gusta 64: ¡Ese Sam-yo-soy! 79: 80: ¿Te gustan los huevos verdes con jamón? 112: 113: No me gustan, Sam-yo-soy. 143: No me gustan los huevos verdes con jamón. 

Este texto ocupa 177 bytes sin comprimir. Suponiendo un punto de equilibrio de 2 bytes (y, por lo tanto, pares de puntero/desplazamiento de 2 bytes) y un salto de línea de un byte, este texto comprimido con LZSS se convierte en un texto de 95 bytes:

Un ejemplo con código de colores para ilustrar el reciclaje de información repetida y así minimizar el espacio de almacenamiento.
Un ejemplo codificado por colores de la compresión LZSS en acción.
0: Soy Sam 9: 10: (5,3) (0,4) 16: 17: ¡Ese(4,4)-yo-soy!(19,15) 32: No me gusta 46: t(21,14) 50: ¿Te gustan los huevos verdes con jamón? (58,5) 79: (49,14) ellos,(24,9).(112,15)(92,18). 

Nota: esto no incluye los 11 bytes de indicadores que señalan si el siguiente fragmento de texto es un puntero o un literal. Al agregarlos, el texto pasa a tener 106 bytes de longitud, lo cual sigue siendo más corto que los 177 bytes originales.

Implementaciones

Muchos archivadores populares como ARJ , RAR , ZOO y LHarc utilizan LZSS en lugar de LZ77 como algoritmo de compresión principal; la codificación de caracteres literales y de pares longitud-distancia varía, siendo la opción más común la codificación Huffman . La mayoría de las implementaciones provienen de un código de dominio público de 1989 de Haruhiko Okumura . [ 3 ] [ 4 ] La versión 4 de la biblioteca Allegro puede codificar y decodificar un formato LZSS, [ 5 ] pero la función se eliminó de la versión 5. La BIOS de Game Boy Advance puede decodificar un formato LZSS ligeramente modificado. [ 6 ] macOS de Apple utiliza LZSS como uno de los métodos de compresión para el código del kernel. [ 7 ]

Véase también

Referencias

  1. Storer, James A.; Szymanski, Thomas G. (octubre de 1982). "Compresión de datos mediante sustitución textual" . Journal of the ACM . 29 (4): 928– 951. doi : 10.1145/322344.322346 .
  2. "10 historias detrás de los cuentos del Dr. Seuss" . CNN . 23 de enero de 2009. Consultado el 26 de enero de 2009 .
  3. Espejo de Simtel.net. Implementación de Haruhiko Okumura de 1989. Archivado el 3 de febrero de 1999.
  4. Haruhiko Okumura. Historia de la compresión de datos en Japón. Archivado el 10 de enero de 2016.
  5. Hargreaves, Shawn , et al. Código fuente de Allegro: lzss.c. Consultado el 13 de julio de 2016.
  6. Korth, Martin. "Funciones de descompresión GBATEK LZ" . problemkaputt.de . Consultado el 7 de junio de 2022 .
  7. "kext_tools/compression.c" . GitHub . Apple Open Source . Consultado el 28 de diciembre de 2019 .