杭州电子科技大学数据结构chap006.ppt

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

从该结点到树的根结点的路径长度与结点上权的乘积。 结点的带权路径长度定义为: 树中所有叶子结点的带权路径长度之和。 树的带权路径长度定义为: WPL(T) = 其中,n为叶子结点的个数; wk为叶子结点k的权; lk为从根结点到叶子结点k的路径长度。 * 2 7 5 4 9 WPL(T)= 7?2+5?2+2?3+4?3+9?2 =60 WPL(T)= 7?4+9?4+5?3+4?2+2?1 =89 7 9 2 5 4 例如: * 最优二叉树的概念 设有n个结点,它们分别具有不同的权值wk,将这n个结点作为叶子结点可以构造出m种不同的二叉树,这些二叉树具有不同的带权路径长度,则其中带权路径长度最小的二叉树称为最优二叉树(或赫夫曼树)。 * 例如: a b c d 7 5 2 4 a b c d 7 5 2 4 a b c d 7 5 2 4 (A) (B) (C) WPL(A)= (7+5+2+4)?2=36 WPL(B)= (7+5)?3+2?1+4?2=46 WPL(C)= 7?1+5?2+(2+4)?3=35 请注意观察 a 7 c 2 WPL(B)= 7?1+4?2+(2+5)?3 =36 * 分析上例,我们可以得出以下结论: 当叶子结点的权值不相同时,完全二叉树并不一定是最优二叉树; (2) 为了构造最优二叉树,必须将权值大的结点尽量靠近根结点; (3) 在这种二叉树中,不应有度为1的结点。 * 根据给定的 n 个权值 {w1, w2, …, wn},构造 n 棵二叉树的集合F = {T1, T2, … , Tn},其中每棵二叉树中均只含一个带权值为 wi 的根结点,其左、右子树为空树; (1) 赫夫曼算法: 二、如何构造最优二叉树 在 F 中选取其根结点的权值为最小的两棵二叉树,分别作为左、右子树构造一棵新的二叉树,并置这棵新的二叉树根结点的权值为其左、右子树根结点的权值之和; (2) 从F中删去这两棵树,同时加入刚生成的新树; 重复 (2) 和 (3) 两步,直至 F 中只含一棵树为止。 (3) (4) * 9 5 6 2 7 5 2 7 6 9 7 6 7 13 9 5 2 7 例如: 已知权值 W={ 5, 6, 2, 9, 7 } 6 7 13 9 5 2 7 16 6 7 13 9 5 2 7 16 29 * 9 5 2 7 16 6 7 13 29 0 0 0 0 1 1 1 1 00 01 10 110 111 * 三、赫夫曼编码(前缀编码) 为了高速地传递信息,需要高效的编码和译码技术。现在我们讨论如何用前面所学的知识来完成这一任务。 假定有四个字母:A,B,C,D需进行编码,我们可以用两位二进制代码来表示: 则信息“ABACCDA”的编码位:00010010101100 (14位) A:00 B:01 C:10 D:11 * 我们总是希望找到长度最小的信息编码。 进一步研究上面例子,可以发现,在信息“ABACCDA”中,字母B和D只出现一次,A则出现过3次,如果我们能选择一种编码,使A的位数比B和D的位数少,那么,整个信息编码的长度就可以减少。 例如,把编码设计为: A:0 B:110 C:10 D:111 则“ABACCDA”的编码为:0110010101110 (13位) * ——这是一种不等长编码,当信息很长时,这种方法是很有效的。 但需要注意的是:选择这样一个高效的编码方法时,一个符号的编码不能是另一个符号编码的前缀。即:任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。 上述问题的实质就是在某一信息集中,在每个符号出现的频率给定的情况下,去寻找一种最佳的编码方法。 ——叫做前缀编码 * 利用赫夫曼树可以构造一种不等长的二进制编码,并且构造所得的赫夫曼编码是一种最优前缀编码,即:使所传电文的总长度最短。 可利用二叉树来设计二进制的前缀编码。 A D B C 3 2 1 1 左分枝表示字符0 0 0 0 右分枝表示字符1 1 1 1 从根到叶子的路径上分枝字符组成的字符串即为该叶子结点字符的编码。 * 那么,如何得到最短的二进制前缀编码呢? ——赫夫曼树及其编码: 设字符ci出现的次数为wi,则以ci为叶子结点, wi为权值,构造赫夫曼树,然后在该赫夫曼树上进行编码。 例如: 某系统在通讯联络中,只可能出现八个字符,其频率分别为:0.05,0.29,0.07,

文档评论(0)

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

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

1亿VIP精品文档

相关文档