B树的插入和删除

news2024/11/26 12:28:24

1.B树的插入

在这里插入图片描述

1.核心要求
  • 对m阶B树——除根节点外,结点关键字个数 [ m / 2 ] − 1 ≤ n ≤ m − 1 [m/2] -1≤n≤m-1 [m/2]1nm1
  • 子树0<关键字1<子树1<关键字2<子树2<…

新元素一定是插入到最底层“终端节点”,用“查找”来确定插入位置.

2.具体步骤

若插入后结点关键字个数未超过上限,则无需做其他处理.

  1. 在插入key后,若导致原结点关键字数超过上限,则从中间位置([m/2])将其中的关键字分为两部分
  2. 左部分包含的关键字放在原结点中,
  3. 右部分包含的关键字放到新结点中,
  4. 中间位置([m/2])的结点插入原结点的父结点.
  5. 若此时导致其父结点的关键字个数也超过了上限,则继续进行这种分裂操作,
  6. 直至这个过程传到根结点为止,进而导致B树高度增1。

2.B树的删除

1.终端结点关键字
  • 若被删除关键字在终端节点,则直接删除该关键字(要注意节点关键字个数是否低于下限[m/2]-1)
2.非终端结点关键字
  • 若被删除关键字在非终端节点,则用直接前驱或直接后继来替代被删除的关键字,
  • 直接前驱︰当前关键字左侧指针所指子树中“最右下”的元素。
  • 直接后继:当前关键字右侧指针所指子树中“最左下”的元素
  • (与二叉排序树中查找直接前驱和直接后继是一致的)
  • 对非终端结点关键字的删除,必然可以转化为对终端的结点的删除操作。
3.当终端结点的低于当前分支的下限时:

1.兄弟够借。

若被删除关键字所在结点删除前的关键字个数低于下限且与此结点右(或左)兄弟结点的关键字个数还很宽裕,则需要调整该结点、右(或左)兄弟结点及其双亲结点(父子换位法)。

具体操作:

  • 右兄弟很宽裕时,用当前结点的后继、后继的后继来填补空缺。
  • 左兄弟很宽裕时,用当前结点的前驱、前驱的前驱来填补空缺
  • 本质:要永远保证子树O<关键字1<子树1<关键字2<子树2<…

2.兄弟不够借。

若被删除关键字所在结点删除前的关键字个数低于下限,且此时与该结点相邻的左、右兄弟结点的关键字个数均=[m/2] -1,则将关键字删除后与左(或右)兄弟结点及双亲结点中的关键字进行合并。

具体操作:

  • 在合并过程中,双亲结点中的关键字个数会减1。
  • 若其双亲结点是根结点且关键字个数减少至0(根结点关键字个数为1时,有2棵子树),则直接将根结点删除,合并后的新结点成为根;
  • 若双亲结点不是根结点,且关键字个数减少到[m/2]-2,则又要与它自己的兄弟结点进行调整或合并操作,并重复上述步骤,直至符合B树的要求为止。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Spring Boot 源码学习】OnBeanCondition 详解

Spring Boot 源码学习系列 OnBeanCondition 详解 引言往期内容主要内容1. getOutcomes 方法2. getMatchOutcome 方法2.1 ConditionalOnBean 注解处理2.2 ConditionalOnSingleCandidate 注解处理2.3 ConditionalOnMissingBean 注解处理 3. getMatchingBeans 方法 总结 引言 上篇…

MQ - 15 集群篇_如何构建分布式的消息队列集群(下)

文章目录 导图Pre概述元数据存储服务设计选型基于第三方存储引擎集群内部自实现元数据存储ZooKeeper 的集群构建Kafka 的集群构建基于 ZooKeeper 的集群基于 KRaft 的集群缩容的处理方式总结导图 Pre 接着 MQ - 14 集群篇_如何构建分布式的消息队列集群(上)</

唯品会获得vip商品详情 API 返回值说明(唯品会商品价格销量详情图主图)

item_get-获得vip商品详情 vip.item_get 请求地址 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item…

threejs给3d模型中的物体换肤(修改材质)

