[理学]数据结构第八章.pptVIP

  1. 1、本文档共86页,可阅读全部内容。
  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树 并查集 (Union-Find Sets) 并查集支持以下三种操作: Union (Root1, Root2) //合并操作 Find (x) //搜索操作 InitUFSets (s ) //初始化操作 对于并查集来说,每个集合用一棵树表示。 为此,采用树的双亲表示作为集合存储表示。集合元素的编号从0到 n-1。其中 n 是最大元素个数。 在双亲表示中,第 i 个数组元素代表包含集合元素 i 的树结点。初始时, 根结点的双亲为-1,表示集合中的元素个数。 在同一棵树上所有结点所代表的集合元素在同一个子集合中。 为此,需要有两个映射: 集合元素到存放该元素名的树结点间的对应; 集合名到表示该集合的树的根结点间的对应。 设 S1= {0, 6, 7, 8 }, S2= { 1, 4, 9 }, S3= { 2, 3, 5 } 初始时, InitUFSets(S) 构造一个森林, 每棵树只有一个结点, 表示集合中各元素自成一个子集合 S[i] = -1, i = 0, 1, …, n-1。 用 Find(S, i) 寻找集合元素 i 的根。 如果有两个集合元素 i 和 j: Find(S, i) == Find(S, j) 表明这两个元素在同一个集合中, 如果两个集合元素 i 和 j 不在同一个集合中,可用 Union(S, i, j) 将它们合并到一个集合中。 并查集操作的算法 查找 void Union (UFSets *S, int Root1, int Root2) { //求两个不相交集合Root1与Root2的并 S-parent[Root1] += S-parent[Root2]; S-parent[Root2] = Root1; //将Root2连接到Root1下面 } Find和Union操作性能不好。假设最初 n 个元素构成 n 棵树组成的森林,S-parent[i] = -1。做处理Union(n-2, n-1), …, Union(1, 2), Union(0, 1)后,将产生退化的树。 合并 按树结点个数合并 结点个数多的树的根结点作根 按树高度合并 高度高的树的根结点作根 Union操作的折叠规则 为进一步改进树的性能,可以使用如下折叠规则来“压缩路径”。即: 如果 j 是从 i 到根root的路径上的一个结点,且 S-parent[j] != root[j], 则把 S-parent[j] 置为 root[i]。 静态搜索表 通常称用于搜索的数据集合为搜索结构,它是由同一数据类型的对象(或记录)组成。 在每个对象中有若干属性,其中有一个属性,其值可唯一地标识这个对象。称为关键码。使用基于关键码的搜索,搜索结果应是唯一的。但在实际应用时,搜索条件是多方面的,可以使用基于属性的搜索方法,但搜索结果可能不唯一。 实施搜索时有两种不同的环境。 静态环境,搜索结构在插入和删除等操作的前后不发生改变。 ? 静态搜索表 动态环境,为保持较高的搜索效率, 搜索结构在执行插入和删除等操作的前后将自动进行调整,结构可能发生变化。 ? 动态搜索表 静态搜索表结构的定义 衡量一个搜索算法的时间效率的标准是:在搜索过程中关键码的平均比较次数,也称为平均搜索长度ASL(Average Search Length),通常它是搜索结构中对象总数 n的函数。 在静态搜索表中, 利用数组元素的下标作为数据对象的存放地址。搜索算法根据给定值x, 在数组中进行搜索。直到找到x在数组中的位置或可确定在数组中找不到x为止。 另外衡量一个搜索算法还要考虑算法所需要的存储量和算法的复杂性等问题。 顺序搜索 (Sequential Search) 所谓顺序搜索, 又称线性搜索, 主要用于在线性结构中进行搜索。 设若表中有 n 个对象,则顺序搜索从表的先端 (或后端) 开始, 顺序用各对象的关键码与给定值 x 进行比较, 直到找到与其值相等的对象, 则搜索成功; 给出该对象在表中的位置。 若整个表都已检测完仍未找到关键码与x相等的对象, 则搜索失败。给出失败信息。 设置“监视哨”的顺序搜索算法 顺序搜索的递归算法 基于有序顺序表的顺序搜索算法 有序顺序表的顺序搜索 ( 10, 20, 30, 40, 50, 60 ) 基于有序顺序表的折半搜索 设n个对象存放在一个按其关键码从小到大排好了序的有序顺序表中。 折半搜索时, 先求位于搜索区间正中的对象的下标mid,用其关键码与给定值x比较:

文档评论(0)

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

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

1亿VIP精品文档

相关文档