B-Tree (多路查找树)分析-20230503
B-Tree (多路查找树)学习-20230503
- 前言
B-树是一类多路查询树,它主要用于文件系统和某些数据库的索引,如果采用二叉平衡树访问文件里面的数据,最坏情况下,磁头可能需要进行O(h)次对磁盘的读写,其中h为树的高度;此时如果采用B-树,由于它的多路访问特性可显著降低树的高度,所以对磁盘读写次数将大幅减少。
为了更清楚表述,我们引入经典的二次储存系统,为了增加储存容量,通常由多个磁盘构成,如果可以多路对磁盘进行访问,那么通过一次读取,很快可以定位数据的储存区域。
- B-Tree 的定义
根据《数据结构》(严蔚敏)定义一颗m阶的B-tree,或为空树,或满足下列特性的m叉树,
- 树中每个结点至多有m棵树,它定义节点中包含数据的上限值,此值和每个track的容量相关,由于B-tree的节点即储存键值,又储存子树指针,一般情况下键值会占据大量的数据空间,尤其是键值为结构体数据类型的时候,空间占据会急剧增加,为了应对这类挑战,人们发明了B+tree的数据结构
- 若根节点不是叶子节点,则至少有两棵树。此约束保证了B-tree不会退化为线性表,最坏情况下,允许退化为二叉树,这是最后的底线
- 除根节点之外的非终端节点至少有[m/2]棵子树,其中[m/2]取上限值
- 为了后续的程序操作方便,定义非终端结点包含下列数据信息的数据
( n , A 0 , K 1 , A 1 , K 2 , A 2 , . . . , K n , A n ) ; (n,A_0,K_1,A_1,K_2,A_2,...,K_n,A_n); (n,A0,K1,A1,K2,A2,...,Kn,An);
其中Ki为关键字,且K[i]<K[i+1],并且A[i-1]所指向的节点里面的关键字均小于K[i]关键字,A[i+1]所指向节点里面的关键字均大于K[i],n为关键字的数量([m/2]-1<=n<=m)
- 所有的叶子节点都在同一层次上,并且不带信息
- B-Tree 基本操作
3.1 查询操作
B-Tree树的查询操作与二叉查询树的查询操作类似。它实际上上分为两部分,第一部分需要找到值所在的节点的指针,然后在节点中可以采用顺序表搜索或者折半查找的方式定位待查询的值或者值所在的子树(指针),它是查找节点和在节点中搜索关键字的交叉进行的过程。
具体看一个例子,假定要查找key=99的值,从根节点出发,由于99>35,那么顺着A1指针指向的结点进行搜索,在A1指向的结点中,由于99>78,继续在A2所指的结点中搜索,在A2结点当中恰好K1=99,搜索完毕。
3.2 插入操作
B-Tree的生成是不断通过插入操作实现的,增加B-Tree高度唯一的途径是根节点的分裂,每次根节点分类事件发生,B-Tree的深度就增加1。除此之外,其它的插入也可能差生节点的分裂,但只要根节点不产生分裂,那么B-tree的深度就保持不变。
由于节点内关键字数目的限制,插入操作可能会导致节点分裂,这也导致了插入过程的复杂化。具体而言,插入某个值可以采用两个策略当中的任意一个,策略1 首先在最底层的某个非终端节点条件一个关键字,若该节点的数目不超过m-1,则插入完成,否则要产生节点的分裂,策略1实际上采用的是自下而上的方法,先从根节点出发,找到需要插入节点在最底层非终端节点上位置,然后执行插入,如果必要,则自下而上进行不断分裂。
具体看一个例子。对于m=3阶B-Tree,[m/2]=2。
假定需要依次插入关键字30,26,85和7,首先查找确定关键字应该插入的最底层结点的位置。通过查找得知,30应该插入在结点d所在位置,插入完成后,由于插入后的关键字数量小于m,无需任何分裂,插入作业完成。
同样查找关键字26亦应插入在d结点当中,由于d结点中关键在数目超过2,此时需要将d分裂成为两个结点,关键字26及其前后指针仍然保留在d结点中,而关键字37及其前后指针需要储存到新产生的结点d’当中。同时将中间关键字30和d’指针,一起插入到双亲结点中。由于更新后的b结点关键字未超过2,则插入完成。
结点d分裂为d和d’两个不同的结点。
类似地,在g中插入85后,需要分裂为两个结点,而当70插入到e结点当中去,由于e中的结点数目超过2,需要继续分裂;直到70插入到a结点中,插入结束。
85关键字插入后,g节点关键字数目不满足b-tree节点数目的基本要求,需要进行分裂,中间关键字70需要往移动到上一层节点e中去。由于70关键字的插入,导致 e结点关键字数量超过2,对于e结点需要继续分裂,中间关键字70继续往上移动至 结点a当中。
e结点分裂后的B-tree.
采用相同的思路,插入关键字7,通过查找关键字7应当插入至底层结点c当中,插入c后,由于c结点中的关键字数量大于2,需要分裂,关键字7移动至结点b当中,类似地,b结点中的关键字数量大于2;中间关键字24继续向上插入至根节点,由于根节点关键字数量大于2,根节点需要分裂,B-tree深度增加1,至此插入结束。
3.3 删除操作
B-Tree的删除操作比较复杂,其主要约束来自于B-tree特性的保持,一般情况下,则首先找到待删除关键字所在的结点,如果关键字所在结点为最下层的非终端节点,如果关键字数目不小于[m/2],直接删除即可,否则就需要自下而上进行结点的合并。倘若删除关键字为非终端结点Ki,则可以用指针Ai所指的树的最小关键字Y代替Ki,然后在相应的结点中删除Y即可。所以只需讨论删除最下层非终端结点的关键字即可。
有下列三种情况:
(1) 被删除关键字结点中的关键字数量不小于[m/2],则直接删除Ki和Ai即可,树的其它部分保持不变化。从树中删除关键字12就属于此类型。
删除12后,树的其它部分保持不变。
(2)被删除关键字所在的结点关键字数目为[m/2]-1,而与该节点相邻的右(左)兄弟结点的关键字数目大于[m/2]-1,则需将相邻右兄弟结点中最小(最大)的关键字上移至双亲结点中,而将双亲结点中小于(大于)且紧靠该上移关键字的关键字下移至被删除的结点当中。删除B-tree的关键字50便是如此情形。
(3)被删除关键字所在结点的左右子树关键字的数目都等于[m/2]-1, 假设该节点有右兄弟,且右兄弟结点由双亲结点中的Ai指针所指,那么在删除关键字之后,它所在的结点剩余的关键字和指针,另外加上双亲结点的Ki关键字合并到Ai所指的有兄弟结点中去。合并至左节点的逻辑亦相同。
删除关键字53,便是上述情形。
- 小结
由于B-tree的定义限制,导致 B-tree在插入和操作的时候需要分裂或合并结点,造成整体程序实现的复杂性。其实现方式通常采用自下而上,根据约束条件不断进行分裂或合并,直至根节点。另外B-tree深度增加的唯一途径就是根节点的分裂,B-tree深度减低的唯一途径就是根节点的合并。
参考文献:
并结点,造成整体程序实现的复杂性。其实现方式通常采用自下而上,根据约束条件不断进行分裂或合并,直至根节点。另外B-tree深度增加的唯一途径就是根节点的分裂,B-tree深度减低的唯一途径就是根节点的合并。
对于代码实现,如果有时间,我们将另外篇幅描述。
参考文献:
- 《数据结构》 严蔚敏
相关文章:
B-Tree (多路查找树)分析-20230503
B-Tree (多路查找树)学习-20230503 前言 B-树是一类多路查询树,它主要用于文件系统和某些数据库的索引,如果采用二叉平衡树访问文件里面的数据,最坏情况下,磁头可能需要进行O(h)次对磁盘的读写,其中h为树的高度&…...
OpenGL光照教程之 透光物
引言 我们目前使用的所有光照都来自于一个单独的光源,这是空间中的一个点。它的效果不错,但是在真实世界,我们有多种类型的光,它们每个表现都不同。一个光源把光投射到物体上,叫做投光。这个教程里我们讨论几种不同的投…...
如何使用hook?
目标:将posix函数hook住 一个简单的例子 (连接mysql服务),连接成功则打印success mysql.c #include <mysql/mysql.h> #include <stdio.h> int main(){MYSQL* mysql mysql_init(NULL);if(!mysql){printf("my…...
双指针技巧秒杀七道链表题目
文档阅读 文档阅读 题目 141. 环形链表 https://leetcode.cn/problems/linked-list-cycle/ public class Solution {public boolean hasCycle(ListNode head) {ListNode fast head, slow head;while(fast ! null && fast.next ! null){fast fast.next.next;slo…...
在“裸奔”时代保护我们的隐私:网络攻击、数据泄露与隐私侵犯的应对策略与工具
摘要:随着信息技术的普及和发展,个人隐私和数据安全问题日益受到威胁。本文将讨论如何有效应对网络攻击、数据泄露和隐私侵犯,并提供一系列实用的技巧和工具,以帮助我们在“裸奔”时代更好地保护数据安全和隐私。 当今社会&#…...
如何写出高质量代码
你是否曾经为自己写的代码而感到懊恼?你是否想过如何才能写出高质量代码?那就不要错过这个话题!在这里,我们可以讨论什么是高质量代码,如何写出高质量代码等问题。无论你是初学者还是资深开发人员,都可以在…...
[oeasy]python0048_注释_comment_设置默认编码格式
注释Comment 回忆上次内容 使用了版本控制 git 制作备份进行回滚 尝试了 嵌套的控制结构 层层 控制 不过 除非 到不得以尽量不要 太多层次的嵌套 这样 从顶到底含义 明确而且 还扁平 扁平 也能 含义明确 还可以 做点什么? 让程序含义 更加明确呢?&…...
C++中的queue与priority_queue
文章目录 queuequeue的介绍queue的使用 priority_queuepriority_queue介绍priority_queue使用 queue queue的介绍 队列是一种容器适配器,专门用于上下文先进先出的操作中。队列的特性是先进先出,从容器的一端插入,另一端提取元素。 队列…...
电脑发挥极致,畅游永恒之塔sf
随着22寸显示器的普及,玩永恒之塔势必会对显示卡造成了很大负担。不要说效果全开,就连简洁的玩,都成了问题,那是不是就要重金把才买的显示卡又要拿掉呢? 最出众的解决办法,是超频。 主要就具有以下条件最佳…...
ChatGPT :十几个国内免费可用 ChatGPT 网页版
前言 ChatGPT(全名:Chat Generative Pre-trained Transformer),美国OpenAI 研发的聊天机器人程序 ,于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具,它能够通过理解和学习人类的语言…...
5 分钟教你如何免费用上 GPT-4
今天要分享的就是普通用户,没有 OpenAI 账号,不需要写代码,你依然可以免费体验 GPT-4,当然,会有一些缺点,本篇文章将会手把手教你怎么用上免费版的 GPT-4 以及它的一些限制。 第一步:打开 Stea…...
安卓手机搭建智能语音客服/通话播音/聊天播音乐技术实现
声明,此项技术需要root支持,如果因为刷机导致手机变砖或其他不可预料的后果请自行解决。 场景 我有一个朋友他是做业务的,主要还是做电销,其实电销相对于以前纪念没那么好做了(我自己觉得主要是互联网冲击,…...
【学习笔记】PKUSC2023 不知道咋记
挺快乐的。到 P K U PKU PKU感受了一下北大校园,其实并没有想像中那么令人惊艳,但是看到了许多亲切的学长以及他们的热心陪伴(虽然有的我甚至不认识),感觉心里还是挺暖的。 如果不算上 D 2 T 1 D2T1 D2T1被平衡树板子…...
Packet Tracer - 配置基于区域的策略防火墙 (ZPF)
Packet Tracer - 配置基于区域的策略防火墙 (ZPF) 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 交换机端口 R1 G0/1 192.168.1.1 255.255.255.0 不适用 S1 F0/5 S0/0/0 (DCE) 10.1.1.1 255.255.255.252 不适用 不适用 R2 S0/0/0 10.1.1.2 255…...
全方位揭秘!大数据从0到1的完美落地之运行流程和分片机制
一个完整的MapReduce程序在分布式运行时有三类实例进程: MRAppMaster: 负责整个程序的过程调度及状态协调MapTask: 负责Map阶段的整个数据处理流程ReduceTask: 负责Reduce阶段的整个数据处理流程 当一个作业提交后(mr程序启动),大概流程如下࿱…...
后端程序员的前端必备【Vue】 - 07 ES6新语法
ES6新语法 1 let定义变量2 const定义常量3 模板字符串4 方法默认值5 箭头函数6 解构6.1 对象解构6.2 数组解构6.2 使用解构实现变量交换 7 Spread Operator8 模块化编程 1 let定义变量 使用let定义变量能更加精准的确定变量的作用域 //for(var i 0 ; i < 10 ; i){} for(let…...
AI落地:程序员如何用AI?
对于程序员来说,真正能提高效率、可落地的AI应用场景都有哪些? 目前已经能切实落地,融入我日常工作生活的有以下几个场景: 开发工作:自然语言生成代码,自动补全代码 日常工作学习:写作、翻译、…...
掌握优化+创新模式,轻松提升APP广告eCPM
无论是市场占有率高的综合性应用程序(App),还是透过特定目的所设计的专业化应用程序(App),内部嵌入广告已成为其主要的盈利方式。 而优化和创新作为提升广告收益的两大关键词。通过不断的数据分析和优化,结合对用户需求的深刻理解去优化和…...
在docker上安装运行Python文件
目录 一、在docker中安装python 1.1 输入镜像拉取命令 1.2 查看镜像 1.3 运行 1.4 查看是否成功 1.5 查看python版本 二、运行py文件 2.1准备运行所需文件 2.2 准备文件夹 2.3 大概是这幅模样 2.4 打包上传到服务器上 2.5 构建镜像示例 2.6 查看镜像 2.7 优化镜像的…...
RocketMQ第三节(生产者和消费者)
目录 1:生产者(同步、异步、单向) 1.1:同步发送消息(每发送一条等待mq返回值) 1.2:异步发送消息 1.3:单向发送消息(不管成功失败,只管发送消息)…...
人大金仓亮相国际金融展,打造“金融+产业+生态”创新模式
4月27日,以“荟萃金融科技成果,展现数字金融力量,谱写金融服务中国式现代化新篇章”为主题的2023中国国际金融展圆满落幕。作为已经举办30年的行业盛会,人大金仓再一次重磅亮相,全方位展示国产数据库前沿应用和创新服务…...
Syslog-ng RHEL 的安装和配置
syslog-ng 作为 syslog 的替代工具,可以完全替代 syslog 的服务,并且通过定义规则,实现更好的过滤功能。 作为运维来说一个好的日志工具比什么都重要。 通常我们会管理不同的服务器,因此我们需要把日志集中一下以便于快速查找。…...
得物直播低延迟探索 | 得物技术
1.背景 直播的时效性保证了良好的用户体验,根据经验在交易环节,延迟越低转化效果也会越好。传统的直播延迟问题已经成为了一个不容忽视的问题,高延迟不仅破坏了用户的观看体验,也让主播难以实时获取到用户的反馈。为了进一步优化…...
【CVPR红外小目标检测】红外小目标检测中的非对称上下文调制(ACM)
论文题目: Asymmetric Contextual Modulation for Infrared Small Target Detection 红外小目标检测中的非对称上下文调制 红外小目标数据集 目标个数分布:约90%图片中只有一个目标,约10%图片有多个目标(在稀疏/显著的方法中&am…...
Axios概述
一、Json-server 获得零编码的完整伪造 REST API zero coding 在不到 30 秒的时间内 (认真)。 使用 <3 创建,适用于需要快速后端进行原型设计和模拟的前端开发人员,模拟后端发送过来json数据。 1.安装 npm install -g jso…...
用右雅克比对旋转矩阵进行求导
考虑一个向量 a \bold{a} a对其进行旋转, 旋转用旋转矩阵 R \bold{R} R表示, 用朴素的倒数定义进行求导而不是用扰动模型, 我得到了这个过程与结果 和高博的新书结果 − R J r a ∧ -\bold{R}\bold{J}_{r}\bold{a}^{\wedge} −RJra∧结果不一样, 雅克比矩阵位置不同, 是不是…...
高性能HMI 走向扁平化
个人计算机作为图形用户界面(GUI)在自动化中已经使用了30多年。在那段时间里,从技术、术语、功能到用于创建接口的标准和指南,发生了许多变化。 PC 技术的飞速发展,特别是图形显示,用户界面的技术发展导致了…...
虚幻引擎配置物体水面浮力的简便方法
虚幻引擎配置物体水面浮力的简便方法 目录 虚幻引擎配置物体水面浮力的简便方法前言前期工作配置水面浮力针对一个立方体的水面浮力配置针对船3D模型的水面浮力配置 小结 前言 在使用虚幻引擎配置导入的3D模型时,如何快速地将水面浮力配置正确,从而使得…...
WatchGuard 防火墙策略、配置和日志分析器
获取 Internet 活动见解并及时了解安全事件是一项具有挑战性的任务,因为安全设备会生成大量的安全和流量日志。Firewall Analyzer 针对 WatchGuard 防火墙设备的报告功能具有一系列功能,使您能够增强网络安全。WatchGuard 日志分析器软件,可让…...
Web自动化测试——XAPTH高级定位
XAPTH高级定位 一、xpath 基本概念二、xpath 使用场景三、xpath 相对定位的优点四、xpath 定位的调试方法五、xpath 基础语法(包含关系)六、xpath 顺序关系(索引)七、xpath 高级用法1、[last()]: 选取最后一个2、[属性名属性值 an…...
内网网站建设/中国十大网络销售公司
1. 联合概率密度函数 2. 概率密度的性质 3. 二元连续型随机变量概率分布函数求解示例...
重庆营销网站建设公司排名/营销型网站更受用户欢迎的原因是
ESP32 寻迹模块测试寻迹模块测试所选设备ESP32使用PWM示例代码寻迹模块测试 所选设备 ’ESP32 引脚说明16需要先拉低在拉高,才能驱动电机13PWM控制A电机18PWM控制B电机4A115A217B15B2 PWM控制电机方法参考——PWM如何控制直流电机 驱动芯片TB6612FNG ESP32使…...
哪个网站可以做优惠券/推客平台
一、Collection:存放独立元素 Collection中的接口都是可选操作,其实现类 并不一定实现了其所有接口,这是为了防止“接口爆炸”。最常见的Unsupported Operation 都源自于背后由固定尺寸的数据结构支持的容器,比如使用ArrayList.as…...
b2b 网站开发/seo流程
关注公众号: TSparks 名称:尧字节 发送"10年" 不包括引号获取十年架构师文集 发送"23" 获取23种Java设计模式 发送"大咖" 获取大咖视频会议分享 发送"机器" 获取机器学习很棒的入门pdf,讲的非常详…...
衡水安徽网站建设/如何分析百度指数
站在风口上,猪都能飞起来。人工智能风口,让Pyhon这门胶水语言转变成非常火的网红语言。编程功力深厚的程序员花一两个星期就能上手Python,而一些新手程序员花几个月就可以上手。学编程,用Python确实是一个相当不错的选择。不过&am…...
办公空间设计案例ppt免费/淄博seo网站推广
function GetQueryString(param) {var reg new RegExp("(^|&)" param "([^&]*)(&|$)");var r window.location.search.substr(1).match(reg);if (r ! null)return decodeURI(r[2]);return null; }...