什么是B+树?

机器学习在汽车电子制造缺陷预测中的应用与实践 在工业制造领域,统计过程控制(SPC)和失效模式与后果分析(FMEA)是保障产品质量的核心方法论。其原理是通过监控关键工艺参数和预设潜在故障模式,实现对生产过程的管控。随着汽车电子系统复杂度呈指数级增长,传统方法面临“维度灾难”的严峻挑战——在高维参数空间中,数据稀疏性导致模型失效,难以捕捉多参数交互引发的隐性缺陷。机器学习技术,特别是无监督学习和异常检测,为解决这一难题提供了新路径。它能够从海量制造数据中自动发现未知的关联模式和异常组合,实现从“假设驱动”到“数据驱动”的转变。这种技术价值在于将质量管控从 阅读详情


简介

一个m阶的B+树具有如下几个特征:

  1. 有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点。
  2. 所有的叶子结点中包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。
  3. 所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素。

首先来看看B+树的结构:

img

上面的这颗树中,得出结论:

  • 根节点元素8是子节点2,5,8 的最大元素,也是叶子节点6,8 的最大元素;
  • 根节点元素15是子节点11,15 的最大元素,也是叶子节点13,15 的最大元素;
  • 根节点的最大元素也就是整个B+树的最大元素,以后无论插入删除多少元素,始终要保持最大的元素在根节点当中。
  • 由于父节点的元素都出现在子节点中,因此所有的叶子节点包含了全部元素信息,并且每一个叶子节点都带有指向下一个节点的指针,形成了一个有序链表。

img

卫星数据

指的的是索引元素所指向的数据记录,比如数据库中的某一行,在B-树中,无论中间节点还是叶子节点都带有卫星数据。

B-树中的卫星数据(Satellite Information):

img

B+树中的卫星数据(Satellite Information):

只有叶子节点带有卫星数据,其余中间节点仅仅是索引,没有任何的数据关联。

img

需要补充的是,在数据库的聚集索引(Clustered Index)中,叶子节点直接包含卫星数据。在非聚集索引(NonClustered Index)中,叶子节点带有指向卫星数据的指针。

B+ 树的查询

下面分别通过单行查询和范围查询来做分析:

单行查询

比如我们要查找的元素是3:

B+树会自顶向下逐层查找节点,最终找到匹配的叶子节点。

第一次磁盘IO:

img

第二次磁盘IO:

img

第三次磁盘IO:

img

B+树查询与B-数据对比

  • B+树的中间节点没有卫星数据,所以同样大小的磁盘可以容纳更多的节点元素;
  • 在数据量相同的情况下,B+树的结构比B-树更加“矮胖”,因此查询的IO次数也更少;
  • B+树的查询必须最终查找到叶子节点,而B-树只要查找匹配的元素即可,无论匹配的元素处于中间节点还是叶子节点。
  • B-树的查找性能并不稳定(最好情况只查询根节点,最坏情况是查找叶子节点)。而B+树的每一次查找都是稳定的。

范围查询

比如我们要查询3到11的范围数据:

B-树的范围查询过程

自顶向下,查找到范围的下限(3):

img

中序遍历到元素6:

img

中序遍历到元素8:

img

中序遍历到元素9:

img

中序遍历到元素11,遍历结束:

img

B+树的范围查找过程

自顶向下,查找到范围的下限(3):

img

通过链表指针,遍历到元素6, 8:

img

img

总结

B+树比B-树的优势三个:

  1. 单一节点存储更多的元素,使得查询的IO次数更少。
  2. 所有查询都要查找到叶子节点,查询性能稳定。
  3. 所有叶子节点形成有序链表,便于范围查询。
数据结构 B树系列 每个节点最多有m个子节点,其中m是一个正整数。根节点除外,其他节点至少有⌈m/2⌉个子节点。每个节点中的键值按照非降序排列。对于节点中的键值k,如果有n个子节点,那么节点中的n-1个键值将把节点分为n个区间,第i个区间的键值小于k,第i+1个区间的键值大于等于k。所有叶子节点位于同一层,且不包含任何键值信息,可以看作是外部存储的块。每个非叶子节点中的键值个数比子节点个数少1。每个节点中的键值个数满足:⌈m/2⌉-1 阅读详情

相关推荐

关于B+树的介绍

