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?