我正在研究在非二进制字母表上构建最优霍夫曼码。
在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我发布这是一个问题,因为我无法对之前的帖子发表评论。
答案 0 :(得分:1)
维基百科文章指出"注意,对于大于2的n,并非所有源词集都可以正确地形成用于霍夫曼编码的n元树。在这种情况下,必须添加额外的0概率占位符。"我认为对于一个3-ary树,3个叶子之后的下一个完整树有5个叶子,所以我认为你应该在运行3-ary霍夫曼代码算法之前添加0概率字符,这给你{0,C,D}作为第一个阶段,它产生你喜欢的编码。