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+树、B*树

    B-树 B+树 B*树

  • 聊一聊B+树

    标签: 图解B+树 | B+树代码|mysql 聚集索引|mysql B+树索引| 前言   虽然B+是B-演化过...

  • 如何手写b-树,b+树建立过程?

    要想手写b-树和b+树的建立过程,就得清楚b-树和b+树性质性质不清楚的人请看文章最后,我们现在先开始建树吧。 b...

  • B+树

    B+树是基于B-树的一种变体,有着比B-树更高的查询性能。一个m阶的B+树具有如下几个特征: 有k个子树的中间节点...

  • B树B-树和B+树的总结

    参考:B树和B+树的总结B树、B-树、B+树、B*树都是什么 总结 利用平衡树的优势加快查询的稳定性和速度;B+树...

  • 树-二叉搜索树-平衡二叉树-红黑树-B树B+树

    关于树的总结从二叉树->二叉搜索树->平衡二叉树->红黑树->B树与B+树 B+树介绍 B树、B-树、B+树、B*...

  • B-树/B+树

    B-树(Balance树)和B+树应用与数据库索引,是m叉的多路平衡查找树。 1. 性质分析 1.1 M阶B-树 ...

  • MySQL为什么使用B+树而不是B-树?

    B-树、B+树、红黑树都是平衡查找树,从查询效率上讲,平均都是O(log n)。 但为什么MySQL使用B+树,而...

  • Mysql InnoDB B+树索引和哈希索引的区别?Mongo

    Mysql InnoDB B+树索引和哈希索引的区别?MongoDB 为什么使用B-树?

  • 数据结构之BBST

    目录: 1.B-树与B+树2.红黑树 文章参考: 关于B-tree的科普文,很有趣什么是B-树? 关于B+树的科普...

网友评论

      本文标题:B-/B+树

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