Algorytm dekompresji LZW

Piszę program dla zadania, które musi implementować kompresję / dekompresję LZW. Używam do tego następujących algorytmów:

-kompresja

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

-dekompresja

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

Dla etapu kompresji, wyprowadzam tylko liczby int reprezentujące indeks dla wpisu słownika, również słownik początkowy składa się ze znaków ascii (0 - 255). Ale kiedy przechodzę do etapu dekompresji, otrzymuję ten błąd, na przykład, jeśli kompresuję plik tekstowy składający się tylko z „booop”, wykonam te kroki, aby utworzyć plik wyjściowy:

<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

Potem, kiedy przychodzę dekompresować plik

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

257 (oo) nie zostało jeszcze dodane. Czy ktoś może zobaczyć, gdzie się nie uda, bo jestem zakłopotany. Czy algorytm jest nieprawidłowy?

questionAnswers(2)

yourAnswerToTheQuestion