B树与B+树

来源:互联网 发布:sql查询不重复的记录 编辑:程序博客网 时间:2024/05/22 10:48

(一)B树


1.1 定义

B树又称为平衡多路查找树,相比于AVL树(平衡二叉树),B树的最大的特点就是节点内部有多个关键字以及有多个子节点。典型的B树如下图所示:

B树结构

B树的阶数描述了每一个节点子节点的个数(上图为3阶B树)。图中“磁盘块I”是根节点,内部存储17和35两个关键字,有三个子节点。需要注意的是,最下方的“磁盘块5~11”叶子节点,他们的子节点,也就是空节点,代表着一次失败的搜索。

一个m阶B树需要满足下列条件

  • 所有节点至少有2个子节点;除根结点和叶子节点之外,所有节点最多有m个子节点
  • 除根节点之外的所有节点至少有ceil(m/2)个子女
  • 所有子节点位于同一层(同一高度,根节点高度为1)
  • 非叶子节点若有n个子节点,那么他的关键字必须有n-1个,且按照升序排列
  • 非叶子节点X的第i个子节点Y的关键字ki,需要满足Ki1<ki<Ki。其中Ki是X节点的第i个关键字,若i10Ki1=inf

1.2 搜索与复杂度

如上图所示,寻找关键字36的过程为:

 ·【磁盘块1】:36>35 -> P3->【磁盘块4】:36<65 -> P1->【磁盘块9】:36=36 -> 成功

B树的搜索复杂度直接取决于其高度和阶数。搜索成功所需要的时间取决于关键字所在的层次,不成功的时间取决于树的高度。

【重要】如果给定总关键字个数N,那么B树的高度h应满足:

2hlogm/2((N+1)/2)+1

1.3 插入与删除

从某个非根结点p开始,执行m阶B树的插入操作:

 -> 节点p中小于m-1个关键码     - 直接插入 -> 节点p中已经有m-1个关键码,当再插入一个关键码后节点的状态为:     (m,P0,K1,P1,...Km,Pm)     - 把节点分裂为两个节点p_和q,它们包含的信息分别为:         { s = ceil(m/2)-1 }         p_ : (s,P0,K1,P1,...,Ks,Ps)         q : (m-s,Ks,Ps,...Km,Pm)     - 新p_节点代替原来的p节点;位于中间的关键码Ks与指向新节点q的指针&q形成一个二元组(Ks,&q),插入到这两节点的父节点中去。

m阶B树的删除操作:

  -> 非叶子节点:删除关键码Ki,用Pi指向的节点中最小的关键码代替之  -> 叶子节点:      - 分为四种情况。详见[B树删除操作](http://blog.csdn.net/qifengzou/article/details/21473739)

(二)B+树


与B树的不同

  1. 所有关键码都存放在叶节点中,上层非叶节点的关键码是其子树中最小/最大关键码的复写。
  2. 也节点包含了全部关键码和指向相应数据记录存放地址的指针,叶节点按照关键码从大到小顺序连接。
原创粉丝点击