news 2026/6/16 10:35:45

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
哈希表是一种基于映射关系的存储结构,其核心是哈希函数 $ 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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 3:48:59

C++分布式服务治理(负载均衡策略全解析)

第一章:C分布式服务治理概述在现代高性能系统架构中,C凭借其高效的执行性能和底层控制能力,广泛应用于金融交易、游戏服务器、实时通信等对延迟敏感的分布式场景。随着服务规模的扩大,单一进程已无法满足高并发与高可用的需求&…

作者头像 李华
网站建设 2026/6/16 0:14:29

营业执照识别实战:HunyuanOCR卡证类文档处理能力评估

营业执照识别实战:HunyuanOCR卡证类文档处理能力评估 在企业数字化转型的浪潮中,自动化处理营业执照这类高频、高价值的卡证文档,已成为金融、政务、财税等系统提升效率的关键突破口。传统OCR方案虽然成熟,但面对五花八门的执照模…

作者头像 李华
网站建设 2026/6/13 6:13:14

【C++网络模块兼容性终极指南】:揭秘跨平台开发中的5大陷阱与解决方案

第一章:C网络模块兼容性概述在现代分布式系统和跨平台应用开发中,C网络模块的兼容性成为决定软件可移植性和稳定性的关键因素。由于不同操作系统对网络接口的实现存在差异,开发者必须考虑API行为、字节序处理、套接字选项以及错误码映射等核心…

作者头像 李华
网站建设 2026/6/11 8:42:52

C++26 std::future超时功能详解(下一代异步编程利器)

第一章:C26 std::future超时功能概述 C26 标准在并发编程方面引入了重要改进,其中最值得关注的是对 std::future 的原生超时支持。此前版本的 C 中,开发者需依赖 wait_for 或 wait_until 方法轮询状态,无法直接阻塞等待并设置超时…

作者头像 李华
网站建设 2026/6/15 17:33:20

模糊图像也能识别?HunyuanOCR抗噪能力极限挑战

模糊图像也能识别?HunyuanOCR抗噪能力极限挑战 在智能办公、远程教育和跨境电商日益普及的今天,我们每天都在用手机拍照上传合同、发票、证件——但你有没有遇到过这样的尴尬:明明拍了十几张,不是模糊就是反光,最后还…

作者头像 李华