当前位置: 首页 > news >正文

哈希表是一种基于映射关系的存储结构,其核心是哈希函数 $ H(key) $,它将任意关键字转换为地址空间内的索引值,从而实现快速存取

B-树的插入与删除操作需严格维护其结构平衡性。在插入时,首先将关键字插入到合适的叶节点中,若该节点关键字数量超过上限 $ m-1 $,则进行“分裂”:取中间关键字上移至父节点,原节点以中间关键字为界拆分为两个子节点。若分裂传递至根节点且导致根满,则根分裂并生成新的根,树高加一。删除操作时,若关键字位于非叶节点,则用其中序后继替代并转为对叶节点的删除;若删除后节点关键字个数小于最小要求 $ \lceil m/2 \rceil - 1 $,则通过左兄弟或右兄弟“借”关键字,若兄弟也无法借用,则与兄弟及父节点中的分隔关键字合并,可能导致合并后的节点继续向上合并,甚至树高减一。

哈希表是一种基于映射关系的存储结构,其核心是哈希函数 $ H(key) $,它将任意关键字转换为地址空间内的索引值,从而实现快速存取。理想情况下查找时间复杂度为 $ O(1) $。但由于哈希函数输出空间有限,不同关键字可能映射到同一地址,产生冲突。常见的冲突解决方法包括链地址法(拉链法)和开放定址法(如线性探测、平方探测)。为减少冲突,应设计分布均匀的哈希函数,并保持较低的装载因子。
当B-树中某节点的关键字个数超过 $ m-1 $(即最大允许关键字数)时,需对该节点进行分裂操作,以维持B-树的结构特性。具体步骤如下:

  1. 确定分裂位置
    将该节点中的 $ m $ 个关键字按升序排列(插入后已有序),选取中间关键字(第 $ \lceil m/2 \rceil $ 个关键字,即索引为 $ \left\lfloor \frac{m}{2} \right\rfloor $ 的关键字)作为上移关键字。

  2. 拆分左右两部分

    • 中间关键字左侧的 $ \lceil m/2 \rceil - 1 $ 个关键字保留在原节点中;
    • 右侧的 $ \lfloor m/2 \rfloor $ 个关键字构成一个新节点;
    • 若该节点是非叶节点(有子树),则其 $ m+1 $ 棵子树也需一并分割:前 $ \lceil m/2 \rceil $ 棵子树归属原节点,后 $ \lfloor m/2 \rfloor + 1 $ 棵子树归属新节点。
  3. 中间关键字上移至父节点
    将选出的中间关键字插入到父节点中的合适位置,并将新节点的指针作为右子树连接到父节点中。若父节点因此也超过了 $ m-1 $ 个关键字,则递归执行分裂,直至根节点。

  4. 若根节点分裂
    当根节点发生分裂时,创建一个新的根节点,将上移的关键字作为新的根,原根分裂为两个子节点。此时树的高度增加一层。

⚠️ 注意:分裂操作保证了每个节点的关键字个数始终满足 $ \lceil m/2 \rceil - 1 \leq n \leq m-1 $,从而保持B-树的平衡性。

# 示例伪代码表示分裂过程(以m=5为例)defsplit_node(node):mid=len(node.keys)//2# m=5时,mid=2,第3个关键字上移separator=node.keys[mid]left_keys=node.keys[:mid]# 前半部分保留right_keys=node.keys[mid+1:]# 后半部分新建节点left_children=node.children[:mid+1]ifnotnode.is_leaf()elseNoneright_children=node.children[mid+1:]ifnotnode.is_leaf()elseNonenew_right_node=BTreeNode(keys=right_keys,children=right_children)# 更新当前节点node.keys=left_keys node.children=left_childrenreturnseparator,new_right_node

http://www.jsqmd.com/news/187718/

相关文章:

  • C++26即将发布:std::future支持超时,你准备好了吗?
  • 电商平台商品描述生成:结合HunyuanOCR与大模型自动化创作
  • C++分布式服务治理(负载均衡策略全解析)
  • Note - 无向图三元环计数
  • C++内存泄漏频发?Rust如何用所有权机制彻底解决(99%开发者忽略的核心原理)
  • 模糊图像也能识别?HunyuanOCR抗噪能力极限挑战
  • std::future终于支持超时了,C++开发者必须掌握的3个新用法
  • 盘点十家全球领先激光企业的技术与市场定位
  • 谷歌镜像网站访问困难?这里提供HunyuanOCR替代下载通道
  • LaTeX公式识别新突破?用腾讯混元OCR处理科研文档
  • GDB + GCC 14协同调试全解析,大幅提升问题排查效率
  • 财务报表自动化录入:HunyuanOCR助力企业降本增效
  • 2025年市场上评价好的钣金加工品牌选哪家,最新钣金加工哪家好优质品牌榜单更新 - 品牌推荐师
  • 【C++与Rust内存安全终极对决】:20年专家揭秘谁才是真正零风险之选
  • 良心公益听歌工具:TuneFree 无广告 / 无会员 / 多平台解析
  • 变频器源码探秘:MD380E/MD500E 基于 TMS320F28034/28035
  • 无需级联处理:HunyuanOCR如何实现单模型端到端OCR任务
  • 关于一些假入库
  • 技术博客引流实战:通过CSDN官网发布HunyuanOCR教程吸粉
  • WPS Office接入HunyuanOCR?国产办公软件智能化升级路径
  • 小程序商城成为私域经营关键触点,智能化工具提升运营效率
  • 部署腾讯HunyuanOCR镜像全步骤:适配本地GPU环境的最佳实践
  • 如何快速部署腾讯HunyuanOCR-APP-WEB镜像并实现端到端OCR识别
  • 支持混合语言场景的OCR神器:HunyuanOCR实战体验报告
  • C++26即将上线:你必须掌握的契约检查核心技术(仅剩少数人知晓)
  • 二叉排序树本质上是一种“边插入边排序”的数据结构,而平衡二叉树在此基础上引入了自平衡机制
  • 当插入或删除节点导致某个节点的平衡因子绝对值超过 1 时,就需要进行**旋转调整**以恢复平衡
  • 移动端适配前景看好:HunyuanOCR轻量化模型移植可行性分析
  • Spring Boot项目如何调用HunyuanOCR服务?Java层通信方案
  • 拍照翻译全流程演示:从图像输入到译文输出只需一步