B-/B+树

作者: 狗尾巴草败了 | 来源:发表于2017-08-20 14:59 被阅读0次

    M为树的阶数,B-树或为空树,否则满足下列条件:
    对于一棵M阶的B-树

    1. 任意非叶子结点最多只有M个儿子;且M>2;
    2. 根结点的儿子数为[2, M];
    3. 除根结点以外的非叶子结点的儿子数为[M/2, M];
    4. 每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字,根节点至少一个关键字);
    5. 非叶子结点的关键字个数=指向儿子的指针个数-1;
    6. 非叶子结点的关键字:K[1], K[2], …, K[m-1],m<M+1;且K[i]< K[i+1] ;
    7. 非叶子结点的指针:P[1], P[2], …, P[m];其中P[1]指向关键字小于K[1]的子树,P[m]指向关键字大于K[m-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树;
    8. 所有叶子结点位于同一层;
      如:(M=3)
      B-树.jpg

    B+树是文件系统所需而出的一种B-树的变型树。一棵m阶的B+树和m阶的B-树的差异在于:

    1. 有k个子结点的结点必然有k个关键码;
    2. 非叶结点仅具有索引作用,和记录有关的信息均存放在叶结点中。
    3. 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。

      通常在B+树上有两个头指针,一个指向根结点,一个指向关键字最小的叶子结点。 B+树

    B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。

    B+ 树的优点在于:

    由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 因此访问叶子节点上关联的数据也具有更好的缓存命中率。
    B+树的叶子结点都是相链的,因此对整棵树只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。

    但是B树也有优点,其优点在于,由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。

    相关文章

      网友评论

          本文标题:B-/B+树

          本文链接:https://www.haomeiwen.com/subject/nkyfdxtx.html