知识点扫盲:二叉树之哈夫曼树

说起曼哈顿,我脑子闪过的念头就是:那位大佬不是搞原子弹的嘛?这个树跟他是怎么关系的说?是他发现的嘛?

带着这些问题我细品了一会。。。嗯,原来是哈夫曼,这就说通了。

哈夫曼树是由麻省理工学院的哈夫曼博士于1952年发明的。这颗树到底是什么树呢?我们来一起了解一下。

要认识哈夫曼树,首先需要知道几个知识点:

1.什么是路径

知识点扫盲:二叉树之哈夫曼树_第1张图片

如上图所示,其中A,B,D,H就是一条路径

2.什么是路径长度

知识点扫盲:二叉树之哈夫曼树_第2张图片

仍然使用二叉树的例子,从A到H共经过了三条边,此路径长度就是3

3.什么是节点的带权路径长度

知识点扫盲:二叉树之哈夫曼树_第3张图片

假设H的权重为3,路径长度也是3,因此节点H的带权路径长度就是3*3=9

4.什么是树的带权路径长度

知识点扫盲:二叉树之哈夫曼树_第4张图片

在这一棵树种,所有叶子结点的带权路径长度之和叫做树的带权路径长度,简称是WPL,以上面的二叉树为例,

树的路径长度是 3X3 + 6X3 + 1X2 + 4X2 + 8X2 = 53 

哈夫曼树

那么哈夫曼树究竟是什么呢?就是在叶子结点和权重确定的情况下,树的带权路径长度最小的二叉树就是哈夫曼树,也叫做最优二叉树。

原则上,我们应该让权重最小的叶子结点远离树的根,权重大的叶子节点距离根近。

下图中左面就是一根哈夫曼树。

知识点扫盲:二叉树之哈夫曼树_第5张图片

注意:同样的叶子节点很可能有多种哈夫曼树,下面几棵就都是哈夫曼树。

知识点扫盲:二叉树之哈夫曼树_第6张图片

下面来介绍一下构建一颗哈夫曼树的方法:假设有6个叶子结点,权重依次是2,3,7,9,18,25

第一步:构建森林

每个单独的节点都能看作是一棵单独的树,这样子就形成了一个森林了

知识点扫盲:二叉树之哈夫曼树_第7张图片

第二步:将当前权重最小的两个点结合,形成新的父节点

知识点扫盲:二叉树之哈夫曼树_第8张图片

第三步:从队列中移除上一步中使用的最小的两个节点,并补充新的父节点

知识点扫盲:二叉树之哈夫曼树_第9张图片

第四步:重复上述步骤,直至整棵树完成。

知识点扫盲:二叉树之哈夫曼树_第10张图片

知识点扫盲:二叉树之哈夫曼树_第11张图片

知识点扫盲:二叉树之哈夫曼树_第12张图片

知识点扫盲:二叉树之哈夫曼树_第13张图片

知识点扫盲:二叉树之哈夫曼树_第14张图片

知识点扫盲:二叉树之哈夫曼树_第15张图片

知识点扫盲:二叉树之哈夫曼树_第16张图片

知识点扫盲:二叉树之哈夫曼树_第17张图片

至此,一棵崭新的哈夫曼树就形成了。

 

你可能感兴趣的:(知识扫盲,二叉树)