B树和B+树详细解析
维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作。B-tree算法减少定位记录时所经历的中间过程,从而加快存取速度。普遍运用在数据库和文件系统。”
定义
B 树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点。
- 根节点至少有两个子节点
- 每个节点有M-1个key,并且以升序排列
- 位于M-1和M key的子节点的值位于M-1 和M key对应的Value之间
- 其它节点至少有M/2个子节点
下图是一个M=4 阶的B树:
可以看到B树是2-3树的一种扩展,他允许一个节点有多于2个的元素。
B树的插入及平衡化操作和2-3树很相似,这里就不介绍了。下面是往B树中依次插入
6 10 4 14 5 11 15 3 2 12 1 7 8 8 6 3 6 21 5 15 15 6 32 23 45 65 7 8 6 5 4
的演示动画:
B+树是对B树的一种变形树,它与B树的差异在于:
- 有k个子结点的结点必然有k个关键码;
- 非叶结点仅具有索引作用,跟记录有关的信息均存放在叶结点中。
- 树的所有叶结点构成一个有序链表,可以按照关键码排序的次序遍历全部记录。
如下图,是一个B+树:
下图是B+树的插入动画:
B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历。
B+ 树的优点在于:
- 由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。
- B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。
但是B树也有优点,其优点在于,由于B树的每一个节点都包含key和value,因此经常访问的元素可能离根节点更近,因此访问也更迅速。下面是B 树和B+树的区别图:
分析
对B树和B+树的分析和对前面讲解的2-3树的分析类似,
对于一颗节点为N度为M的子树,查找和插入需要logM-1N ~ logM/2N次比较。这个很好证明,对于度为M的B树,每一个节点的子节点个数为M/2 到 M-1之间,所以树的高度在logM-1N至logM/2N之间。
这种效率是很高的,对于N=62*1000000000个节点,如果度为1024,则logM/2N <=4,即在620亿个元素中,如果这棵树的度为1024,则只需要小于4次即可定位到该节点,然后再采用二分查找即可找到要找的值。
B树和B+树详细解析相关推荐
- php tire树,Immutable.js源码之List 类型的详细解析(附示例)
本篇文章给大家带来的内容是关于Immutable.js源码之List 类型的详细解析(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 一.存储图解 我以下面这段代码为例子,画 ...
- 【机器学习】树回归和聚类算法解析和应用
[机器学习]树回归和聚类算法解析和应用 文章目录 1 树回归 2 CART ( Classification And Regression Tree) 分类回归树 3 K-means3.1 合理选择 ...
- 【数据结构】B树和B+树的笔记详细诠释
目录 前言 1. 概念指引 1.1 二叉排序树 1.2 平衡二叉树 2. B树 3. B+树 4. 总结 前言 该笔记取决于 天勤的数据结构笔记 本文主要讲解b树和b+树的概念以及基本的代码逻辑 在讲 ...
- 超级详细树讲解三 —— B树、B+树图解+代码
首先很高兴你看到了这篇文章,这篇文章可能会花费你很长很长的时间去看,但是这篇文章包括的内容绝对足够你对树的一个系统性的学习.为什么要写这篇文字呢?因为自己在学习树的时候,有些博客只有图解,有些博客只有 ...
- 数据结构与算法——24. 树的应用:表达式解析树
文章目录 一.解析树 二.解析树实例:表达式解析 1. 建立表达式解析树 (1)建立表达式解析树的规则 (2)建立表达式解析树的思路 (3)python代码实现 2. 表达式解析树的求值 (1)增加程 ...
- 数据结构与算法(Python版)四十八:树的应用(表达式解析)
树的应用:解析树(语法树) 将树用于表示语言中句子, 可以分析句子的各种语法成分, 对句子的各种成分进行处理 语法分析树主谓宾,定状补 程序设计语言的编译 词法.语法检查从语法树生成目标代码 自然语言 ...
- 洛谷 P3384 【模板】树链剖分-树链剖分(点权)(路径节点更新、路径求和、子树节点更新、子树求和)模板-备注结合一下以前写的题目,懒得写很详细的注释...
P3384 [模板]树链剖分 题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节 ...
- KNN算法与Kd树(转载+代码详细解释)
最近邻法和k-近邻法 下面图片中只有三种豆,有三个豆是未知的种类,如何判定他们的种类? 提供一种思路,即:未知的豆离哪种豆最近就认为未知豆和该豆是同一种类.由此,我们引出最近邻算法的定义:为了判定未知 ...
- Trie树(字典树)详细知识点及其应用
Trie,又经常叫前缀树,字典树等等.它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree.当然很多名字的意义其实有交 ...
最新文章
- Pytest - 使用介绍
- excel表格出问题了
- 运维企业专题(1)HTTP加速器——Varnish缓存机制前篇
- [力扣] 二叉树的层序遍历
- 程序员书单_UML篇
- 【机器学习基础】深入讨论机器学习 8 大回归模型的基本原理以及差异!
- 河马 webshell扫描器对linux服务器进行安全扫描
- 头条限流是什么原因_抖音号被限流是因为什么原因?
- 【转】深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理
- 前馈神经网络_深度学习基础理解:以前馈神经网络为例
- AndroidのTextView之CompoundDrawable那些坑
- linux安装tomcat_Linux云服务器安装jdk、Tomcat、MySQL5.7 - 咸鱼落成
- web页面的回流,认识与避免
- java text类型转换_java语言实现Text格式转换成pdf文件
- Gifxing在线图片无损压缩,gif压缩
- 我奋斗十八年不是为了和你一起喝咖啡
- Oracle 11g Release 1 (11.1) 单行函数——(返回字符值)字符函数
- 阿里云前端周刊 - 第 13 期 1
- QQ欢乐斗地主心得体会 (三):高倍场攻略
- 差分数组分析详解+例题
热门文章
- Django安装(for Mac)
- Codevs 2460 == BZOJ 1036 树的统计
- 搭建Hadoop平台(一)之配置用户名及hosts文件
- (转)OAuth 2.0的设计思路
- IOS端与Java端MD5加密方法
- jQuery中 trigger() 使用心得
- 最近公共祖先LCA 【专题@AbandonZHANG】
- 报表软件公司高价悬赏BUG,100块1个我真是醉了
- 帆软报表插件开发之fine-decision中的EmbedRequestFilterProvider扩展
- java.lang.object源码_第三篇:java.lang.Object 类源码分析