数据结构期末复习-赫夫曼树的构造


tips: 赫夫曼树or哈夫曼树,指的是同一种树,学校老师教学时称赫夫曼树,我也随之采用赫夫曼树,不用纠结名称哈

基本概念

路径:从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。

结点的路径长度:两结点间路径上的分支数。

19点22分.png

树的路径长度:从树根到每一一个结点的路径长度之和。 记作: TL

19点24分.png

结点数目相同的二叉树中,完全二叉树是路径长度最短的二叉树。

权(weight):将树中结点赋给一个有着某种含 义的数值,则这个数值称为该结点的权。

结点的带权路径长度: 从根结点到该结点之间的路径长度与该结点的权的乘积。

树的带权路径长度:树中所有叶子结点的带权路径长度之和。
19点27分.png

赫夫曼树:带权路径长度(WPL)最短的树。简称最优二叉树。

赫夫曼树的构造

赫夫曼树中权值越大的叶子离根越远。

贪心算法:构造赫夫曼树时首先选择权值小的叶子结点

赫夫曼算法

  1. 根据n个给定的权值{W1, W2, … Wn} 构成n棵二叉树的森林
    F={T1, T2… Tn},其中Ti只有一个带权为Wi的根结点。
    构造森林全是根
  2. 在F中选取两棵根结点的权值最小的树作为左右子树,构造一棵新的二叉树,且设置新的二叉树的根结点的权值为其左右子树上根结点的权值之和。
    选用两小造新树
  3. 在F中删除这两棵树,同时将新的到的二叉树加入森林中。
    删除两小添新人
  4. 重复2和3,直到森林中只有一颗树为止,这棵树即为赫夫曼树
    重复2、3剩单根

举个例子

例1:有4个节点a,b,c,d,权值分别为7,5,2,4,构造赫夫曼树

19点42分.png

例2:n=4, w={70,50,20,40}
画出HT图
要新添n-1个结点,4-1=3,4+3=7,共有七个结点
起始图

idweightparentlchildrchild
170
250
320
440
5
6
7

第一步:选用两小造新树

idweightparentlchildrchild
170
250
3205
4405
56034
6
7

第二步:删除两小添新人

idweightparentlchildrchild
170
2506
3205
4405
560634
611025
7

重复上述两步

idweightparentlchildrchild
1707
2506
3205
4405
560634
6110725
7180016

19点51分.png

例3

19点55分.png

总结

初始时有n颗树,要经过n-1次合并最终形成赫夫曼树

一颗有n个叶子结点的赫夫曼树有2n-1个结点

在赫夫曼树中,只有度为0和2的结点,没有度为1的结点

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值