BST,B-树(B树),B+树,B*树简介

B, B-, B+树的定义,特性,联系与区别(红黑树) B树的不同定义,有时B树即是B-树 为什么会有B树: 因为二叉树的查找平均时间是logN,是与二叉树的深度有关,所以为了减少二叉树的深度,增加查找速度,势必要增加树的叉树。如果该树是M叉的,M>2的话,logm(N)势必要小于log2(N),所以当数据量非常大的时候,B树的平均查找时间要少于二叉树。 红黑树:带有平衡性的二叉搜索树增强版 红黑树是每个节点都带有颜色属性的二叉查找树,颜色... 阅读详情

BST

       即二叉搜索树,二叉排序树,二叉查找树:

       1.所有非叶子结点至多拥有两个儿子(Left和Right);

       2.所有结点存储一个关键字;

       3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;

       如:

       

       B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;

否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入

右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;

       如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树

的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构

(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;

       如:

      

   但B树在经过多次插入与删除后,有可能导致不同的结构:

   右边也是一个B树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的

树结构索引;所以,使用B树还要考虑尽可能让B树保持左图的结构,和避免右图的结构,也就

是所谓的“平衡”问题;      

       实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树

结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在B树中插入和删除结点的

策略;

 

 

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];且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-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果

命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为

空,或已经是叶子结点;

B-树的特性:

       1.关键字集合分布在整颗树中;

       2.任何一个关键字出现且只出现在一个结点中;

       3.搜索有可能在非叶子结点结束;

       4.其搜索性能等价于在关键字全集内做一次二分查找;

       5.自动层次控制;

       由于限制了除根结点以外的非叶子结点,至少含有M/2个儿子,确保了结点的至少

利用率,其最底搜索性能为:

    

       其中,M为设定的非叶子结点最多子树个数,N为关键字总数;

       所以B-树的性能总是等价于二分查找(与M值无关),也就没有B树平衡的问题;

       由于M/2的限制,在插入结点时,如果结点已满,需要将结点分裂为两个各占

M/2的结点;删除结点时,需将两个不足M/2的兄弟结点合并;

 

 

B+树

       B+树是B-树的变体,也是一种多路搜索树:

       1.其定义基本与B-树同,除了:

       2.非叶子结点的子树指针与关键字个数相同;

       3.非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树

(B-树是开区间);

       5.为所有叶子结点增加一个链指针;

       6.所有关键字都在叶子结点出现;

       如:(M=3)

   B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在

非叶子结点命中),其性能也等价于在关键字全集做一次二分查找;

       B+的特性:

       1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好

是有序的;

       2.不可能在非叶子结点命中;

       3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储

(关键字)数据的数据层;

       4.更适合文件索引系统;

  

B*树

       是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针;

   B*树定义了非叶子结点关键字个数至少为(2/3)*M,即块的最低使用率为2/3

(代替B+树的1/2);

       B+树的分裂:当一个结点满时,分配一个新的结点,并将原结点中1/2的数据

复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父

结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针;

       B*树的分裂:当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分

数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字

