- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
B树结构详细讲解
;7、B_ 树和 B+ 树
2、B_ 树是一种多分支数,首先介绍 m 阶 B_ 树:
定义: m 阶 B_ 树满足或空,或:
A、根结点要么是叶子,要么至少有两个儿子
B、除根结点和叶子结点之外,每个结点的儿子个数为: m/2 = s = m
C、有 s 个儿子的非叶结点具有 n = s - 1 个关键字,即: s = n + 1
这些结点的数据信息为:
(n, A0, K1, R1, A1, K2, R2, A2, ……… Kn, Rn, An)
这里:n: 关键字的个数
A0:K1 的结点的地址(指在该 B_ 树中)
K1:关键字
R1:关键字 = K1 的数据记录在硬盘中的地址
A2: K1 且 K2 的结点的地址(指在该 B_ 树中)
余类推 ………
An: Kn 的结点的地址(指在该 B_ 树中)
注意:K1 =K2 = …... = Kn
D、所有的叶子结点都出现在同一层上,不带信息(可认为外部结点或失败结点)。;;7、B_ 树和 B+ 树
3、B_ 树的查找代价分析:
查找过程,类似于二叉树的查找。如查找关键字为 KEY 的记录。
从根开始查找,如果 Ki = KEY 则查找成功,Ri 为关键字为 KEY 的记录的地址。
若 Ki KEY Ki+1; 查找 Ai 指向的结点
若 KEY K1; 查找 A0 指向的结点
若 KEY Kn; 查找 An指向的结点
若 找到叶子,则查找失败。
注意:每次查找将去掉 (s-1)/s 个分支,比二分查找快得多。
设关键字的总数为 N ,求 m阶 B_ 树的最大层次 L。
层次 结点数 关键字的个数(最少)
1 1 1
2 2 2( m/2 -1)
3 2( m/2 ) 2( m/2 ) ( m/2 -1)
4 2( m/2 ) 2 2( m/2 )2 ( m/2 -1)
L 2( m/2 )L-2 2( m/2 )L-2 ( m/2 -1)
L+1 2( m/2 )L-1
所以,N=1+ 2( m/2 -1) +……...+ 2( m/2 )L-2 ( m/2 -1) = 2 m/2 L-1 -1
故:L=log ((N+1)/2)+ 1;;7、B_ 树和 B+ 树;;;B+树; 每个叶结点中的子树棵数 n 可以多于 m,可以少于 m,视关键码字节数及对象地址指针字节数而定。
若设结点可容纳最大关键码数为 m1,则指向对象的地址指针也有 m1 个。
结点中的子树棵数 n 应满足 n ? [?m1/2?, m1]。
若根结点同时又是叶结点,则结点格式同叶结点。
所有的非叶结点可以看成是索引部分,结点中关键码 Ki 与指向子树的指针 Pi 构成对子树 (即下一层索引块) 的索引项 ( Ki, Pi ),Ki 是子树中最小的关键码。; 特别地,子树指针 P0 所指子树上所有关键码均小于 K1。结点格式同B_树。
叶结点中存放的是对实际数据对象的索引。
在B+树中有两个头指针:一个指向B+树的根结点,一个指向关键码最小的叶结点。
可对B+树进行两种搜索运算:;循叶结点链顺序搜索
另一种是从根结点开始,进行自顶向下,直至叶结点的随机搜索。
在B+树上进行随机搜索、插入和删除的过程基本上与B_树类似。只是在搜索过程中,如果非叶结点上的关键码等于给定值,搜索并不停止,而是继续沿右指针向下,一直查到叶结点上的这个关键码。
B+树的搜索分析类似于B_树。
B+树的插入仅在叶结点上进行。每插入一个关键码-指针索引项后都要判断结点中的子树棵数是否超出范围。;当插入后结点中的子树棵数 n m1 时,需要将叶结点分裂为两个结点,它们的关键码分别为 ?(m1+1)/2? 和 ?(m1+1)/2?。并且它们的双亲结点中应同时包含这两个结点的最小关键码和结点地址。此后,问题归于在非叶结点中的插入了。
在非叶结点中关键码的插入与叶结点的插入类似,但非叶结点中的子树棵数的上限为 m,超出这个范围就需要进行结点分裂。
在做根结点分裂时,因为没有双亲结点,就必须创建新的双亲结点,作为树的新根。这样树的高度就增加一层了
文档评论(0)