第9章查找表3-3节.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章查找表3-3节

二、二叉平衡树 1. 二叉平衡树定义 1. 二叉平衡树定义 3. 平衡旋转技术 如果在一棵平衡的二叉搜索树中插入一个新 结点,造成了不平衡。此时必须调整树的结构,使之平衡。 平衡旋转有两类: 单旋转 (左旋和右旋) 双旋转 (左平衡和右平衡) 右单旋转 如果在左子树根结点的左子树上插入结点, 引起不平衡,则需要进行右单旋转 。 以结点B为旋转轴,将结点A顺时针旋转。 左单旋转 如果在右子树根结点的右子树上插入结点, 引起不平衡,则需要进行左单旋转 以结点C为旋转轴,让结点A逆时针旋转。 先左后右双旋转 如果在左子树根结点的右子树上插入结点, 引起不平衡,则需要进行先左后右双旋转 。 先右后左双旋转 如果在右子树根结点的左子树上插入结点 引起不平衡,则需要进行先右后左双旋转 。 case 1 : 当前结点 p 的平衡因子为0。如果它的左子树或右子树被缩短,则只需要修改它的 平衡因子为 1 或-1。不需要旋转。 case 2 : 结点 p 的平衡因子不为0,且较高的子树被缩短,则 p 的平衡因子改为0。不需要旋转。 case 3 : 结点 p 的平衡因子不为0,且较矮的子树又被缩短,则在结点 p 发生不平衡。需要进行平衡化旋转来恢复平衡。 令结点 p 的较高的子树的根为 q, 根据 q 的平衡因子,有如下 3 种平衡化操作: case 3a : 如果 q (较高的子树) 的平衡因子为 0,执行一个单旋转来恢复结点 p 的平衡。 case 3b : 如果 q 的平衡因子与 p 的平衡因子相同,则执行一个单旋转来恢复平衡, 结点 p 和 q 的平衡因子均改为0。 case 3c : 如果 p 与 q 的平衡因子相反, 则执行一个双旋转来恢复平衡, 先围绕 q 转再围绕 p 转。新根结点的平衡因子置为0,其它结点的平衡因子相应处理。 设在新结点插入前AVL树的高度为 h,结点个数为 n,则插入一个新结点的时间是O(h)。 对于AVL树来说,h 多大? 设 Nh 是高度为 h 的AVL树中含有的最少结点个数。显然有: N0 = 0 (空树), N1 = 1 (仅有根结点) Nh = Nh-1 + Nh-2 +1 , h 0 六. 静态索引结构 例:有一个存放职工信息的数据表. 每一个职工数据1k字节,且占一个存储页块,数据表共占14400K。但内存只有64K。 稠密索引: 一个索引项对应数据表中一个记录的索引结构。 当记录在外存中按加入顺序存放而不是按关键码有序存放时必须采用稠密索引结构。 索引顺序表的查找 查找成功时的平均查找长度 索引顺序查找的平均查找长度与表中的记录个数 n 有关,与每个子表中的记录个数 s 有关。 在给定 n 的情况下,s 应选择多大? 用数学方法可导出, 当 s = 时, ASLIndexSeq 取极小值: ASLIndexSeq = +1。 这个值比顺序查找强,但比折半查找差。 若采用折半查找记录所在的子表,子表仍然采用顺序查找,则查找成功时的平均查找长度为 ASLIndexSeq = ASLIndex + ASLSubList ? log2(b+1)-1 + (s+1)/2 ? log2(1+ n/s) + s/2 例题: 已知长度为12的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec) Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ASL = (1×1+2 ×2 +3 × 3 +4 ×3 +5 ×2 +6 ×1) /12 = 42 /12 1. 求二叉排序树 例题: 已知长度为12的表: (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec) ASL = (1×1+2 ×2 +3 × 4 +4 ×5 ) / 12 = 37 /12 2. 有序表 排序后采用折半查找 (Apr, Aug, Dec, Feb, Jan, Jul, Jun, Mar,May,Nov ,Oct, Sep) 3 4 2 3 4 1 3 4 2 4 3 4 例题: 已知

文档评论(0)

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

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

1亿VIP精品文档

相关文档