本文系统介绍了B+树的数据结构及其特性。B+树是一种平衡多叉搜索树,其节点最多包含m个子节点(m为阶数),属于N叉树的一种。与B树不同,B+树的所有数据都存储在叶子节点,且叶子节点通过指针连接形成有序链表。文章详细阐述了B+树的节点结构、N叉特性、与B树的区别,并通过示例演示了查找和插入元素的过程。作为数据库索引的核心结构,B+树通过多路分支降低树高,提高磁盘IO效率,使其成为MySQL InnoDB等存储引擎的理想选择。

weixin_50055999的博客 1438

数据结构——B+树

B+树

weixin_52821814的博客 3万+

ThinkAdmin后台Getshell

通过文件包含或者图片马的方式Getshell。修改其可允许的文件类型,php不允许,可添加。系统管理->系统参数配置->本地服务器存储。

hot_milk1的博客 1857

经典树结构——B+树的原理及实现

文章目录B+树的概念B+树实现B+树节点参数B+树插入实现B+树删除实现 B+树的概念 规则: B+跟B树不同B+树的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+树每个非叶子节点所能保存的关键字大大增加 B+树叶子节点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子节点才能获取到。所以每次数据查询的次数都一样 B+树叶子节点的关键字从小到大有序排列,左边结尾数据都会保存右边节点开始数据的指针 非叶子节点的子节点数=关键字数(来源百度百科)(Mysql 的B+树) B+树相比

c630843901的博客 5万+

OpenTCS打造移动机器人交通管制系统(四)

先分析下OpenTCS的一些策略方面的东西,这是OpenTCS的基础。 首先需要先明确下OpenTCS内核中的三个概念: 路由(Route) : 决定了车辆通过什么样的方式和算法来获得一段路径,未来车辆将沿着此路径运行。 派遣(Dispacher): 决定了一个订单应该关联哪一辆小车,即为订单分配车辆和为车辆分配订单。 调度(schedule):狭义上的调度,交通管制的核心,决定了何时分配...

白色冰激凌的技术专栏 5265

C#粘包和分包问题及解决方法

一:通过图解法来描述一下分包和粘包,这样客户更清晰直观的了解:  下面对上面的图进行解释:  1.正常情况:如果Socket Client 发送的数据包,在Socket Server端也是一个一个完整接收的,那个就不会出现粘包和分包情况,数据正常读取。  2.粘包情况:Socket Client发送的数据包,在客户端发送和服务器接收的情况下都有可能发送,因为客户端发送的数据都是发送的一个缓冲...

weixin_42033401的博客 7756

什么是B-树?

一、什么是B-树? Mysql数据库用过了吧? 里面的【索引】是基于什么【数据结构】? 索引主要是基于【Hash表】或者【B+树】 要弄明白B+树,先要了解什么是B-树。 B-树就是【B树】,中间的横线并不是减号。 二、为什么数据库【索引】要使用【树】结构存储呢...

qq_24047659的博客 8478

Fedproto:原型聚合的联邦学习框架

文中说明,联邦学习通过计算传递梯度聚合模型时,客户端之间的异构性通常会阻碍模型优化收敛和泛化性能。故本文提出新的FedProto框架,将梯度替换成为原型,通过计算、聚合从不同客户端收集到的本地原型,然后将全局原型发送回所有客户端,以规范本地模型的训练。对每个客户机进行局部训练的目的是最小化对本地数据的分类损失,同时保持生成的本地原型足够接近相应的全局原型(损失函数最小+正则)。什么是原型?文中提到:“

weixin_47754029的博客 2644

什么是B+树?

  B+树是为磁盘或其他直接存取的辅助存储设备而设计的一种平衡搜索树,很多朋友还不理解什么是B+树,下面就来为大家分享一下B+树到底怎么理解。 概念  B+树是B树的一个升级版,相对于B树来说B+树更充分的利用了节点的空间,让查询速度更加稳定,其速度完全接近于二分法查找。 规则  (1)B+跟B树不同B+树的非叶子节点不保存关键字记录的指针,只进行数据索引,这样使得B+树每个非叶子节点所能保存的关键字大大增加;  (2)B+树叶子节点保存了父节点的所有关键字记录的指针,所有数据地址必须要到叶子节点才能获取到

m0_56500170的博客 1695

虚拟机ubuntu22.04.3中安装vitis2024.1注意事项

虚拟机ubuntu安装vitis2024.1

qq_52033578的博客 2486

不止于连接:用VS Code Remote-SSH深度开发树莓派(Ubuntu 22.04环境实战)

