数据结构 之 哈夫曼树及其应用(八)

提示:本节重点是哈夫曼树的构造


哈夫曼树的基本概念

路径长度由树中一个结点到另一结点的分支构成这两个结点之间的路径,路径上分支的数目称为路径长度。

思考上图所示从结点B到结点G的路径长度是多少?
从结点A到结点G的路径长度是多少?
从结点B到结点G的路径是结点序列B、E、G,路径长度为2 。

树的路径长度 从根结点到每一个结点的路径长度之和。
结点的权在一些应用中,赋予树中结点的一个有某种意义的实数。
结点的带权路径长度从根结点到某个结点的路径长度与该结点所带的权值的乘积。

思考:假设结点D和结点G的权分别为3和4,则结点D的带权路径长度为多少?结点G的带权路径长度为多少?
结点D的带权路径长度为2×3=6,结点G的带权路径长度为3×4=12。
树的带权路径长度树中所有叶子结点的带权路径长度之和
哈夫曼树(Huffman)又称最优二叉树是一类带权路径长度最短的树,是于1952年由美国数学家David Huffman创立的,有着广泛的应用。
假设有n个权值{ W1,W2,…,W n},试构造有n个叶子结点的二叉树,每个叶子结点拥有一个权值W,则其中带权路径长度最小的二叉树,称为最优二叉树或哈夫曼树。

举例

假定有4个节点A、B、C、D,它们的权分别是8、6、3、1,则以这四个结点为叶子结点的二叉树如图。

a)WPL=8×2+6×2+3×2+1×2=36
(b)WPL=8×2+6×3+3×3+1×1=44
(c)WPL=8×1+6×2+3×3+1×3=32

※构造哈夫曼树基本思想

(1)根据给定的n个权值wl,w2,…,wn构成n棵二叉树的森林F={T1,T2,…,Tn},其中每棵二叉树都只有一个根结点。
(2)在森林F中选出两棵根结点权值最小的树(当这样的树不止两棵树时,可以从中任选两棵),将这两棵树合并成一棵新树,需要增加一个新结点作为新树的根,并将所选的两棵树的根分别作为新根的左右孩子(谁左,谁右无关紧要),将这两个孩子的权值之和作为新树根的权值。
(3)对新的森林F重复(2),直到森林F中只剩下一棵树为止。这棵树便是哈夫曼树。

※构造哈夫曼树过程

为了直观起见,在图中把带权的叶子节点画成方形,其他非叶子节点仍为圆形。
从最小的两个数字开始组合,依次类推。最后形成哈夫曼树。

在这里插入图片描述

N个叶子构成的哈夫曼树 不是唯一的 ,一般习惯把权值较小的当作左子树,权值较大的当做右子树。 但是其带权路径长度是唯一的。*
在这里插入图片描述
下面给大家提供几个练习题供大家练手,理解上面的内容后会很容解出。
在这里插入图片描述

哈夫曼树的应用1------用于最佳判断过程

有些课程需要将最终的分数由百分制转换成五级分制,语句如下:
if(a<60)	b="不及格";
else if (a<70)	b="及格";
else if (a<80)	b="中等";
else if(a<90)	b="良好";
else	b="优秀"
;
构造哈夫曼树
例 进行五级分制转换,概率

在这里插入图片描述

哈夫曼树应用2----用于通信编码

在通信及数据传输中,数据的传递和存储都需要将不同形式的信息进行二进制编码。

例如对于进行快速远距离通讯的电报, 各个字符的出现频度或使用次数是不相同的。我们希望用短的编码来表示那些出现频度大的字符,用长的编码来表示出现频度小的字符,从而缩短电文的总长度。
在这里插入图片描述

例如:有一段电文:AFTER DATA EAR ARE ART AREA。这里用到的字符集为{A,E,R,T,F,D},各字符的出现次数为{8,4,5,3,1,1}。我们用{8,4,5,3,1,1}作权值构造一棵哈夫曼树,并写出哈夫曼编码。

哈夫曼编码

在这里插入图片描述
示例
例:已知某系统在通讯时,只出现C,A,S,T,B五种字符,它们出现的频率依次为2,4,2,3,3,试设计Huffman编码。
在这里插入图片描述
在这里插入图片描述

总结

1、 掌握结点的带权路径长度的计算方法。
2 、何为huffman树,掌握huffman树的构造方法。
3 、理解huffman树的具体应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值