6.1树的定义和基本术语6.2二叉树6.3遍历二叉树和线索二叉.ppt

6.1树的定义和基本术语6.2二叉树6.3遍历二叉树和线索二叉.ppt

  1. 1、本文档共136页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.1树的定义和基本术语6.2二叉树6.3遍历二叉树和线索二叉.ppt

6.6 Huffman树及其应用 最优二叉树(Huffman) 如何构造最优二叉树 如何求哈夫曼编码 一、哈夫曼树(最优树)的定义 结点的路径长度:从根结点到该结点的路径上分支的 数目。 树的路径长度:树中每个结点的路径长度之和。 (结点)带权路径长度:结点的路径长度*结点的权=li*wi 树的带权路径长度:树中所有叶结点的带权路径长度之和WPL(T)= 设K={k1,k2,…kn},它们的权W={w1,w2,…,wn}, 构造以k1,k2,…kn为叶结点的二叉树,使得 WPL= 为最小,则称之为“最优二叉树”。 一、哈夫曼树(最优树)的定义 例 W={1,2,4,6} ,可构造出如下的二叉树: 1 2 4 6 1 2 4 6 6 4 1 2 WPL =(1+2+4+6)*2=26 WPL =1+2*2+(4+6)*3=35 WPL =6+4*2+(1+2)*3=23 (1) (2) (3) 根据定义求Huffman树的方法是:对给定的n个叶子结点(外部结点),构造出全部二叉树并求出其WPL,然后找出WPL最小的树。 当n较大时,显然这种方法是不可取的。 二、构造huffman树 算法思想: 1. 根据权值{w1 , w2 ,…, wn}构造n个二叉树F={T1 , T2 , …, Tn},其中 Ti中是只含权值为wi 的结点。 2. 从F中选两个权值最小的二叉树Ti和Tj,构造一个 根结点R, R的权wR为wi + wj 。 3. 从F中删除Ti和Tj ,加入新的树R到F中。 4. 重复2,3 直到F中只有一棵树(或执行n-1次)为止。 问题: 如何证明所构造的二叉树是最优树? 例: 已知权值 W={ 5, 6, 3, 9, 7 } 5 6 3 7 9 6 7 3 8 5 9 例: 已知权值 W={ 5, 6, 3, 9, 7 } 5 6 3 7 9 3 8 5 7 6 13 9 例: 已知权值 W={ 5, 6, 3, 9, 7 } 5 6 3 7 9 7 6 13 3 8 5 9 17 例: 已知权值 W={ 5, 6, 3, 9, 7 } 5 6 3 7 9 3 8 5 9 17 7 6 13 30 用n个叶结点构造出的最优二叉树共有几个结点? 构造最优树时共执行n-1次循环,每次增加一个新 结点,共增加了n-1个结点,所以结点总数一定 是n+n-1=2n-1 因为n0=n2+1, 所以n2=n0-1, 又由于在最优二叉树中 没有度为1的结点,所以在最优二叉树中总的结点数为 n+n-1=2n-1 Huffman 算法的实现: Huffman编码: 设字符集为 {c1 , c2 ,…, cn} , 看作叶结点 出现概率为 {w1 , w2 ,…, wn} ,叶结点的权 (1)构造Huffman树 (2)左分支标0,右分支标1 (3)根到叶结点ci的路径上的二进制编码就是ci的编码 编码长度为{ l1 , l2 ,…, ln} 是叶结点的路径长度, 则树的带权路径长度WPL是: 根到任何ci的路径都不会经过任何其它ck, 因此 Huffman编码是无前缀编码,即任何一个编码都不 会是另一个编码的前缀。 例:字符集{a,b,c,d,e,f,g,h}出现概率分别是 {0.14, 0.08, 0.11, 0.23, 0.29, 0.05, 0.03, 0.07} Huffman编码: 构造Huffman 树: a b c h d e f g 100 42 58 19 29 15 8 23 3 5 11 29 14 7 8 0 1 1 1 1 1 1 1 0 0 0 0 0 0 (2)编码: a: 110 b: 1111 c: 011 d: 00 e: 10 f: 0101 g: 0100 h: 1110 (3)编码长度: WPL= 2*0.23+4*0.03+ 4*0.05+ 3*0.11+ 2*0.29+3*0.14+4*0.08+4*0.07=2.71 0 0 0 0 0 0 1 1 1 1 1 1 1 Huffman 算法的实现: 用数组存储Huffman 树,每个数组元素HTNode包括4个域: 1 2 3 n n+1 2n-1

文档评论(0)

ailuojue1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档