变成这样 this.otherModel.traverse(function (child) {if (child instanceof THREE.Mesh && child.name Cylinder240) {// 导入纹理const textureLoader new THREE.TextureLoader();const floorColortextureLoader.load(require(../../../public/img/color.jpg));co…

在Linux中安装nginx-1.20.1+php-7.4.28(增加扩展)

NginxPHP安装在公网IP为x.x.x.x的服务器上 需要下载安装的软件版本&#xff1a;nginx-1.20.1php-7.4.28 需要增加的PHP扩展如下&#xff1a; 在编译安装php-7.4.28时加上的pcntl&#xff1b; 单独下载安装的Wxwork_finance_sdk&#xff1b;&#xff08;在编译安装php-7.4.2…

django和celery的项目,nginx和uwsgi协议,在通过api端口进行deeplearning任务的训练和排队

问题汇总 redis 安装django和celery的安装nginx和uwsgi的安装 一. Django 的项目&#xff0c;有个runserver直接起了一个webserver&#xff0c;为什么还要Nginx包一层&#xff0c;起一个webserver呢&#xff1f; Nginx的性能比Django自带的Webserver的性能要好&#xff0c;pyt…

Jenkins用户管理(二):不同用户分配不同的任务访问权限

需求:不同用户访问到不同的Jenkins任务。 依赖插件:Role-based Authorization Strategy 1. 插件安装 进入【系统管理】-【插件管理】-【可用插件】,搜索Role-based Authorization Strategy进行安装,随后重启jenkins 2. 全局安全配置 进入【系统管理】-【全局安全配置】,【…

引用js文件实现汉字转拼音

先看效果 具体需求是 第一个文本框输入汉字&#xff0c;第三个显示拼音&#xff0c; 先引用js <script src"/js/pinyinutil.js"></script> html这样 <el-input v-model"inputText" style"width:220px" placeholder"请输入…

2023智慧云打印小程序源码多店铺开源版 +前端

智慧自助云打印系统/智慧云打印小程序源码 前端 这是一款全新的基于Thinkphp的最新自助打印系统&#xff0c;最新UI界面设计的云打印小程序源码

前端开发必备:icon封装技巧

main.js import svgIcon from /components/SvgIcon Vue.component(svg-icon-full, svgIcon) const requireAll requireContext > requireContext.keys().map(requireContext) const req require.context(/assets/icons/svg, false, /\.svg$/) // icon位置 requireAll(re…

【运维 Pro】时序场景实践与原理 - 2. 宽表,窄表与 JSON 字段

【运维Pro】: 由 YMatrix 售前和售后团队负责的栏目。除了介绍日常的数据库运维和使用知识&#xff0c;我们更希望能够通过介绍这些知识背后的原理&#xff0c;让大家和我们一起感知数据库的美妙。 摘要 在上一期 《时序场景实践与原理 - 1.分布与分区》中&#xff0c;我们围…

探索智能应用的基石:多模态大模型赋能文档图像处理

目录 0 写在前面1 文档图像分析新重点2 token荒&#xff1a;电子文档助力大模型3 大模型赋能智能文档分析4 文档图像大模型应用可能性4.1 专有大模型4.2 多模态模型4.3 设计思路 总结 0 写在前面 中国智能产业高峰论坛(CIIS2023)旨在为政企研学各界学者专家提供同台交流的机会…

Denoising Diffusion Autoencoders are Unified Self-supervised Learners

Denoising Diffusion Autoencoders are Unified Self-supervised Learners (Paper reading) Weilai Xiang, Beihang University, arXiv23, Code, Paper 1. 前言 受最近扩散模型进展的启发&#xff0c;这让人想起去噪自编码器&#xff0c;我们研究了它们是否可以通过生成预训…

1952-2018年中国各省份人均GDP数据(消涨处理)

1952-2018年中国各省份人均GDP数据&#xff08;消涨处理&#xff09; 1、时间&#xff1a;1952-2018年 2、范围&#xff1a;30省市 3、指标&#xff1a;人均GDP 4、来源&#xff1a;《新中国60周年统计汇编》和各省年鉴 5、指标解释&#xff1a; 过程为环比人均GDP指数转…

【Vue】使用vue-cli搭建SPA项目的路由,嵌套路由

一、SPA项目的构建 1、前期准备 我们的前期的准备是搭建好Node.js,测试&#xff1a; node -v npm -v2、利用Vue-cli来构建spa项目 2.1、什么是Vue-cli Vue CLI 是一个基于 Vue.js 的官方脚手架工具&#xff0c;用于自动生成vue.jswebpack的项目模板&#xff0c;它可以帮助开发者…

openGauss学习笔记-73 openGauss 数据库管理-创建和管理索引

文章目录 openGauss学习笔记-73 openGauss 数据库管理-创建和管理索引73.1 背景信息73.2 操作步骤73.2.1 创建索引73.2.2 修改索引分区的表空间73.2.3 重命名索引分区73.2.4 查询索引73.2.5 删除索引73.2.6 创建索引的方式73.2.6.1 创建普通索引73.2.6.2 创建多字段索引73.2.6.…

升级iOS17后可以降级吗?iOS17退回iOS16方法教程分享

iOS 17已上线几天&#xff0c;从网上用户的反馈和媒体机构的报告来看&#xff0c;iOS17系统对旧机型来说并不友好&#xff0c;除了电池续航下降以外&#xff0c;占用大量储存空间&#xff0c;BUG也不少。 苹果于 9 月 7 日发布了 iOS 16.6.1 版本&#xff0c;如果升级iOS17后发…

opencv实现仿射变换

什么是仿射变换&#xff1f; 代码实现 import numpy as np import cv2 as cv import matplotlib.pyplot as plt#设置字体 from pylab import mpl mpl.rcParams[font.sans-serif] [SimHei]#图像的读取 img cv.imread("lena.png")#仿射变换 rows , cols img.shape[…

计算机视觉与深度学习-全连接神经网络-训练过程-模型正则与超参数调优- [北邮鲁鹏]

目录标题 神经网络中的超参数学习率超参数优化方法网格搜索法随机搜索法 超参数搜索策略粗搜索精搜索 超参数的标尺空间 神经网络中的超参数 超参数 网络结构&#xff1a;隐层神经元个数&#xff0c;网络层数&#xff0c;非线性单元选择等优化相关&#xff1a;学习率、dorpou…

期权如何交易?期权如何做模拟交易?

买卖期权的第一步就是要有期权账户&#xff0c;国内的期权品种有商品期权和ETF期权以及股指期权&#xff0c;每种的开户方式和要求都不同&#xff0c;下文为大家介绍期权如何交易&#xff1f;期权如何做模拟交易&#xff1f; 一、期权交易需要开立一个期权账户&#xff0c;可以…