【高阶数据结构】B+树

这篇具有很好参考价值的文章主要介绍了【高阶数据结构】B+树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. B+树的概念

B+树是B树的变形,是在B树基础上优化的多路平衡搜索树,B+树的规则跟B树基本类似,但是又在B树的基础上做了一些改进优化。

一棵m阶的B+树需满足下列条件:

【高阶数据结构】B+树,高阶数据结构(C++),数据结构,b树,b+树,b-树

  1. 每个分支结点最多有m棵子树(孩子结点)。
  2. 非叶根结点至少有两棵子树,其他每个分支结点至少有「m/2]棵子树。
    (前面这两条其实还跟B树是一样的)
  3. 结点的子树个数与关键字个数相等。
  4. 结点的子树指针p[i]指向关键字值大小在[k[i],k[i+1])区间之间
  5. 所有叶子节点增加一个链接指针链接在一起
  6. 所有关键字及其映射数据都在叶子节点出现

大家可以对照着图理解一下这几条性质。

B+树的特性:

1. 所有关键字都出现在叶子节点的链表中,且链表中的元素都是有序的。
2. 查找不可能在分支节点中命中。
3. 分支节点相当于是叶子节点的索引(仅含有其子树根结点中最大/最小关键码,我们这里图中是最小的),叶子节点才是存储数据的数据层(与B树不同)。

2. B+树的查找

B+树的查找上面有提到——查找不可能在分支节点中命中,如果能找到,应该在叶子节点的链表中:

【高阶数据结构】B+树,高阶数据结构(C++),数据结构,b树,b+树,b-树
还是这棵B+树为例,比如我们要查找33
从根结点开始33比5大,往后走,比28也大,再往后走,但是比65小。
所以如果33存在的话,应该在28的子树中。
所以进入28的子树中,然后比较比28大,比35小,所以再往这一层的28的子树p1中找,这就进入到叶子结点的链表中,往后遍历就找到了33。(如果查找的是28也要进入到叶子结点的链表中查找,即使分支结点中存在)
那如果查找34(找不到),也是一样的,最终走到叶子结点的链表中,但是没有这个元素,所以就找不到。

所以B+树的查找无论成功与否,都要走到最下面一层的叶子结点,而B-树的话,查找可能停止在任意一层。

那除了上面的查找方法,其实B+树还有另外一种查找方法:

上面提到对于B+树来说,所有叶子节点增加一个链接指针链接在一起
【高阶数据结构】B+树,高阶数据结构(C++),数据结构,b树,b+树,b-树
而每个叶子结点的链表里面元素都是有序的。
所以我们也可以通过这个链接指针去进行顺序查找,从前往后遍历每一个叶子结点的链表。

3. B-树 VS B+树

【高阶数据结构】B+树,高阶数据结构(C++),数据结构,b树,b+树,b-树
2.
【高阶数据结构】B+树,高阶数据结构(C++),数据结构,b树,b+树,b-树

【高阶数据结构】B+树,高阶数据结构(C++),数据结构,b树,b+树,b-树

B+树分支节点相当于是叶子节点的索引,叶子节点才是存储数据的数据层(与B树不同)。

总结:
【高阶数据结构】B+树,高阶数据结构(C++),数据结构,b树,b+树,b-树

4. B+ 树的插入分析

这里简单画一个3阶B+树插入分裂的过程图,大家可以简单看看了解一下:

【高阶数据结构】B+树,高阶数据结构(C++),数据结构,b树,b+树,b-树文章来源地址https://www.toymoban.com/news/detail-832440.html

到了这里,关于【高阶数据结构】B+树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【高阶数据结构】跳表

    【高阶数据结构】跳表

    skiplist本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树和哈希表的价值是 一样的,可以作为key或者key/value的查找模型。那么相比而言它的优势是什么的呢?这么等我 们学习完它的细节实现,我们再来对比。 skiplist 是由 William Pugh 发明的,最早出现于他在

    2024年02月16日
    浏览(11)
  • 【高阶数据结构】B树

    【高阶数据结构】B树

    种类 数据格式 时间复杂度 顺序查找 无要求 O(N) 二分查找 有序 O(log 2 N ) 二叉搜索树 无要求 O(N) 二叉平衡树(红黑树和AVL树) 无要求 O(log 2 N ) 哈希 无要求 O(1) 以上结构适合用于数据量相对不是很大,能够一次性存放在内存中,进行数据查找的场景 。如果数据量很大,比如有

    2024年02月16日
    浏览(10)
  • 【高阶数据结构】B+树

    【高阶数据结构】B+树

    B+树是B树的变形,是在B树基础上优化的多路平衡搜索树,B+树的规则跟B树基本类似,但是又在B树的基础上做了一些改进优化。 一棵m阶的B+树需满足下列条件: 每个分支结点最多有m棵子树(孩子结点)。 非叶根结点至少有两棵子树,其他每个分支结点至少有「m/2]棵子树。 (前

    2024年02月21日
    浏览(10)
  • 高阶数据结构学习 —— 图(3)

    高阶数据结构学习 —— 图(3)

    先看一下连通图和生成树的概念 连通图。在无向图中,若从顶点v1到顶点v2有路径,则称顶点v1与顶点v2是连通的。如果图中任意一对顶点都是连通的,则称此图为连通图。 生成树:一个连通图的最小连通子图称作该图的生成树。有n个顶点的连通图的生成树有n个顶点和n-1条边

    2024年02月06日
    浏览(8)
  • 【高阶数据结构】哈希表详解

    【高阶数据结构】哈希表详解

    上一篇文章我们学习了STL中unordered系列容器的使用,并且提到,unordered系列容器的效率之所以比较高(尤其是查找),是因为它底层使用了哈希结构,即哈希表。 那这篇文章,我们就来学习一下哈希表 顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,

    2024年02月11日
    浏览(10)
  • 【高阶数据结构】AVL树详解

    【高阶数据结构】AVL树详解

    前面对map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现。 这几个容器有个共同点是: 其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此

    2024年02月12日
    浏览(16)
  • 【高阶数据结构】红黑树详解

    【高阶数据结构】红黑树详解

    这篇文章我们再来学习一种平衡搜索二叉树—— 红黑树 红黑树和AVL树都是常见的自平衡二叉搜索树,它们都可以用于高效地支持插入、删除和查找等操作。虽然它们都能够保持树的平衡性,但在不同的应用场景下,红黑树和AVL树有各自的优势和适用性。 红黑树(Red-Black Tr

    2024年02月12日
    浏览(19)
  • 【高阶数据结构】封装Map和Set

    【高阶数据结构】封装Map和Set

    (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是 Scort 目前状态:大三非科班啃C++中 🌍博客主页:张小姐的猫~江湖背景 快上车🚘,握好方向盘跟我有一起打天下嘞! 送给自己的一句鸡汤🤔: 🔥真正的大师永远怀着一颗学徒的心 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 🎉🎉

    2024年01月20日
    浏览(19)
  • 【高阶数据结构】Map 和 Set(详解)

    【高阶数据结构】Map 和 Set(详解)

    (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是 Scort 目前状态:大三非科班啃C++中 🌍博客主页:张小姐的猫~江湖背景 快上车🚘,握好方向盘跟我有一起打天下嘞! 送给自己的一句鸡汤🤔: 🔥真正的大师永远怀着一颗学徒的心 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏 🎉🎉

    2024年01月23日
    浏览(28)
  • 【高阶数据结构】AVL树详解(图解+代码)

    【高阶数据结构】AVL树详解(图解+代码)

    前面对map/multimap/set/multiset进行了简单的介绍,在其文档介绍中发现。 这几个容器有个共同点是: 其底层都是按照二叉搜索树来实现的,但是二叉搜索树有其自身的缺陷,假如往树中插入的元素有序或者接近有序,二叉搜索树就会退化成单支树,时间复杂度会退化成O(N),因此

    2024年02月13日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包