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?