数据结构集合与搜索算法.docVIP

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
集合与搜索 一、复习要点 集合是最基本的抽象数据类型之一。本章讨论了集合的三种存储表示:位数组表示、有序链表表示、并查集。在本章的后半部分,讨论了与集合相关的搜索方法和简单的性能分析方法,包括适用于静态搜索表的顺序搜索和折半搜索及代表动态搜索表的二叉搜索树和AVL树。可以使用扩充的二叉搜索树描述顺序搜索和折半搜索,从而推导出估算搜索效率的公式。静态搜索表在整个程序的运行期间结构不会变化,其搜索效率随着表中对象的个数n不断增长。动态搜索表因各个对象的输入顺序不同,得到的搜索表的形态不同,典型的是二叉搜索树。在具有n个对象的二叉搜索树中,搜索效率最高的是高度最低的二叉搜索树。为确保二叉搜索树始终保持搜索效率最高,必须在输入新的对象时判断二叉搜索树是否“失去平衡”,并进行适当的平衡旋转,使二叉搜索树的高度降到最低。这就是AVL树。在AVL树的讨论中,4种平衡旋转,选择参加平衡旋转的3个结点是关键,必须加以注意。 本章复习的要点是: 1、基本知识点 必须理解集合及其表示方法,包括位数组表示、有序链表表示及其相关操作的实现算法集合及其表示。理解并查集实现的方法。理解搜索的概念,理解静态搜索表结构,掌握静态搜索表的顺序搜索和折半搜索算法及其性能分析方法。掌握二叉搜索树的表示、搜索、插入、删除算法及其性能分析方法,掌握AVL树的构造、插入、删除时的调整方法及其性能分析,重点是AVL树的定义、平衡化旋转、AVL树的插入和删除、AVL树的高度。 2、算法设计 ( 用有序链表表示集合时的求集合的并、交、差的算法 ( 并查集中的构造函数、求根及合并算法 ( 并查集中根据树的高度和根据树中结点个数进行合并的算法 ( 设置监视哨的顺序搜索算法和不设监视哨的顺序搜索算法 ( 有序顺序表的顺序搜索算法 ( 有序顺序表的折半搜索的递归算法和非递归算法 ( 二叉搜索树的搜索、插入和删除算法 ( 计算AVL树中指定结点高度的递归算法及利用此算法计算结点平衡因子的算法 二、难点和重点 1、集合的概念:集合的基本运算、集合的存储表示 用位数组表示集合时集合基本运算的实现 用有序链表表示集合时集合基本运算的实现 并查集:并查集定义、并查集的三种基本运算的实现 3、基本搜索方法 对一般表的顺序搜索算法(包括有监视哨和没有监视哨) 对有序顺序表的顺序搜索算法,包括递归和非递归算法 用判定树(即扩充二叉搜索树)描述有序顺序表的顺序搜索,以及平均搜索长度(成功与不成功)的计算。 对有序顺序表的折半搜索算法、包括递归和非递归算法 用判定树(即扩充二叉搜索树)描述有序顺序表的折半搜索,以及平均搜索长度(成功与不成功)的计算。 4、二叉搜索树 动态搜索树与静态搜索树的特性 二叉搜索树的定义、二叉搜索树上的递归和非递归搜索算法 二叉搜索树搜索时的平均搜索长度(成功与不成功)的计算 二叉搜索树的插入与删除算法 AVL树结点上的平衡因子、AVL树的平衡旋转方法 高度为h的AVL树上的最少结点个数与最多结点个数 AVL树的搜索方法、插入与删除方法(不要求算法) 三、教材中习题的解析 7-1 设A = { 1, 2, 3 }, B = { 3, 4, 5 },求下列结果: (1) A + B (2) A * B (3) A - B (4) A.Contains (1) (5) A.AddMember (1) (6) A.DelMember (1) (7) A.Min ( ) 【解答】 (1) 集合的并A + B = { 1, 2, 3, 4, 5 } (2) 集合的交A * B = { 3 } (3) 集合的差A - B = { 1, 2 } (4) 包含A.Contains (1) = 1,表示运算结果为True (5) 增加A.AddMember (1),集合中仍为{ 1, 2, 3 },因为增加的是重复元素,所以不加入 (6) 删除A.DelMember (1),集合中为{ 2, 3 } (7) 求最小元素A.Min ( ),结果为1 7-2 试编写一个算法,打印一个有穷集合中的所有成员。要求使用集合抽象数据类型中的基本操作。如果集合中包含有子集合,各个子集合之间没有重复的元素,采用什么结构比较合适。 【解答】 集合抽象数据类型的部分内容 template class Type class Set { //对象: 零个或多个成员的聚集。其中所有成员的类型是一致的, 但没有一个成员是相同的。 int Contains ( const Type x ); //判元素x是否集合this的成员 int SubSet ( Set Type right ); //判集

文档评论(0)

lingyun51 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档