Algoritmo de descompactação LZW

Eu estou escrevendo um programa para uma tarefa que tem que implementar compressão / descompressão LZW. Eu estou usando os seguintes algoritmos para isso:

-compressão

<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>

-descompressão

<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 o estágio de compactação, estou apenas exibindo ints representando o índice para a entrada do dicionário, e também o dicionário inicial consiste em caracteres ascii (0 - 255). Mas quando chego ao estágio de descompressão, recebo esse erro, por exemplo, se eu comprimir um arquivo de texto que consiste apenas em "booop", ele passará por essas etapas para produzir um arquivo de saída:

<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

Então quando eu venho descomprimir o arquivo

<code>w       k          entry        output       Dictionary
        98 (b)                  b   
b       111 (o)    o            o             bo (256)
o       257 (error)
</code>

257 (oo) ainda não foi adicionado. Alguém pode ver onde estou errado aqui porque estou perplexo. O algoritmo está errado?

questionAnswers(2)

yourAnswerToTheQuestion