B-树暂记:非根非叶节点至少有 m/2上取整 个分支

本文介绍了B-树的基本概念,包括其作为多路平衡查找树的特点,以及如何通过插入和删除节点来保持树的平衡状态。重点讲解了节点插入时的分裂过程及节点删除时的合并操作。

B-树的建立、插入和删除结点的过程

多路平衡查找树

目标:多叉 有序 平衡

两个叉一个关键字的叫二叉树
m个叉m-1个关键字的树就是m叉树

顺序仍然是左小右大

根节点至少有两个分支根节点至少有两个分支
非根非叶节点至少有⌈m/2⌉个分支非根非叶节点至少有 \lceil m/2 \rceil个分支m/2
因为叶子结点不包含关键字,所以可以把叶子结点看成在树里实际上并不存在外部结点,指向这些外部结点的指针为空,叶子结点的数目正好等于树中所包含的关键字总个数加1。

添加节点

插入节点时当个数大于m-1时:
将⌈m/2⌉位置的元素“提”出来(将左侧与右侧的关键字分别装在新的节点中)将 \lceil m/2 \rceil 位置的元素“提”出来\\(将左侧与右侧的关键字分别装在新的节点中) m/2()
当前层分解,传入上一层(可能产生连锁反应)
插入元素8
在这里插入图片描述
在这里插入图片描述
拆分上移

在这里插入图片描述

在这里插入图片描述
上部分超过三叉树的元素限制,连锁反应
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

删除节点

删除的节点是“终端”节点

1.直接删除

在这里插入图片描述

在这里插入图片描述

2.兄弟够借

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.兄弟不够借

在这里插入图片描述
在这里插入图片描述
合并操作:
在这里插入图片描述
在这里插入图片描述

删除的节点为非终端节点

如果子树元素都为1:
将要删除节点用其前驱或后继替代(位置替换),然后删除
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三个特性: 平衡:所有叶子结点都在同一层 有序:节点内有序,任一元素的左子都小于它,右子都大于它 多路:对于M阶B的节点 最多m个分支,m-1个元素 根节点最少2分支,1个元素(空除外) 其他节点最少m/2分支(向上取整),m/2-1个元素 由来 提高硬盘访问次数,即提高硬盘读取速度 那么节点里的元素多了,不会增加硬盘访问耗时吗? 硬盘读取物理地址连续的多个字节和读取单个字节耗时几乎没区别 访问节点是在硬盘上进行的,节点内的数据操作是在内存中进行的 查找 结点内可顺序查找也可以折半查找(因为节点内元素有序) 用动图示例 插入 先查找到插入的位置进行插入 可能超出节点的最大元素数量(上溢): 取中间元素(m/2上取整个元素),做分裂操作(中间元素移到父亲节点,原本中间元素的两边分割成两个新节点),直到没有上溢为止 删除 容易出现上溢 删除叶子结点元素最终都转换成删除叶节点元素(直接前驱或直接后继替换,即左子最大或右子最小,然后删除) 下溢:兄弟够借则借(父节点下移到下溢节点中,借兄弟的元素变父节点元素,父下来兄上去) 左右兄弟都不够借:将它和左或右兄弟合并(父亲元素先下移到兄弟节点,然后该节点再与兄弟节点合并,原本空节点、父元素原位置移除),注意,子也需要挪过去 B+、B* B+: 1. 每个结点最多有M个子结点; 2. 叶子结点的根结点至少有两个子结点; 3. 除根结点外的分支结点至少有[m/2]个子结点; 4. 有k棵子叶子结点有k个关键字,且关键字按照升序排列; 5. 叶结点在同一层次中。 6. 所有叶子结点增加一个链接指针链接在一起; 7. 所有关键字及其映射数据都在叶子结点中出现。 B*:B*是在B+的基础上,在B+非根叶子结点增加指向兄弟的指针 B:有序数组+平衡多叉; B+:有序数组链表+平衡多叉; B*:一棵更丰满的,空间利用率更高的B+ 游戏应用 1. 开放世界资源加载 ○ 管理地形区块、纹理、模型等资源的动态加载与卸载 ○ 使用B组织坐标空间,加速视锥体裁剪(Frustum Culling) ○ 通过键值(如坐标(x,y,z)(x,y,z))快速定位资源区域 2. 大规模实体管理 ○ 存储NPC、道具、任务对象等游戏实体 ○ 支持按ID范围查询(如[1000,2000][1000,2000])或空间位置检索 ○ 实时处理实体的创建/销毁操作(优于哈希表的动态扩展性) 3. 游戏存档系统 ○ 高效存储玩家状态、物品库存等结构化数据 ○ 支持范围查询(如“等级≥30的武器”) ○ 确保存档/读档时的I/O效率。请详细的帮我补充知识点,帮我润色一下
最新发布
09-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值