数据结构_树详解.ppt

  1. 1、本文档共184页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * 6.5 树与等价问题 1.等价关系与等价类 2.确定等价类的算法 (1)令S中每个元素形成只有一个元素的等价类,记为S1,S2 ,….,Sn。 (2)重复读入m个序对,对每一个序对(x,y),判定x和y 所属的集合,若不属于同一个集合,则两个集合合并。 当m个序对处理完后,同一个集合中的元素就是一个等价类 例:R={(1,2),(3,4),(2,5),(3,6),(4,6),。。} 1 2 3 4 5 6 1 2 3 4 1 2 5 3 4 6 3、算法实现问题 (1)集合表示:用指向双亲的静态链表;根结点中的数据作为集合的名字 (2)find_mfset(i):确定数据i所属的集合 ,沿parent域向上查找,直到为-1为止 (3)merge_mfset(i,j):两个集合i与j合并(j为根) (4)mix_mfset(i,j):前者的改进,防止出现单枝树。合并前先比较两个集合的元素数,将元素少的集合的树根指向元素多的。为了记录集合元素数,将根中parent域中作为根标志的-1改为 -元素数,比如,-23代表元素个数为23,负代表根。 (5)fix_mfset(i):find_mfset的改进,在确定元素i所属集合时,做路径压缩。 1 2 3 5 4 6 7 8 9 1 3 4 5 8 2 7 6 9 6.6 哈夫曼(Huffman)树及应用 David Huffman教授1999年10月7日逝世。在他的一生中,他对于有限状态自动机,开关电路,异步过程和信号设计有杰出的贡献。 他发明的Huffman编码能够使我们通常的数据传输数量减少到最小。这个编码的发明和这个算法一样十分引人入胜。1950年,Huffman在MIT的信息理论与编码研究生班学习。Robert Fano教授让学生们自己决定是参加期未考试还是做一个大作业。而Huffman选择了后者,原因很简单,因为解决一个大作业可能比期未考试更容易通过。这个大作业促使了Huffman算法的诞生。 离开MIT后,Huffman来到University of California的计算机系任教,并为此系的学术做出了许多杰出的工作。而他的算法也广泛应用于传真机,图象压缩和计算机安全领域。但是Huffman却从未为此算法申请过专利或其它相关能够为他带来经济利益的东西,他将他全部的精力放在教学上,以他自己的话来说,“我所要带来的就是我的学生。” 6.6 哈夫曼(Huffman)树及应用 1、哈夫曼树的概念 路径:从一个祖先结点到子孙结点之间的分支构成这两个结点间的路径; 路径长度:路径上的分支数目称为路径长度; 树的路径长度:从根到每个结点的路径长度之和。 n个结点的二叉树中,完全二叉树具有最小的路径长度。 结点的权:根据应用的需要可以给树的结点赋权值; 结点的带权路径长度:从根到该结点的路径长度与该结点权的乘积; 树的带权路径长度=树中所有叶子结点的带权路径之和; 通常记作 WPL= ? wi ? li 哈夫曼树:假设有n个权值(w1 , w2 , … , wn ),构造有n个叶子结点的二叉树,每个叶子结点有一个 wi 作为它的权值。则带权路径长度最小的二叉树称为哈夫曼树。 例 有4个结点,权值分别为7,5,2,4,构造有4个叶子结点的二叉树 a b c d 7 5 2 4 WPL=7*2+5*2+2*2+4*2=36 WPL=7*3+5*3+2*1+4*2=46 a b c d 7 5 2 4 WPL=7*1+5*2+2*3+4*3=35 d c a b 2 4 7 5 2 哈夫曼树的构造 构造哈夫曼树的步骤: 1)根据给定的n个权值 ,构造n棵只有一个根结点的二叉树, n个权值分别是这些二叉树根结点的权。设F是由这n棵二叉树构成的集合 2)在F中选取两棵根结点树值最小的树作为左、右子树,构造一颗新的二叉树,置新二叉树根的权值=左、右子树根结点权值之和; 3)从F中删除这两颗树,并将新树加入F; 4)重复 2) 和3),直到F中只含一颗树为止; 例 w={5, 29, 7, 8, 14, 23, 3, 11} 5 14 29 7 8 23 3 11 14 29 7 8 23 11 3 5 8 8 7 15 14 29 23 3 5 8 11 11 3 5 8 19 14 29 23 8 7 15 11 3 5 8 19 29 23 14 8 7 15 29 29 14 8 7 15 29 11 3 5 8 19 23 42 11 3 5 8

文档评论(0)

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

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

1亿VIP精品文档

相关文档