网站大量收购闲置独家精品文档,联系QQ:2885784924

[精华]数据结构__b树.ppt

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

B树;动态查找结构; 在子树 Ai 中所有的关键码都小于 Ki+1,且大于 Ki,0 i n。 在子树 An 中所有的关键码都大于Kn; 在子树 A0 中的所有关键码都小于 K1。 子树 Ai 也是 m 路查找树,0 ? i ? n。 ;AVL树是2路查找树。如果已知m路查找树的度 m和它的高度 h, 则树中的最大结点数为 ; ;B-树;非B-树 B-树; B-树的查找算法;设在 m 阶B-树中,失败结点位于第 h +1层。在这棵B-树中关键码个数 N 最小能达到多少? 从B-树的定义知, 1层 1 个结点 2层 至少 2 个结点 3层 至少 2 ?m / 2? 个结点 4层 至少 2 ?m / 2? 2 个结点 如此类推,?? h 层 至少有2 ?m / 2? h-2个结点。所有这些结点都不是失败结点。;若树中关键码有 N 个, 则失败结点数为 N +1。这是因为失败一般发生在 Ki x 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;若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-树的插入; ( m, A0, K1, A1, K2, A2, ……, Km, Am) 其中 Ki Ki+1, 1 ? i m 这时必须把结点 p 分裂成两个结点 p 和 q,它们包含的信息分别为: 结点 p: ( ?m/2? -1, A0, K1, A1, ……, K?m/2? -1, A?m/2? -1) 结点 q: (m - ?m/2?, A?m/2?, K?m/2?+1, A?m/2?+1, ……, Km, Am) 位于中间的关键码 K?m/2? 与指向新结点 q 的指针形成一个二元组 ( K?m/2?, q ),插入到这两个结点的双亲结点中去。;结点“分裂”的示例;示例:从空树开始逐个加入关键码建立3阶B-树;在插入新关键码时,需要自底向上分裂结点,最坏情况下从被插关键码所在叶结点到根的路径上的所有结点都要分裂。;B-树的插入算法 ;当分裂一个非根的结点时需要向磁盘写出 2 个结点, 当分裂根结点时需要写出 3 个结点。 如果我们所用的内存工作区足够大,使得在向下查找时读入的结点在插入后向上分裂时不必再从磁盘读入,那么,在完成一次插入操作时 需要读写磁盘的次数 = = 找插入结点向下读盘次数 + + 分裂非根结点时写盘次数 + + 分裂根结点时写盘次数 = = h+2(h-1)+3 = = 3h+1。;可以证明,在向一棵初始为空的B-树中插入 N 个关键码, 并且非失败结点个数为 p 时, 分裂的结点总数最多为 p-2。由于根结点至少有一个关键码,其它各非失败结点至少有 ?m/2? -1 个关键码,则一棵拥有 p 个结点的 m

文档评论(0)

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

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

1亿VIP精品文档

相关文档