(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之

间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针;

       所以,B*树分配新结点的概率比B+树要低,空间使用率更高;

  

小结

       B树:二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于

走右结点;

       B-树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键

字范围的子结点;

       所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;

       B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点

中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;

       B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率

从1/2提高到2/3;

为什么 MongoDB 索引选择B树,而 Mysql 选择B+树 前言 之前有人看了我的博客提出了这个问题,我懒省事让他自行百度,今天发现网上的答案很多,但是很啰嗦或者让人看不懂,所以就写下了这篇文章 一、B树和B+树的区别 很明显,我们要想弄清楚原因就要知道B树和B+树的区别。为了不长篇大论。我们直接给出他们的形式总结他们的特点。 1、B树 B树是一种自平衡的搜索树,形式很简单: 这就是一颗B树。针对我们这个问题的最核心的特点如下: (1)多路,非二叉树 (... 阅读详情

相关推荐

2020数据结构-查找之B树和B+树

一、B树和B+树 1.B树 应用场景 查找磁盘中地海量数据。 基本思想 1.若根结点不是终端结点,则至少有2棵子树。 2.除根节点以外的所有非叶结点至少有 M/2 棵子树,至多有 M 个子树(关键字数为M-1)。 3.所有的叶子结点都位于同一层。 与平衡二叉树的对比 (图片来自网络,侵删) B 树的每个节点可以表示的信息更多,因此整个树更加“矮胖”,这在从磁盘中查找数据(先读取到内存...

菜鸟算法 548

B-、B+树的区别

mysql

songtaiwu的博客 5575

BST,AVL树,红黑树,B树,B+树,B*树(从map的底层实现到mysql索引原理)

本文不会对具体细节过多的探究,力求得到这几种树的联系以及区别,实际运用。 BST(二叉检索树): 二叉检索树也是我们最熟悉的一个索引方式了,它保证所有节点的左子树都小于该节点,所有节点的右子树都大于该节点。就可以通过大小比较关系来进行快速的检索,在一棵满二叉平衡树的情况下,检索的效率可以达到logn(类似二分检索),然后插入和删除的效率也是稳定的logn。 还是上一张图吧: BST可以...

写代码的柯长的博客 2491

B-树、B树与B+树数据结构之间的区别

B-树、B树和B+树是常见且广泛应用的数据结构,用于高效地管理和检索大量数据,是在mysql数据库内部使用的索引结构,用于加快数据的访问速度和查询效率,也是mysql调优必须会的知识。虽然它们在某些方面相似,但它们在结构和应用上有一些重要的区别。

weixin_68919851的博客 7630

B树(也叫B-树)、B+树、B*树

0. 简介 在此声明,B-Tree最正确的翻译应该为B树,而不是B-树,也即并没有B-树的说法,二叉树叫Binary Tree,二叉搜索树叫Binary Search Tree(BST)B树叫Balance Tree,简写为B-Tree (注意是这两个单词连起来的意思,不是减号),B+树是B+ Tree。 1. BST(Binary Search Tree,即二叉搜索树,并不是B树) ...

吹雪的专栏 2094

MS建模mmt

一、流程:1.定义好每个原子力场类型:Edit Sets(分组) 2.加H(一般是仅与Al-O八面体中的Al相连的O原子)、给H分组 3.“make P1”、校核化学式(正确与否) 4.扩成超晶胞(Na-mmt:4*1*1,Ca-mmt:4*2*1,illite:2*1*1,由化学式而定) 5.置换阳离子: mmt:模型中每 32 个 Si 4+有 1 个被 Al 3+ 取...

weixin_30721899的博客 2167

二叉树,平衡二叉树,红黑树,B-树、B+树、B*树的区别

二叉查找/搜索/排序树  BST  (binary search/sort tree) 或者是一棵空树; 或者是具有下列性质的二叉树: (1)若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值; (2)若它的右子树上所有结点的值均大于它的根节点的值; (3)它的左、右子树也分别为二叉排序树。 注意:对二叉查找树进行中序遍历,得到有序集合。 平衡二叉树(Self-balancing b...

wyqwilliam的博客 6万+

Veritas NetBackup 10.1 Windows安装指南:从账户配置到完整部署

本文详细介绍了Veritas NetBackup 10.1在Windows系统上的完整安装流程,从账户配置到部署验证。重点讲解了创建专用服务账户、安装组件选择、许可证输入等关键步骤,并提供了常见问题排查和进阶配置建议,帮助用户顺利完成企业级备份解决方案的部署。

weixin_26765287的博客 445

B树、B-树、B+树与红黑树

参考二叉查找树(BST):二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; (4)没有键值相等的节点(因此,插入的时候一定是叶子节点)。插入有序节点,退化成单支树 1.查找效率最好O(logn),最坏O(n)

wwhhff11 2万+

JAVA实战:通过营地号解析王者荣耀用户数据(战绩、英雄、皮肤全掌握)

本文详细介绍了如何使用JAVA通过营地号解析王者荣耀用户数据,包括战绩、英雄和皮肤信息。通过HttpClient发送请求并解析JSON数据,开发者可以获取玩家对局详情、英雄使用情况和皮肤偏好等关键指标,为游戏数据分析提供实用解决方案。

sun99的博客 837

告别调参玄学:用 DINOv2 (ViT-S/ViT-G) 和 PCA 可视化,直观理解自监督特征

本文深入解析了DINOv2(ViT-S/ViT-G)模型在自监督学习中的特征提取机制,通过PCA降维技术实现特征空间的可视化。文章对比了不同规模模型的特征表达差异,并提供了PCA阈值调优和深度分析的实用技巧,帮助读者直观理解自监督学习的视觉密码。

weixin_42565865的博客 406

数据结构(三)、B树,B+树,B*树

动态查找树主要有:二叉查找树,平衡二叉树,红黑树,B-tree/B+-tree/B*-tree。前三个都是典型的二叉树结构,查找的时间复杂度O(log2N)和树的深度相关,随着树的深度降低会提高查找效率。而在现实情况中大部分数据存储在磁盘中,对于数据量比较大的情况下,对导致二叉树结构的深度也随之变大造成磁盘IO读写频繁导致查询效率低下,因此大部分关系型数据库都使用本篇要介绍的B+Tree结构,要理解B+树,需要先理解B树,本篇也会一起介绍B*树。

王义凯 的博客 4139

角谱迭代与傅里叶变换迭代算法(GS)的原理及其实例演示分析

角谱迭代与傅里叶变换迭代算法(GS)的原理及其实例演示分析 目前,迭代法和强度传输方程(TIE)法是两类典型的非干涉相位检索技术(Phase Retrieval,被称为相位恢复、相位检索、相位反演法、相位复原等)。迭代法中的经典算法是Gerchberg-Saxton(GS),随后,出现了包括错误减少算法(ER)、混合输入输出法(HIO)、梯度搜索算法、角谱迭代算法等改进算法。...

简单光学 2万+

BST树、RBT树、AVL树、B树、B+树、B*树

BST树        即二叉搜索树:        1.所有非叶子结点至多拥有两个儿子(Left和Right);   &nb...

Lei_Da_Gou的博客 525

安全监控:人员行为分析_(2).人员行为分析基础理论

人员行为分析是指利用计算机视觉技术对视频中的人类行为进行实时或离线检测、识别和理解的过程。视频采集:通过摄像头等设备获取视频数据。视频预处理:对视频数据进行噪声过滤、图像增强等处理,以便后续分析。特征提取:从视频中提取出与人员行为相关的特征,如人体姿势、动作轨迹等。行为识别:利用机器学习或深度学习模型对提取的特征进行分类,识别出具体的人员行为。行为理解:对识别出的行为进行进一步分析,理解其背后的意图或状态。在人员行为分析中,常用的公开数据集包括UCF101、HMDB51、ActivityNet等。

zhubeibei168的博客 1337

AUTOSAR进阶图解==>AUTOSAR_SWS_BSWGeneral

本文详细解析AUTOSAR基础软件(BSW)模块的通用规范,涵盖其分层架构、配置管理、初始化流程和状态转换机制。AUTOSAR采用清晰的分层设计,包括应用层、服务层、ECU抽象层和微控制器抽象层,各层模块通过标准化接口交互。BSW模块配置采用类型化定义,支持预初始化、初始化和后期构建配置。文档还阐述了模块初始化流程中的依赖管理,以及运行时的状态转换与错误处理机制,为汽车电子控制单元的标准化开发提供规范指导。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1119

浅析——B树,B+树,B*树以及分析MySQL的两种引擎

接触到了数据结构当中的B树,B+树,B*树,我觉得应该写一篇博客记录下,毕竟是第一次接触的,只有写了博客以后,感觉对这个的印象才会更加深刻。 前言: 为什么要有B树? 学习任何一个东西我们都要知道为什么要有它,B树也一样,既然存储数据,我们为什么不用红黑树呢?这个要从几个方面来说了, 计算机有一个局部性原理,就是说,当一个数据被用到时,其附近的数据也通常会马上被使用。 所以当你用红黑树的时

宇哲 1万+

Android 14.0 开机广播接收慢广播延迟问题分析

在14.0的系统rom定制化开发中,在某些时候在接收开机广播的时候发现,过了一分钟才收到开机广播,接下来就需要分析下 开机广播的相关分发机制,来处理下相关问题

安卓兼职framework和app工程师的博客 625

二叉树、平衡二叉树、红黑树、B-树、B+树、B*树、T树之间的详解和比较

====================================================|| 欢迎讨论技术的可以相互加微信:windgs (请备注csdn+xx职业) ====================================================|| 一、二叉树-BST (binary search/sort tree) 二叉树又名二叉查找/搜索...

随意的风的专栏 6931

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

BST、AVL、B树、B+树、B*树

BST,二叉搜索树,极端情况变成了链表 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; AVL,平衡二叉树 定义:平衡二叉树或为空树,或为如下性质的二叉排序树: (1)左右子树深度之差的绝对值不超过1; (2)左...

redfivehit的专栏 283

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

数据结构之BST、AVL、红黑树、哈夫曼树与B族树

二叉搜索树(BST):以简洁的二分法则奠定数据检索基石,却暗藏退化成链表的隐患; AVL树:通过高度平衡的旋转策略,首次将自平衡理念引入二叉树; 红黑树:以巧妙的颜色标记和近似平衡,成为Java HashMap、C++ STL的幕后英雄; 哈夫曼树:用贪心算法重构最优权重路径,构建无损压缩的核心骨架; B族树(B/B+/B*):突破内存限制,用多路平衡与磁盘页管理重塑数据库索引引擎。

慢慢记录,慢慢更新。 1036

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

浅析二叉树、B树、B+树、B*树和MySQL索引底层原理

介绍二叉树、AVL树、红黑树、B树、B+树和B\*树等六种树的数据结构后,浅析MySQL InnoDB索引选择B+树的原因,并给出一些MySQL 索引高频面试题。

a0b79的博客 1060

BST树,AVL树, B树, B-树, B+树, B*树,红黑树RBT, 堆积树(堆), 字典树Trie,跳表

https://blog.csdn.net/Beyond_2016/article/details/81202511 https://www.cnblogs.com/leng2052/p/5323954.html https://www.cnblogs.com/lca1826/p/6484469.html 1. 二叉查找树 (Binary Search Tree) 很显然,二叉查找树的发现完全是...

feiyan的博客 284

数据结构—B树、B+树、B*树

数据结构—B树、B+树、B*树 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 多叉树 多叉树(multiway tree)允许每个节点可以有更多的数据项和更多的子节点 多叉树通过重新组织节点,减少树的高度,能对二叉树进行优化 文件系统及数据库系统的设计者利用了磁盘预读原理,将一个节点的大小设为等于一个页(页得大小通常为4k),这样每个节点只需要一次I/O就可以完全载入 2-3树 2-3树的所有叶子节点都在同一层.(只要是B树

归子莫的博客 1297

(转)常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)...

原文地址:http://blog.csdn.net/sup_heaven/article/details/39313731 BST树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; ...

a631278993的博客 231

多叉树、多路查找树、B树、B+树、B*树介绍

What 在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(multiway tree) 后面会讲到2-3树(如图2)、2-3-4树、B树、B+树,他们都是多叉树 图1.二叉树 图2.多叉树(2-3树) Why 二叉树的操作效率较高,但是也存在问题 由于构建二叉树时需要把数据从某个地方(数...

c梦的博客 2772
上一篇: 九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)
下一篇: spring ioc原理(看完后大家可以自己写一个spring)
弥树
博客等级 码龄16年 2粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值