【问题标题】:Huffman trees for non-binary alphabets?非二进制字母的霍夫曼树?
【发布时间】:2011-07-24 01:51:10
【问题描述】:

对于生成的字母表不是二进制的情况,是否有一个简单的 Huffman 编码树概括?例如,如果我想通过以三进制写出一些文本来压缩它,我仍然可以为我写出的每个字符建立一个无前缀编码系统。 Huffman 构造的直接概括(使用 k-ary 树而不是二叉树)是否仍能正确有效地工作?还是这种结构会导致编码方案效率极低?

【问题讨论】:

  • 显而易见的方法是在一些具有 3-ary 和 4-ary 树的数据上进行尝试,并将压缩与标准霍夫曼编码和数据的熵进行比较。我实际上有点希望它比标准霍夫曼更接近熵,但这只是一个猜测。
  • 可能在这种情况下,树的末端节点将有 3 个叶子而不是 2 个叶子,其他一切都将保持不变。
  • 致那些投反对票的人 - 你能解释一下我能做些什么来改善这个问题吗?
  • 不是我,但我怀疑当有人问一个简单的谷歌查询会返回大量答案的问题时,人们会感到沮丧,而且之前在 Stack Overflow 上会返回很多次。
  • 很有趣,在此对话开始三年后,我在 Google 搜索中获得的“非二进制霍夫曼”的第一个结果是 Stackoverflow 中的 this answer。投票者经常以一种癫痫的方式做出反应,这令人沮丧。

标签: algorithm compression huffman-code


【解决方案1】:

该算法仍然有效,而且仍然很简单——事实上,维基百科有一个简短的参考 n-ary Huffman coding 引用原始 Huffman 论文作为来源。

不过,我确实想到,就像 Huffman 稍微次优一样,因为它为每个符号分配整数位数(不像 Arithmetic coding),三进制 Huffman 应该稍微更多 em> 次优,因为它必须分配整数个 trits。不是一个显示停止器,特别是对于只有 3 个,但它确实表明随着 n 的增加,n 元霍夫曼将进一步落后于其他编码算法。

【讨论】:

  • 我不太明白你为什么说,"...随着n"的增加,n-ary Huffman 将进一步落后于其他编码算法。如果您能详细说明原因,那就太好了!
  • @AnishRamaswamy Huffman 编码稍微次优(与例如范围或算术编码相比),因为每个码字都是整数个符号(位)。该位数永远不会少于该代码字的理想熵,但有时会更多。对于三进制或更高的 n,每个符号表示的信息量随着 n 的增加而增加,因此从“四舍五入”到整数符号的浪费也会增加。
【解决方案2】:

作为经验测试,我构建了二叉和三叉哈夫曼树,用于拼字游戏拼图的分布。

分布的熵表明每个字母不能超过 4.37 位。

二叉哈夫曼树平均每个字母使用 4.41 位。

三叉树霍夫曼树平均每个字母使用 2.81 个 trits,其信息密度与每个字母 4.45 位相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多