DEFLATE方法推理

时间:2016-09-28 23:36:09

标签: compression huffman-code deflate lzw lz77

为什么LZ77 DEFLATE使用霍夫曼编码进行第二遍而不是LZW?他们的组合是否最佳?如果是这样,LZ77的输出性质是什么使得它比LZW或其他方法更适合霍夫曼压缩?

2 个答案:

答案 0 :(得分:0)

Mark Adler could best answer this question.

  

LZ77和霍夫曼如何合作的细节需要仔细研究。一旦原始数据变成一串字符和特殊长度,距离对,这些元素必须用霍夫曼代码表示。

     

虽然这不是,但重复,不是标准术语,请将我们开始读取的点称为“拨号音”。毕竟,在我们的比喻中,拨号音是您可以开始指定一系列最终映射到特定电话的号码的地方。所以一开始就称之为“拨号音”。在该拨号音时,可以遵循以下三种情况之一:字符,长度 - 距离对或块的结尾。因为我们必须能够分辨出它是什么,所有可能的字符(“文字”),指示可能长度范围的元素(“长度”)和特殊的块结尾指示符都被合并为单个字母表。然后该字母表成为霍夫曼树的基础。距离不需要包含在此字母表中,因为它们只能在长度后直接显示。一旦文字被解码,或长度 - 距离对被解码,我们处于另一个“拨号音”点,我们再次开始阅读。当然,如果我们得到了块结尾符号,我们要么处于另一个块的开头,要么位于压缩数据的末尾。

     

长度代码或距离代码实际上可能是代表基值的代码,后跟额外的位,形成一个整数,以添加到基值。

     

...

Read the whole deal here.

长话短说。 LZ77提供重复消除。霍夫曼编码提供了比特减少。 It's also on the wiki.

答案 1 :(得分:0)

LZW试图利用重复的字符串,就像第一个"阶段"正如你所说的LZ77。然后,它对该信息的熵编码做得很差。 LZW已被完全取代更现代的方法。 (除了它在GIF格式中的遗留用途。)一旦LZ77生成文字和匹配列表,LZW就没有任何东西可以利用它,然后它会为这些信息制作一个几乎完全无效的熵编码器。