Problema resuelto al detalle
-
Seis tokens de "abracadabra" con una ventana de búsqueda de 16 caracteres 5 pasos
El panel marca 5,18× tras un token. Calcule cuánto marcará tras los seis. La entrada es "abracadabra", la ventana de búsqueda es de 16 caracteres y el búfer de anticipación es de 8.
-
Un token consta de tres campos de ancho fijo, por lo que su coste viene determinado por los dos ajustes y no por los datos. El desplazamiento tiene que poder direccionar cualquier posición de la ventana, la longitud cualquier valor hasta el tamaño del búfer, y el literal es un byte sin procesar.
-
El codificador escanea de izquierda a derecha y toma la coincidencia más larga que ofrece la ventana. No hay nada detrás de los tres primeros caracteres, por lo que 'a', 'b' y 'r' cuestan cada uno un token entero para emitirse una sola vez. Solo el último token rinde lo que cuesta, copiando "abra" desde la posición 0.
-
La proporción del panel es una cifra acumulada y divide toda la entrada entre la salida producida hasta el momento. Tras un token, está pesando once caracteres frente a diecisiete bits, razón por la cual empieza tan alta.
-
Seis tokens de diecisiete bits cada uno suman 102 bits, frente a una entrada de 88. La codificación es más grande que el objeto que codifica.
-
El punto de equilibrio se reduce a una división. Un token cuesta 17 bits y compra un cierto número de caracteres que valen 8 bits cada uno, de modo que el esquema solo gana cuando el token medio avanza más de 17/8 caracteres, y de estos seis, solo el último lo hace.
Respuesta
El panel muestra 5,18× tras el primer token y 0,86× tras el sexto: la misma cadena, la misma codificación, a ambos lados de 1,0. La cifra que conviene recordar es 2,125 caracteres por token, que es simplemente el ancho del token dividido entre ocho, y constituye la prueba definitiva de si el LZ77 ayuda a una entrada determinada. También pone precio a un mando que parece gratuito. Ampliar la ventana de búsqueda a 64 añade dos bits a cada campo de desplazamiento, y en esta cadena no encuentra ninguna coincidencia más larga (el análisis resulta en los mismos seis tokens), por lo que la proporción cae a 0,77×. Cada duplicación del alcance cuesta un bit más en cada token, se use o no.
-
Ruta de aprendizaje
Compresión a mano
Referencias (1)
- The algorithm, and the offset-1 trick block 3 turns on: J. Ziv and A. Lempel, "A universal algorithm for sequential data compression." IEEE Transactions on Information Theory 23(3), 337–343, 1977.