问题描述
我正在考试中,发现一个问题,要求找出用霍夫曼编码的代码字的平均长度。
这通常并不困难,但是在这个问题中,我们必须对100个符号进行编码,这些符号的概率都相同(1/100)。
由于试图手工编码100个符号显然没有任何意义,所以我想知道是否存在一种无需实际进行编码即可找出平均长度的方法。
我猜想这是可能的,因为所有概率都是相等的,但是我在网上找不到任何东西。
感谢您的帮助!
解决方法
对于100个具有相等概率的符号,某些符号将用6位编码,某些符号将用7位编码。霍夫曼码是完整的前缀码。 “完成”表示将使用所有可能的位模式。
让我们说 i 码是6位长,而 j 码是7位长。我们知道 i + j = 100 。有64种可能的六位代码,因此在 i 用完之后,剩下的是 64-i 。将每个位加一个以使它们长7位,使可能的代码数量加倍。所以现在我们最多可以拥有 2(64-i)七位代码。
为使代码完整,必须使用所有这些代码,因此 j = 2(64-i)。现在,我们在两个未知数中有两个方程。我们得到 i = 28 和 j = 72 。
由于所有符号的可能性均等,因此每个符号使用的平均位数为(28x6 + 72x7)/ 100 ,即 6.72 。考虑到每个符号的熵为 6.64 位,还不错。