我很难理解LZW算法我正在检查维基百科(http://en.wikipedia.org/w/index.php?title=Lempel-Ziv-Welch&oldid=245292660)上提供的伪代码,解压程序代码中有一部分我不明白:

      else if (k == currSizeDict)
          entry = w + w[0];

有人能给我解释一下会发生这种情况吗?

最佳答案

这个问题在这里解释得很好:https://www.cs.duke.edu/csed/curious/compression/lzw.html其基本思想是,由于lzw只需要压缩字符串和包含字母表所有元素的字典(而不是包含所有编码模式的字典),因此在解码时需要动态地重构更复杂模式的所有编码。这会导致可能遇到字典中没有的编码有趣的是,正如上面的链接所指出的,只有当编码的字符串以相同的字符开始和结束时,才会发生这种情况。

10-06 14:44