LZW алгоритм декомпрессии

Я пишу программу для назначения, которая должна реализовывать сжатие / декомпрессию LZW. Для этого я использую следующие алгоритмы:

-compression

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

-decompression

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

Для стадии сжатия я просто выводю целые числа, представляющие индекс для словарная статья, также начальный словарь состоит из символов ASCII (0 - 255). Но когда я прихожу на стадию декомпрессии, я получаю эту ошибку например, если я сжимаю текстовый файл, состоящий только из «booop» он пройдет через эти шаги для создания выходного файла:

<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

Затем, когда я прихожу, чтобы распаковать файл

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

257 (oo) еще не добавлено. Может ли кто-нибудь увидеть, где я здесь не так, потому что я озадачен. Алгоритм неверен?

Ответы на вопрос(2)

Ваш ответ на вопрос