霍夫曼编码非二进制字母表

时间:2014-07-24 17:29:44

标签: algorithm compression huffman-code

我正在研究在非二进制字母表上构建最优霍夫曼码。

Huffman trees for non-binary alphabets?中提出了这个问题。该解决方案建议使用一次组合n个最低频率符号的霍夫曼编码过程(维基百科也建议)。但是,这似乎并不是最佳的。假设我有4个带字母的字母,

 A --> 0.4

 B --> 0.25

 C --> 0.2

 D --> 0.15

这里使用它导出的三元霍夫曼代码将是

  

A - > 0

     

B - > 10

     

C - > 11

     

D - > 12

但是,以下代码的预期长度会更短:

  

A - > 0

     

B - > 1

     

C - > 20

     

D - > 21

我在这里错过了什么吗?

PS我发布这是一个问题,因为我无法对之前的帖子发表评论。

1 个答案:

答案 0 :(得分:1)

维基百科文章指出"注意,对于大于2的n,并非所有源词集都可以正确地形成用于霍夫曼编码的n元树。在这种情况下,必须添加额外的0概率占位符。"我认为对于一个3-ary树,3个叶子之后的下一个完整树有5个叶子,所以我认为你应该在运行3-ary霍夫曼代码算法之前添加0概率字符,这给你{0,C,D}作为第一个阶段,它产生你喜欢的编码。