我很难理解LZW算法。我正在检查维基百科(http://en.wikipedia.org/w/index.php?title=Lempel-Ziv-Welch&oldid=245292660)上提供的伪代码,以及我不理解的解压缩代码中的一部分:
else if (k == currSizeDict)
entry = w + w[0];
有人可以向我解释会发生这种情况吗?
答案 0 :(得分:2)
这个问题在这里得到了很好的解释:https://www.cs.duke.edu/csed/curious/compression/lzw.html。基本思想是,由于LZW只需要压缩字符串和包含字母表所有元素的字典(而不是包含所有编码模式的字典),因此有必要在解码时动态重建更复杂模式的所有编码。这导致可能遇到不在字典中的编码。有趣的是,正如上面的链接所指出的,这只能在编码的字符串以相同的字符开头和结尾时发生。