B树

## 定义 ##

任何和关键字相联系的“卫星数据”将与关键字一样存放在同一个节点中。

## 性质 ##

这里写图片描述
这里写图片描述
## B树的高度 ##
B树上大部分的操作所需的磁盘存取次数与B树高度成正比。
这里写图片描述
## B树上的基本操作 ##

搜索B树

B-TREE-SEARCH(x,k)
{
int i=1;
while(i<=x.n&&k>x.keyi)
i=i+1;
if(i<=x.n&&k==x.key)
{
return (x,i);
}
else
if(x.leaf)
{
return NULL;
}
esle
{
DISK-READ(x,c);
}

return B-TREE-SEARCH(X.Ci,K);
}

这里写图片描述
这里写图片描述

## 创建一个空的B树 ##

为构造一个B树T,先用G-TREE-CREATE来创建一个空的根节点,然后调用B-TREE-INSERT来添加新的关键字。然而这些过程都要用到一个辅助过程ALLOCATE-NODE,它在O(1)时间内为一个新节点分配一个磁盘页。我们假定由ALLOCATE-NODE所创建的节点并不需要DISK-READ,因为磁盘上还没有关于该节点的有用信息。

这里写图片描述

## 向B树中插入一个关键字 ##

在B树中我们不能简单地创建一个新的页节点,然后将其插入,因为这样的得到的不再是合法的B树,相反,我们是将新的关键字插入已经存在的页节点上。由于不能将关键字插入一个满的叶节点,故引入一个操作,见一个满的节点Y (有2*T-1个关键字)按其中间关键字Y.key分裂为各含T-1个关键字的节点。中间关键字被提升到Y的父节点,以标识两棵新树划分点。但是如果Y的父节点也是满的,就必须在插入新的关键字之前将其分裂,最终满节点的分裂会沿着树向上传播。

## 分裂B树的节点 ##

这里写图片描述

这里写图片描述

## 伪代码解释 ##

B-TREE-SPLIT-CHILD以直接的“剪贴”方式工作,这里X是被分裂的节点,Y是X的第i个孩子,开始时,节点Y有2T个孩子(2T-1个关键字),再分裂后减少至T个孩子(t-1个关键字),并且Z成为X的新孩子,它在X的孩子表中仅仅位于Y之后。Y的关键字上升到X中,他成为分割Y和Z的关键字。
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值