B 树

1.目的:B树是一种平衡二叉树,意在降低磁盘I/O操作,提高磁盘读取速度,目前大多数数据库和文件索引都是由B树实现的。

 基本特性:

(1)B树可以有许多个子女,分支因子可能很大,这一因子是由磁盘特性决定的。

(2)含有n个节点的B树高O(logn),但可能比红黑树的高度小很多,因为它的分支因子大

(3)B树的内节点 x 包含 n个关键字,那么 x 有 n+1个子女

《B 树》

这是个典型的b树结构,初始因子为1000,高度仅为3的b树,就可以存储1002001000的数据了。假设要查询最后一个数据:

  • 从硬盘加载根节点搜索,IO一次。
  • 根据根节点的指针信息,去加载第二层的节点, IO一次。
  • 重复2,IO一次。
  • IO只用了3次,就查询了需要的数据,所以说B树效率是非常高的。

B树的节点,在硬盘里表现为:柱面里的页(page)或盘块(block) ,如果把索引持久化到内存,只需要一次就够了。

2.B树的特性:

(1)每个节点x 有以下域:n个关键字 则 节点有n+1个子女;关键字按照非降序排列

(2)每个叶子有相同的深度即树的高度

(3)每个节点包含的关键字树有上界和下界,B的最小度数 t 表示关键字数目的界限 t-1<=n<=2t-1

(4)一个节点包含2t-1个关键字 那么它是满的

高度 h<=log((n+1)/2) 

3.B树和红黑树

虽然二者的高度都是以O(logn)增长的但是B树是以t为底的对数,t往往可以>2 ,所以对大多数操作来说 要查找的节点数在B树种要比在红黑树中少大约logt的因子。因为在B树中查找任意一个节点通常需要一次磁盘存取,所以磁盘的存取的次数大大降低了

4.搜索B树

相对于二叉树的两路分支搜索,B树是多路分支搜索,每个节点要做n+1次搜索,在搜索过程中先找到满足条件的最小下标 while i<=n && k>key  do i++(x节点处)

如果值相等就找到了;如果x为叶子则结束返回NIL; 否则磁盘读取x的n+1个子女 递归查找

5.B树插入

(1)将一个新的节点插入到一个已经存在的叶节点上

(2)将一个满的节点y 插入时,将其分裂成两个 包含t-1的关键字的节点,中间关键字被提升为y 的父亲

(3)当沿着树往下查找新关键字的时候,遇到满的节点就分裂,因此,当要分裂最后一个关键点y时,就能确保他的父亲不是满的

(4)分裂后输的高度会变化,+1, B树长高的唯一途径就是分裂

(5)与二叉查找树不同,B树的高度增加实在顶部而不是底部发生的,想想分裂就明白了

6.B树删除

对节点x 递归调用删除函数时,要保证x出的关键字个数最小等于度数 即 t<=n<=2t-1

当节点x出的关键字删除后不满足 n>=t,则中间节点要下降

    原文作者:B树
    原文地址: https://blog.csdn.net/u012813201/article/details/62247064
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