问题: 给定N个带权值的叶子节点,如何构造出一个带权路径最小的二叉树?

答:哈夫曼树(Huffman Tree)

在数据结构理论中,哈夫曼树又称为最优树,相关的知识点还有哈弗曼编码等。在正式介绍哈夫曼树之前,需要知道下面的知识点:

f632fa3f75d9fc12889820ce6f1527c4.png

(1)节点路径

按照规定,将树中一个节点到另一个节点所经历的分支,称为节点路径,比如上图中节点A到节点E的路径为ABE。

(2)路径长度

根据上述“节点路径”的定义,将路径上的分支总数称为路径长度,比如上图中节点A到节点E的路径长度为2。

(3)节点的带权路径长度

根据上述“节点路径”和“路径长度”的定义,将从根节点到某节点的路径长度和节点权值的乘积,称为节点的带权路径长度。比如上图中节点A到节点D的路径长度为2,权值为8,则带权路径长度为2x8=16。

(4)树的带权路径长度

根据上述“节点的带权路径长度”的定义,将树中所有叶子节点的带权路径长度,称为树的带权路径长度。比如上图中,三个叶子节点C、D、E,对应的路径长度分别为1、2、2,对应的权值分别为4、8、3,则树的带权路径长度为:

79701df5f82956944afd1c432a626914.png

将上述概念形式化,可以使用下面的公式进行计算:

8b094a651ebc156d2987646671859a30.png

其中了表示路径长度,w表示权值,n表示叶子节点个数。

总结:

上文梳理了理解哈夫曼树所必须的基本概念,包含节点路径和路径长度等,下文将会讲解如何构造哈夫曼树。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