0

为什么 LZ77 DEFLATE 在第二遍使用 Huffman 编码而不是 LZW?他们的组合有什么是最佳的吗?如果是这样,LZ77 输出的本质是什么,使它比 LZW 或其他一些方法更适合 Huffman 压缩?

4

2 回答 2

0

LZW 试图利用重复的字符串,就像 LZ77 的第一个“阶段”一样。然后它在熵编码该信息方面做得很差。LZW 已完全被更现代的方法所取代。(除了它在 GIF 格式中的传统用途。)一旦 LZ77 生成一个文字和匹配列表,LZW 就没有什么可以利用的了,然后它将为该信息制作一个几乎完全无效的熵编码器。

于 2016-09-29T01:34:13.603 回答
0

Mark Adler 可以最好地回答这个问题。

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

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

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

...

在这里阅读整个交易。

长话短说。LZ77 提供重复消除功能。霍夫曼编码提供比特减少。它也在维基上。

于 2016-09-28T23:42:06.927 回答