在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。
答案 0 :(得分:3)
我们不确定为何Phil Katz选择15,但它可能有助于在16位处理器中快速实现。
否,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的幂构成的。 (左为读者的练习。)