1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
B-tree

删除55 结点合并 删除80 结点合并 非叶结点删除 删除50 删除55 结点合并与调整 删除70 删除75 B-树的关键码删除算法 AVL树是2路查找树。如果已知m路查找树的度 m和它的高度 h, 则树中的最大结点数为 (等比级数前 h 项求和) 每个结点中最多有 m-1 个关键码,在一棵高度为 h 的 m 路查找树中关键码的最大个数为 mh+1-1。 对于高度 h=2 的二叉树,关键码最大个数为7; 对于高度 h=3 的3路查找树,关键码最大个数为 34-1 = 80。 若树中关键码有 N 个, 则失败结点数为 N+1。这是因为失败一般发生在 Kix Ki+1, 0?i?N,设K0 = -?,KN+1 = +?。因此,有 N +1 = 失败结点数 = 位于第 h+1 层的结点数 ? 2 ?m / 2? h-1 N ? 2 ?m / 2? h-1-1 反之,如果在一棵 m 阶B-树中有 N 个关键码,则所有的非失败结点所在层次都小于 h,则 h-1 ? log ?m / 2? ( (N +1) / 2 ) 示例:若B-树的阶数 m = 199,关键码总数 N = 1999999,则B-树的高度 h 不超过 log100 1000000 +1= 4 提高查找树的路数 m,可以改善树的查找性能。对于给定的关键码数 n,如果查找树是平衡的,可以使 m 路查找树的性能接近最佳。下面我们将讨论一种称之为B-树的平衡的 m 路查找树。在B-树中我们引入“失败”结点。一个失败结点是当查找值x不在树中时才能到达的结点。 若B-树的阶数 m = 3,高度 h = 4,则关键码总数至少为 N = 2 ?3 / 2? 4-1-1 = 15。 m值的选择 如果提高B-树的阶数 m,可以减少树的高度,从而减少读入结点的次数,因而可减少读磁盘的次数。 事实上,m 受到内存可使用空间的限制。当 m很大超出内存工作区容量时,结点不能一次读入到内存,增加了读盘次数,也增加了结点内查找的难度。 m值的选择:应使得在B-树中找到关键码 x 的时间总量达到最小。 这个时间由两部分组成: 从磁盘中读入结点所用时间 在结点中查找 x 所用时间 根据定义,B-树的每个结点的大小都是固定的,结点内有 m-1 个索引项 (Ki, Di, Ai), 1 ? i m。其中,Ki 所占字节数为?,Di 和 Ai 所占字节数为?,则结点大小近似为 m(?+2?) 个字节。读入一个结点所用时间为: tseek + tlatency + m(? + 2?) ttran = a + bm B+树 B+树可以看作是B-树的一种变形,在实现文件索引结构方面比B-树使用得更普遍。 一棵m阶B+树可以定义如下: 树中每个非叶结点最多有 m 棵子树; 根结点 (非叶结点) 至少有 2 棵子树。除根结点外,其它的非叶结点至少有 ?m/2? 棵子树;有 n 棵子树的非叶结点有 n-1 个关键码。 所有的叶结点都处于同一层次上,包含了全部关键码及指向相应数据对象存放地址的指针,且叶结点本身按关键码从小到大顺序链接; 每个叶结点中的子树棵数 n 可以多于 m,可以少于 m,视关键码字节数及对象地址指针字节数而定。 若设结点可容纳最大关键码数为 m1,则指向对象的地址指针也有 m1 个。 结点中的子树棵数 n 应满足 n ? [?m1/2?, m1]。 若根结点同时又是叶结点,则结点格式同叶结点。 所有的非叶结点可以看成是索引部分,结点中关键码 Ki 与指向子树的指针 Ai 构成对子树 (即下一层索引块) 的索引项 ( Ki, Ai ),Ki 是子树中最小的关键码。特别地,子树指针 A0 所指子树上所有关键码均小于 K1。结点格式同B-树。 B+树 叶结点中存放的是对实际数据对象的索引。 在B+树中有两个头指针:一个指向B+树的根结点,一个指向关键码最小的叶结点。可对B+树进行两种查找运算:一种是循叶结点链顺序查找,另一种是从根结点开始,进行自顶向下,直至叶结点的随机查找。 B+树 在B+树上进行随机查找、插入和删除的过程基本上与B-树类似。只是在查找过程中,如果非叶结点上的关键码等于给定值,查找并不停止,而是继续沿右指针向下,一直查到叶结点上的这个关键码。B+树的查找分析类似于B-树。 B+树的插入仅在叶结点上进行。每插入一个关键码-指针索引项后都要判断结点中的子树棵数是否超出范围。当插入后结点中的子树棵数 n m1 时,需要将叶结点分裂为两个结点,它们的关键码分别为 ?(m1+1)/2? 和 ?(m1+1)/2?。并且它们的双亲结点中应同时包

文档评论(0)

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

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

1亿VIP精品文档

相关文档