我需要为大学项目制作一个霍夫曼树,但我对它是如何工作感到困惑。我实现了霍夫曼树的编码部分,但它始终与http://huffman.ooz.ie/不同。
不同于一个人编码到另一个人,但是正确吗?
答案 0 :(得分:0)
是
首先,您可以任意为树的每对分支指定0和1,或1和0,以获得同样有效的代码。
其次,当在霍夫曼算法的每个步骤中找到最低频率组时,您可以遇到三个或更多组共享最低频率的情况,或者两个或更多个组共享第二个最低频率的情况。然后,您有两个或更多选择要在该步骤中组合哪些组。在这种情况下,你可以得到不同的相邻符号,甚至拓扑上不同的树,所有这些都是同样最优的。
对于链接示例,在第一步中有五个频率一个符号可供选择,从而导致第一个配对的十个不同选择。然后在第二步中有三个频率一个符号可供选择,第二个配对有三个不同的选择。所以马上就有30棵不同的树,这些树有指定的符号可以构建。
这些都是拓扑等价的。它在第三步变得更有趣,其中第二低频率有三种选择,其中两种是分支,一种是叶子。因此,可以产生两种不同的拓扑结构。
总之,该特定频率集可以产生24个拓扑不同的树,每个拓扑的非常大量的不同符号和比特分配。事实上,你最终得到与示例中显示的完全相同的树的概率应该非常小!