我有一个问题 - 我被介绍给Ziv-Lempel的一个版本,它只编码3或更长的重复(1或2个字符的重复不被编码 - 字符本身被放置到编码的字符串而不是(m,k)值)。我被问到是否有可能提高ziv Lempel的编码效率(就编码字符串的长度而言 - 而不是时间复杂度)。
我认为就编码字符串的长度而言 - 可能存在一种情况,即在位置p处不编码3长度重复,而是编码从位置p + 1或p + 2开始的重复可能产生更好的结果 - 这也出现在我读到的理论中:我已经添加了一张相关段落的照片,但是没有给出任何例子。到目前为止我设法找到的每个例子都是编码长度为3的重复码的代码也可以检测到的。
以下段落提到了存在这样一个文本的事实:
到目前为止我们描述的压缩算法是 greedy :报告并立即使用任何长度为3或更长的重复。有时候这不是最优的:我们可以在位置上重复[ m 1 , k 1 ]重复> p ,并且[ m 2 , k 2 ]重复位置 p +1或 p +2, k 1 &lt;&lt; ķ的<子> 2 子>。因此,非贪婪算法可以改善压缩效果。
答案 0 :(得分:2)
是。 gzip和zlib的deflate算法使用“懒惰”匹配,这决定了在下一个字符之前发出匹配的决定,以便查看那里是否有更长的匹配。这绝对是一场胜利。
答案 1 :(得分:1)
这在技术上称为LZ非贪婪解析方法。 正如Mark所说,gzip使用that,但只有p + 1跳过。
在this document中,您将找到更多通用编码器,其中包含LZ算法特征的多个详细信息