代码之家  ›  专栏  ›  技术社区  ›  Danielman

一棵哈夫曼树会因人而异吗?

  •  1
  • Danielman  · 技术社区  · 7 年前

    我需要为一个大学项目制作一棵哈夫曼树,但我真的对它的工作原理感到困惑。我实现了哈夫曼树的编码部分,但它与 http://huffman.ooz.ie/ 总是

    1 回复  |  直到 7 年前
        1
  •  7
  •   Mark Adler    4 年前

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

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

    这些都是拓扑等价的。第三步更有趣,第二个最低频率有三个选择,其中两个是分支,一个是叶子。因此,可能会产生两种不同的拓扑。

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

    推荐文章