霍夫曼代码中字符的单位代码的条件?

时间:2010-06-21 08:08:51

标签: math compression huffman-code

这是我在学校设置中遇到的一个问题,但它一直困扰着我,所以我决定在这里提问。

在霍夫曼压缩中,固定长度序列(字符)用可变长度序列编码。代码序列长度取决于源字符的频率(或概率)。

我的问题是:最小的最高字符频率是多少,该字符将由一个位编码?

2 个答案:

答案 0 :(得分:7)

通常,大约50%的输入符号流必须由给定符号组成,以便霍夫曼将其编码为单个位。原因在于,由于霍夫曼编码的工作原理(一个符号的编码不能成为另一个符号的前缀),通过使用单个位编码符号,您需要每隔一个符号的第一位是相反的值(即,如果一个符号被编码为0,则其他所有内容必须以1加上至少一个以上的位开头)。由于您为任何给定的位长度消除了一半可能的编码空间,因此您需要获得一种方法来编码至少一半的输入符号,以便实现均衡。

请注意,有一种特殊情况,符号空间只包含3个符号。在这种情况下,具有最大频率的任何符号将被编码为1比特(因为其他两个将是未选择的第一比特值的第二比特变化) - 如果2个或更多具有相同更大的概率,任何一个都可以编码。因此,在3符号的情况下,理论上可以将具有例如34%概率的符号编码为单个比特(例如,0),而其他两个可能具有33%或更低的概率并且是编码为1011

因此,如果您正在考虑所有的可能性,那么技术上任何1/3或更高的内容都可能被编码为单个位(在3个符号的情况下)。

答案 1 :(得分:7)

事实证明答案是0.4,也就是说,如果最高频率 p p> = 0.4 ,相应字符的1位代码是保证。换句话说,这是一个充分的条件。

p> = 1/3也是必要条件。也就是说,可能存在 0.4>的示例。 p> = 1/3 ,最短的代码是1位,但是如果 p< 1/3

推理这种方法的方法是查看代码树的构造方式,特别是在3个最后存活的子树的频率上。约翰森出现了一个证明,"On the redundancy of binary Huffman codes", 1980(不幸的是,这是付费链接)。