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

Math 哈夫曼代码中字符的单位代码条件?,math,compression,huffman-code,Math,Compression,Huffman Code,这是我在学校遇到的一个问题,但它一直困扰着我,所以我决定在这里问它 在哈夫曼压缩中,固定长度序列(字符)用可变长度序列编码。代码序列长度取决于源字符的频率(或概率) 我的问题是:最小和最高的字符频率是多少,该字符将被编码一个位 一般来说,大约50%的传入符号流必须由给定符号组成,哈夫曼才能将其编码为单个比特。原因是,由于哈夫曼编码的工作原理(一个符号的编码不能是另一个符号的前缀),通过使用单个位对符号进行编码,您要求每个其他符号的第一位为相反的值(即,如果一个符号编码为0,则其他所有符号都必须以

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

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


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

一般来说,大约50%的传入符号流必须由给定符号组成,哈夫曼才能将其编码为单个比特。原因是,由于哈夫曼编码的工作原理(一个符号的编码不能是另一个符号的前缀),通过使用单个位对符号进行编码,您要求每个其他符号的第一位为相反的值(即,如果一个符号编码为
0
,则其他所有符号都必须以
1
加上至少一个多位开始)。由于要消除任何给定位长度的一半可能编码空间,您需要找到一种方法,对输入的至少一半符号进行编码,以达到收支平衡

请注意,在一种特殊情况下,符号空间仅由3个符号组成。在这种情况下,具有最大频率的符号将用1位编码(因为其他两个将是未选择的第一位值的第二位变化)-如果2个或多个具有同样大的概率,则可以对其中一个进行编码。因此,在3符号的情况下,理论上,概率为34%的符号可以编码为单个位(例如,
0
),而其他两个可能具有33%或更低的概率,并且编码为
10
11


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

结果是答案是0.4,即,如果最高频率p>=0.4,则保证对应字符的1位代码。换句话说,这是一个充分条件

p>=1/3也是一个必要条件,也就是说,可能有0.4>p>=1/3的例子,最短的代码是1位,但如果p<1/3,则没有这种情况


对此进行推理的方法是查看代码树的构造方式,特别是最后3个幸存子树的频率。Johnsen中出现了一个证明(不幸的是,这是一个付费链接)。

一个例外是3个概率相等的符号:它们可以被编码为0、10、11是的,我已经在注释中添加了这一点。:)这是一种边缘情况,但可能相关。还有其他相关情况(1/3、1/6、1/6、1/6、1/6、1/6),但并非所有情况下一个符号的概率都是1/3。我很想看到一个能说明区别的答案。谢谢,Amber,但我不确定你的推理是否正确。例如,对于频率为(0.41、0.2、0.2、0.19)的4个字符,我相信编码会(0、10、110、111)。这将提供比4个两位字符更好的压缩,例如,对于100个字符,将需要198位而不是200位。然而,我仍然不确定如何推广这个想法。推理是为一般用例设计的,其中符号的数量为>>>2^2,因此大多数符号将被编码到2-3位以上。对于符号数量较少的情况,即使在频率较低的情况下,字符从2位交换到1位的“节省”也相对较大,而对于总符号数量较高的情况,节省量较低,除非字符出现的频率非常高。然而,在1/3处肯定有一个下限(除了符号数小于3的普通情况)。除了普通的二进制情况——如果只有2个符号,哈夫曼总是为每个符号分配1位,不管频率是什么。这方面的证明包含在附录中。不幸的是,我不能理解这个道理。。。我不明白为什么标记为“u”的节点在标记为“v1”和“v2”的节点之前被合并是必然的。