《数据结构(java版)哈夫曼(haffman)树及其应用》由会员分享,可在线阅读,更多相关《数据结构(java版)哈夫曼(haffman)树及其应用(13页珍藏版)》请在金锄头文库上搜索。
1、哈夫曼(Haffman)树及其应用,主要内容,基本概念 何为哈夫曼树? 哈夫曼编码 项目实践:哈夫曼编码应用程序(求通讯编码),基本概念,路径长度:从树中一个结点另一个结点所经过的分支序列构成这两个结点之间的路径,路径上的分支数目称为路径长度。 树的路径长度:从树的根结点到树中每个叶子结点的路径长度之和称为该树的路径长度。 结点的带权路径长度:从该结点到树的根结点之间路径长度与该结点上权值的乘积。 树的带权路径长度:树中所有叶子结点的带权路径长度之和称为树的带权路径长度。 最优二叉树:带权路径最小的二叉树称为最优二叉树。,如何计算二叉树的带权路径长度,设二叉树具有n个带权的叶子结点,那么从根结
2、点到各叶子结点的路径长度与相应叶子结点权值的乘积之和就叫做二叉树的带权路径长度(WPL)。 n WPL=WK.LK k=1 其中: WK 为第k个叶子结点的权值 LK 为第k个叶子结点到根结点的路径长度,计算二叉树的带权路径长度举例,(a)WPL=2*2+3*2+5*2+9*2=38 (b)WPL=2*3+3*3+5*2+9*1=34 (c)WPL=9*3+5*3+3*2+2*1=50 (d)WPL=2*2+5*3+3*3+9*1=37 四个图的叶子结点具有相同的权值,由于其构成的形态不同,所以它们的带权路径长度也不同。 权值越大的叶子结点越靠近根结点,权值越小的叶子结点越远离根结点,这种二叉
3、树的WPL 就越小。 WPL 最小的二叉树就是最优二叉树,何为哈夫曼树?,最优二叉树就是哈夫曼树。因为构成最优二叉树的方法是由D.Haffman最早提出的,所以又称为哈夫曼树。 在分析一些决策判定问题的时候,利用哈夫曼树可以获得最佳的决策算法。,哈夫曼树的构成,问题:给定n个权值w1,w2,wn,求由这n个值作为叶子权值的哈夫曼树。 基本思想: 由给定的n个权值w1,w2,wn构造n棵只有一个叶子结点的二叉树,从而得到一个二叉树的集合F= T1,T2,Tn; 在F中选取根结点的权值最小和次小的两棵树作为左、右子树构造一棵新的二叉树,这棵新的二叉树根结点的权值为其左、右子树根结点权值之和; 在F
4、中删除作为新二叉树左、右子树的那两棵子树,并将这棵新二叉树加入到森林F 中。 重复步骤(2)和(3),当森林F中只剩下一棵二叉树时,这棵二叉树就是所要求的哈夫曼树。,哈夫曼树的构成举例,给定一组叶子权值1,3,5,7,由此权值构造哈夫曼树的过程如下:,哈夫曼树应用,在数据通讯中,经常需要将传送的文字转换为二进制字符0和1组成的二进制串,这样的二进制串称之为通讯编码。 如果在编码时考虑字符在整个电文中出现的频率,让出现频率高的字符尽可能采用短的编码,出现频率低的字符采用稍长一点的编码,这样电文要传送的总代码就会比较短,从而能节省数据传送的时间。 哈夫曼树可用于解决最优化问题。由哈夫曼树构造一组不
5、等长的通讯编码,这是一种使电文编码总长最短的编码方案,这样由哈夫曼树构造的通讯编码称为哈夫曼编码。,哈夫曼编码构造方法,设需要编码的字符集合为d1,d2,dn,它们在电文中出现的频率集合为w1,w2,wn,则构造哈夫曼编码的步骤为: 1)以d1,d2,dn作为叶子结点,w1,w2,wn作为它们的权值,构造哈夫曼树 2)在哈夫曼树上求叶子结点的编码。规定哈夫曼树中的左分支代表0,右分支代表1,则从根结点到每个叶子结点所经过路径分支上的0和1所组成的序列就是该结点对应字符的通讯编码。,哈夫曼编码构造举例,假设一段电文传送的字符为A,B,C,D,E,F组成,其每个字符在电文中出现的频率分别为6,5,4,3,2,1.试构造一组通讯编码。,哈夫曼编码如下: A=10 B=01 C-00 D=110 E=1111 F=1110,程序分析,定义哈夫曼树结点类 HaffNode 定义哈夫曼编码类 Code 哈夫曼树类 HaffmanTree 使用哈夫曼树求哈夫曼编码,项目拓展,99页实战演练,