本文详细介绍了如何在Ubuntu 22.04环境下使用VS Code的Remote-SSH功能进行树莓派深度开发。通过SSH配置、VS Code扩展安装和远程环境优化,开发者可以在本地高效编写代码,同时在树莓派上直接运行和测试,解决性能瓶颈问题。文章还提供了高级功能如端口转发、多项目管理和远程调试的实战技巧。

didui8202的博客 350

为什么是B+树?

我们都知道在查询数据时为了避免全表扫描我们会加上索引,这样会极大的减少遍历次数,从而增加查询的效率。而索引本质是一种优化查询的数据结构。MySQL默认的索引数据结构为B+树。 有的张三可能就会问了,MySQL为什么要用B+树来作为默认的索引数据结构呢?为什么不能是hash,况且有那么多树结构,为什么偏偏选择B+树? 这个疑问我当然也有,在查阅一番资料后,且听我一一道来。 一、hash结构 加速查询速度的数据结构通常见有两种: hash:hash是非常常见的数据类型,如hashMap就是通过对key做has

qq_40445523的博客 631

Android 系统状态栏中实现高斯模糊背景

至此,我们已经完成了在 Android 系统的 SystemUI 中实现高斯模糊背景的过程。通过以上的布局和代码修改,我们可以在状态栏中看到具有高斯模糊效果的背景。同时,为了在不同版本的 Android 系统上适配高斯模糊效果,可能需要进行一些额外的代码调整和兼容性处理。希望本文能够帮助你理解如何在 Android 系统的 SystemUI 中实现高斯模糊背景,并通过提供的源代码进行相应的开发和调试。首先,我们需要在 SystemUI 的布局文件中添加一个用于展示高斯模糊背景的视图。属性来开启模糊效果。

CyberSparkZ的博客 862

为什么Mongodb索引用B树,而Mysql用B+树?

引言好久没写文章了,今天回来重操旧业。今天讲的这个主题,是《面试官:谈谈你对mysql索引的认识》,里头提到的一个坑。也就是说,如果面试官问的是,为什么Mysql中Innodb的索引结构...

孤独烟 3988

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

回归预测 | MATLAB实现基于贝叶斯线性回归(Bayesian Regression)的多变量输入回归预测

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 2176

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

散列表?B-树?B+树?原来是这么个玩意

#### 散列表 散列表(也称哈希表)是根据关键码值(Key value)而直接进行访问的数据结构,它让码值经过哈希函数的转换映射到散列表对应的位置上,查找效率非常高。==哈希索引就是基于散列表实现的==,假设我们对名字建立了哈希索引,则查找过程如下图所示: ![image](https://note.youdao.com/yws/public/resource/26db1330a61daba38...

CNYYGJ 748

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

什么是B-树和B+树?

一、B树即B-树 定义:一个m阶(它的每个节点最多包含m个孩子,m就是B树的阶)的B树具有以下特征: 1. 根节点至少含有两个子女。 2. 每个中间节点都包含k-1个元素和k个孩子,其中m/2 <= k <=m。 3. 每个叶子节点都包含k-1个元素,其中m/2 <= k <= m。 4. 所有的叶子节点都位于同一层,叶子节点不包含任何关键信息。 5. 每个节点中的元素从小...

qq_41030039的博客 4640

SAP B1中文培訓教材_SDK

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

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

你管这破玩意叫 B+ 树?

索引可以说是每个工程师的必备技能点,明白索引的原理对于写出高质量的 SQL 至关重要,今天我们就从 0 到 1 来理解下索引的原理,相信大家看完不关对索引还会对 MySQL 中 InnoDB 存储引擎的最小存储单位「页」会有更深刻的认识 从实际需求出发 假设有如下用户表: CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` int(11) DEFAULT NULL COMMENT '姓名',

yoyo31的博客 162

[Mysql]为什么Mysql用的是B+树?

MySQL 为什么选择使用 B+ 树? 1.前言 无论是表中的数据(主键索引)还是辅助索引最终都会使用 B+ 树来存储数据,其中前者在表中会以<id, row>的方式存储,而后者会以<index, id>的方式进行存储 在主键索引中,id是主键,我们能够通过id找到该行的全部列; 在辅助索引中,索引中的几个列构成了键,我们能够通过索引中的列找到id,如果有需要的话,可以再通过id找到当前数据行的全部内容; 2. 有两个方面让InnoDB选...

新一的技术笔记 2841
上一篇: 什么是B-树?
下一篇: Java编码规范介绍
初念初恋
博客等级 码龄7年 5230粉丝 135原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值