LZW 圧縮/解凍を実装する必要がある割り当てのプログラムを作成しています。これには次のアルゴリズムを使用しています。
-圧縮
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;
}
-減圧
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;
}
圧縮段階では、辞書エントリのインデックスを表す int を出力するだけです。また、開始辞書は ascii 文字 (0 ~ 255) で構成されます。しかし、解凍段階になると、このエラーが発生します。たとえば、「ブープ」のみで構成されるテキスト ファイルを圧縮すると、次の手順を実行して出力ファイルが生成されます。
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)
output.txt: 98 111 257 112
次に、ファイルを解凍するときに
w k entry output Dictionary
98 (b) b
b 111 (o) o o bo (256)
o 257 (error)
257 (oo) はまだ追加されていません。私が困惑しているので、ここでどこが間違っているのか誰にもわかりますか。アルゴリズムがおかしい?