总结自《算法导论》
- 一、数据结构定义
- 二、操作
- 1、查找
- 2、插入
- 3、删除
一、B树是针对磁盘存储而设计的一种数据结构,在B树种一个node的大小一般就是一个磁盘页的大小,所以非常便于IO操作。
针对某个特定的B树都会定义一个t值,表示的意思是:除了根节点之外的内部节点最多有2*t个孩子,最少有t个孩子,相应的指针的数量为:2*t-1和t-1
任意叶子节点的高度是一样的
二、操作
1、查找
2、插入
一定会插入到叶子上。
从根节点依次往下递归,如果遇到一个满的节点,就将其分裂,从而保证在插入位置的node的父节点都不是慢的,便于后面的调整。
3、删除
3.1和插入类似也是从上往下的递归过程。在没有查到目标节点之前,如果当前node有t-1节点
3.1.1 如果node的某个兄弟节点有至少t个孩子,则进行平移一下
3.1.2 否则node和任意一个兄弟合并
3.2在到达关键字k
3.2.1叶子:直接删除
3.2.2 内部
若被删除的节点的某个孩子系欸但有至少t个孩子,则从那边借一个,取代被删除的节点
否则两个孩子合并,算法结束。
B+树相对于B树,为什么更加适合数据库和操作系统的文件系统?
答:主要有两个优点:
1、B+树的内部节点,并没有指向具体数据的指针,node更小,因此一个磁盘块能够容纳的关键字的个数也就越多,通过一次IO操作读入的关键字的个数也就越多,从而减少IO操作的次数
2、B+树由于内部节点不存储数据,因此每次查询都要查找到叶子节点,因此查询更加稳定一些。
[2] http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html