Algoritmo de descompresión LZW
Estoy escribiendo un programa para una tarea que tiene que implementar la compresión / descompresión LZW. Estoy usando los siguientes algoritmos para esto:
-compresión
<code>w = NIL; while ( read a character k ) { if wk exists in the dictionary w = wk; else add wk to the dictionary; output the code for w; w = k; } </code>
-descompresión
<code>read a character k; output k; w = k; while ( read a character k ) /* k could be a character or a code. */ { entry = dictionary entry for k; output entry; add w + entry[0] to dictionary; w = entry; } </code>
Para la etapa de compresión, solo estoy emitiendo ints que representan el índice para la entrada del diccionario, y el diccionario de inicio consta de caracteres ascii (0 - 255). Pero cuando llego a la etapa de descompresión, recibo este error, por ejemplo, si comprimo un archivo de texto que consiste solo en "booop", se realizarán estos pasos para generar un archivo de salida:
<code>w k Dictionary Output - b - - b o bo (256) 98 (b) o o oo (257) 111 (o) o o - - oo p oop (258) 257 (oo) p - - 112 (p) </code>
output.txt: 98 111 257 112
Entonces cuando venga a descomprimir el archivo.
<code>w k entry output Dictionary 98 (b) b b 111 (o) o o bo (256) o 257 (error) </code>
257 (oo) no ha sido agregado aún. ¿Alguien puede ver dónde me voy mal aquí porque estoy perplejo? ¿Está mal el algoritmo?