通过压缩更长的重复次数可以提高ziv lempel的效率

时间:2014-01-06 22:53:32

标签: algorithm compression lempel-ziv-76

我有一个问题 - 我被介绍给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 。因此,非贪婪算法可以改善压缩效果。

(original image)

2 个答案:

答案 0 :(得分:2)

是。 gzip和zlib的deflate算法使用“懒惰”匹配,这决定了在下一个字符之前发出匹配的决定,以便查看那里是否有更长的匹配。这绝对是一场胜利。

答案 1 :(得分:1)

这在技术上称为LZ非贪婪解析方法。 正如Mark所说,gzip使用that,但只有p + 1跳过。

this document中,您将找到更多通用编码器,其中包含LZ算法特征的多个详细信息