第9章搜索.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章搜索

静态查找表 动态查找表 二叉搜索树 AVL树 哈希表 (Hash) 查找的基本概念 概念 查找表 查找操作针对的数据集,由同一类型的数据元素组成 关键字(key) 数据元素中某个数据项的值,可唯一标识该数据元素 关键字和数据元素的类型说明,如 概念 查找 在查找表中根据关键字找出特定的数据元素的操作 查找成功 关键字找到,返回对应数据元素在查询表中的位置 查找失败 关键字没有找到,返回空记录或空指针 概念 查找算法 取决于查找表的数据结构 静态查找表 查找表事先已确定 对查询表除了创建和销毁操作外,只有查找或遍历操作 动态查找表 查找表本身在查找过程中动态生成,即若没有找到,则插入该元素 对查询表除了创建、销毁、查找、遍历操作外,还能进行插入和删除操作 9.1 静态表查找 顺序表的查找 有序表的查找 索引顺序表的查找 静态查找表的类型定义: 9.1.1顺序表的查找 静态查找表的顺序存储结构 查找操作的性能分析: 9.1.2静态查找表(二)有序表的查找 9.1.2静态查找表(二) 有序表的查找 折半查找的性能分析 查找成功时折半查找的平均查找长度为: 比较 9.1.3 索引顺序表查找 又称分块查找 是顺序查找的改进 除了查找表以外,还需一个索引表结构 索引顺序表查找 分块查找算法 首先,根据关键字值在索引表中查找(顺序或折半查找)以确定块的范围 然后,在块中根据关键字值做顺序查找 性能分析 若索引表查找采用顺序查找,则平均查找长度为(n/s+s)/2 +1;若索引表查找采用折半查找,则平均查找长度为log2(n/s+1)+s/2;其中n为查找表表长,s为每一块中记录个数 查找效率高,但需建立索引表 9.2 动态查找表 动态查找表的特点 表结构本身是在查找过程中动态生成的,即对于给定值key,若表中存在其关键字等于key的记录,则查找成功返回,否则插入关键字等于key的记录 动态查找表允许的操作 创建表、销毁表、关键字查找、记录插入、记录删除、记录遍历等 动态查找表 动态查找表 二叉排序树 (*) 平衡二叉树 9.2.1 二叉排序树及其查找过程 二叉排序树 二叉排序树的存储结构 通常采用二叉链表结构 二叉排序树 二叉排序树的查找算法一 (不考虑查找失败后插入记录) 二叉排序树 二叉排序树的特点 中序遍历二叉排序树可得到一个关键字的有序序列(即:可以通过输入一个无序序列,而通过构造二叉排序树后进行遍历的方法实现排序) 二叉排序树的插入过程不需要移动其他记录 具有相同n个结点的二叉排序树会因为构造的时候关键字插入的顺序不同而不同(下页说明) 二叉排序树的查找算法具有折半查找的特性,同时又采用了链式存储结构,因此是动态查找表的适宜表示 比较极端的例子还有 ?二叉排序树的查找分析 最差情况 (n+1)/2 最好情况 log2n 平均性能 在二叉排序树中删除一个节点 思考:如何找到某子树上最大值结点,如何找到最小值结点? 在二叉排序树中删除一个节点 x 平衡二叉树 AVL树 高度平衡的二叉搜索树 结点的平衡因子balance (balance factor) 每个结点附加一个数字,给出该结点右子树的高度减去左子树的高度所得的高度差。这个数字即为结点的平衡因子balance 。 根据AVL树的定义,任一结点的平衡因子只能取 -1,0和 1。 如果一个结点的平衡因子的绝对值大于1,则这棵二叉搜索树就失去了平衡,不再是AVL树。 如果一棵二叉搜索树是高度平衡的,它就成为 AVL树。如果它有 n 个结点,其高度可保持在O(log2n),平均搜索长度也可保持在O(log2n)。 AVL树的高度 设在新结点插入前AVL树的高度为 h,结点个数为 n,则插入一个新结点的时间是O(h)。对于AVL树来说,h 多大? 设 Nh 是高度为 h 的AVL树的最小结点数。根的一棵子树的高度为 h-1,另一棵子树的高度为 h-2,这两棵子树也是高度平衡的。因此有 N-1 = 0 (空树) N0 = 1 (仅有根结点) Nh = Nh-1 + Nh-2 +1 , h 0 可以证明,对于 h ? 0,有 Nh = Fh+3 -1 成立。 平衡化旋转 如果在一棵平衡的二叉搜索树中插入一个新结点,造成了不平衡。此时必须调整树的结构,使之平衡化。 平衡化旋转有两类: 单旋转 (左旋和右旋) 双旋转 (左平衡和右平衡) 每插入一个新结点时,AVL树中相关结点的平衡状态会发生改变。因此,在插入一个新结点后,需要从插入位置沿通向根的路径回溯,检查各结点的平衡因子(左、右子树的高度差)。 如果在某一结点发现高度不平衡,停止回溯。 从发生不平衡的结点起,沿刚才回溯的路径取直接下两层的结点。 如果这三个结点处于一条直线上,则采用单旋转进行平衡

文档评论(0)

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

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

1亿VIP精品文档

相关文档