对于生成的字母表不是二进制的情况,是否可以轻松推广霍夫曼编码树?例如,如果我想通过三元写出来压缩一些文本,我仍然可以为每个字符构建一个无前缀的编码系统。霍夫曼结构的直接推广(使用k-ary树而不是二叉树)是否仍能正常有效地工作?或者这种结构是否会导致编码方案效率极低?
答案 0 :(得分:6)
该算法仍然有效,而且仍然很简单 - 事实上,维基百科简要提到n-ary Huffman coding引用原始霍夫曼论文作为来源。
然而,确实发生了这样的情况,就像霍夫曼稍微不理想一样,因为它为每个符号分配了一个整数位(与Arithmetic coding不同),三元霍夫曼应该有点更多次优,因为它必须分配一个整数 trits 。不是一个显示阻止者,特别是只有3个,但它确实表明当你增加n时,n-ary Huffman将落后于其他编码算法。
答案 1 :(得分:4)
作为一项实证检验,我构建了二元和三元霍夫曼树,用于分布拼字游戏。
分布的熵表明你不能比每个字母的4.37位好。
二进制霍夫曼树每个字母平均使用4.41位。
三重霍夫曼树每个字母平均使用2.81个trits,其信息密度与每个字母4.45位相同。