提示:本节重点是哈夫曼树的构造
哈夫曼树的基本概念
路径长度:由树中一个结点到另一结点的分支构成这两个结点之间的路径,路径上分支的数目称为路径长度。
思考上图所示从结点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------用于最佳判断过程
;
构造哈夫曼树
例 进行五级分制转换,概率
哈夫曼树应用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树的具体应用。