在zlib中,当字母的霍夫曼代码长度超过最大代码长度(15)时会发生什么?

时间:2019-07-15 09:14:20

标签: zlib huffman-code

https://tools.ietf.org/html/rfc1951

Note that in the "deflate" format, the Huffman codes for the
     various alphabets must not exceed certain maximum code lengths.

最大代码长度定义为15。

当霍夫曼代码长度超过15时会发生什么?

来自https://cs.stackexchange.com/questions/75542/maximum-size-of-huffman-codes-for-an-alphabet-containing-256-letters 256个符号字母的最大可能代码大小为256位。考虑当最频繁的符号的频率为1/2时,下一个最频繁的符号的频率为1/4,然后是1/8的情况

因此在文字/长度字母中,最大霍夫曼编码长度为285-1 = 284 但在zlib中,最大代码长度为15。

  1. 为什么选择15作为最大代码长度?
  2. 代码长度超过15个时zlib会失败吗?

1 个答案:

答案 0 :(得分:3)

  1. 我们不确定为何Phil Katz选择15,但它可能有助于在16位处理器中快速实现。

  2. 否,zlib不会失败。它一直在发生。 zlib实现采用普通的霍夫曼算法,此后如果最长的代码长于15位,它将进入modify the codes to force them all to 15 bits or less

请注意,您的示例导致一个256位长的代码,需要一组2 256 〜= 10 77 符号才能达到这些频率。我认为您没有足够的存储空间。

无论如何,zlib通常将deflate块限制为16384个符号。对于该数字,霍夫曼编码的最大长度为19。这是由斐波那契概率序列而不是您的2的幂构成的。 (左为读者的练习。)