B-树 的其他

B-树主要为了在外存上维护大量数据, 减少IO操作.  其中的内存操作与磁盘操作相比可以忽略。 t取值一般较大, 在50-2000之间。

 

相比于一般的二叉树红黑树等, B-树的深度低很多;

 

一般磁盘中的一页或者虚拟内存的一页为整个节点的最大大小。

 

有一点迷惑的是, 如何在B-树中记录磁盘地址呢? 比如某内节点有50个关键字,51个孩子; 孩子地址如何用磁盘地址表述呢?

 

 

 

算法中特别值得注意的一点:

为了防止在满节点上插入,导致分裂; 如果此时父节点也是满的, 需要回溯分裂父节点

为了防止在最低保障的节点上删除, 导致需要合并; 如果此时父节点也是最低保障, 导致父节点也需要回溯的合并

 

为了避免这些情况:

在插入时, 在向下的递归插入路径上, 只要遇到满节点, 就分裂

在删除时, 在向下的递归删除路径上, 只要遇到最低关键字个数保障节点, 就合并。【或者换到其兄弟节点上进行删除; 当自己与兄弟节点都是最低保障时,就合并】

 

 

从算法中可以看出:

节点的插入, 肯定是插入到叶节点中

节点的删除, 也可以认为是在叶节点上删除。 (如果在内节点中找到需要删除的k, 就使用相邻孩子节点的值k' 替换k, 然后递归的在孩子节点中删除k' )

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值