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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta