数据结构--B树.ppt

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

B树 动态查找结构 现在我们所讨论的m路查找树多为可以动态调整的多路查找树,它的一般定义为: 一棵m路查找树, 它或者是一棵空树, 或者是满足如下性质的树: 根最多有 m 棵子树, 并具有如下的结构: n, A0, ( K1, A1 ), ( K2, A2 ), ……, ( Kn, An ) 其中,Ai 是指向子树的指针,0 ? i ? n m;Ki 是关键码,1 ? i ? n m。 Ki Ki+1, 1 ? i n。 在子树 Ai 中所有的关键码都小于 Ki+1,且大于 Ki,0 i n。 在子树 An 中所有的关键码都大于Kn; 在子树 A0 中的所有关键码都小于 K1。 子树 Ai 也是 m 路查找树,0 ? i ? n。 B-树 一棵 m 阶B-树是一棵 m 路查找树,它或者是空树,或者是满足下列性质的树: 树中每个结点至多有m棵子树; 根结点至少有 2 棵子树; 除根结点以外的所有非终端结点至少有 ?m/2? 棵子树; 所有非终端结点中包含下列信息数据 ( n, A0 , K1 , A1 , K2 , A2 , … , Kn , An ),其中: Ki (i=1,…,n)为关键字,且Ki Ki+1 , Ai (i=0,…,n)为指向子树根结点的指针, n为关键字的个数 所有的叶子结点(失败结点)都位于同一层。 事实上,每个结点中还应包含指向每个关键字的记录的指针。 B-树的查找算法 B-树的查找过程是一个顺指针查找结点和在结点的关键字进行查找交叉进行的过程。因此,B-树的查找时间与B-树的阶数m和B-树的高度h直接有关,必须加以权衡。 在B-树上进行查找,查找成功所需的时间取决于关键码所在的层次,查找不成功所需的时间取决于树的高度。如果我们定义B-树的高度h 为失败结点所在的层次,需要了解树的高度h 与树中的关键码个数 N 之间的关系。 高度h与关键码个数 N 之间的关系 设在 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-树的插入 B-树是从空树起,逐个插入关键码而生成的。 在B-树,每个非失败结点的关键码个数都在 [ ?m/2? -1, m-1] 之间。 插入在某个叶结点开始。如果在关键码插入后结点中的关键码个数超出了上界 m-1,则结点需要“分裂”,否则可以直接插入。 实现结点“分裂”的原则是

文档评论(0)

文档精品 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档