【问题标题】:Can a huffman tree enconding be different from one person to anoher?哈夫曼树编码可以因人而异吗?
【发布时间】:2017-06-26 16:15:30
【问题描述】:

我需要为大学项目制作一棵霍夫曼树,但我对它的工作原理感到非常困惑。我实现了霍夫曼树的编码部分,但它一直与http://huffman.ooz.ie/ 不同。

一个人和另一个人编码可能不同,但正确吗?

【问题讨论】:

  • 欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
  • 您是否在问相同输入的(有效)霍夫曼树是否可以不同?如果是这样,答案是肯定的。
  • 这个问题没有错。

标签: huffman-code


【解决方案1】:

是的。

首先,您可以将 0 和 1,或 1 和 0 任意分配给树的每一对分支,以获得同样有效的代码。

其次,在霍夫曼算法的每一步寻找最低频率组时,可能会遇到三个或更多组共享最低频率,或者两个或更多组共享次低频率的情况。然后,您可以选择在该步骤中组合哪些组。在这种情况下,您最终可能会得到不同的相邻符号,甚至是拓扑不同的树,所有这些都是同样最优的。

对于链接的示例,第一步中有五个频率一符号可供选择,导致第一次配对有十种不同的选择。然后在第二步中有三个频率一符号可供选择,第二对有三个不同的选择。因此,一开始就有 30 种不同的树,它们具有可以构建的指定符号。

这些都是拓扑等价的。在第三步变得更有趣了,第二低的频率有三个选择,其中两个是树枝,一个是叶子。因此,可能会产生两种不同的拓扑结构。

总而言之,这组特定的频率可以产生 24 个拓扑不同的树,每个拓扑的不同符号和位分配乘以非常大量的时间。所以实际上你最终得到与示例中所示完全相同的树的概率应该很小!

以下是频率 {1、1、1、1、1、2、3、3、3、3、3、4、5、5、6、7、9、10、12 的 24 种可能的拓扑, 16}:

【讨论】:

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