我正在为必须实现 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;
}
对于压缩阶段,我只是输出表示字典条目索引的整数,起始字典也由 ascii 字符(0 - 255)组成。但是当我进入解压阶段时,我会收到此错误,例如,如果我压缩一个仅包含“booop”的文本文件,它将通过这些步骤生成一个输出文件:
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)
输出.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) 尚未添加。谁能看到我在这里出错的地方,因为我很难过。算法错了吗?