news 2026/5/14 17:36:45

Python哈希冲突怎么解决_链地址法与开放寻址法代码演示

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python哈希冲突怎么解决_链地址法与开放寻址法代码演示

Python内置dict和set采用开放寻址法而非链地址法,通过探测序列寻找空槽;手动实现链地址法需用列表存桶,开放寻址法则需DELETE标记处理删除。哈希冲突发生时,dict 和 set 实际用的是链地址法Python 内置的 dict 和 set 在底层 C 实现中采用的是**开放寻址法(open addressing)**,不是链地址法(chaining)。这点很多人会搞反——尤其学过教材里“链表挂桶”的经典示例后,容易误以为 Python 也这么干。它用的是带探测序列的开放寻址:当 hash(key) % table_size 对应位置已被占用,就按固定规则(如线性探测 + 二次探测混合)找下一个空槽。好处是缓存友好、内存连续;坏处是负载因子一高,查找退化明显。你没法在纯 Python 层直接“切换”成链地址法——dict 的实现不暴露桶结构如果真需要链地址行为(比如调试冲突分布、教学演示),得自己手写哈希表类,用 list 存桶,每个桶是 list 或 dequePython 3.7+ 的 dict 保持插入顺序,但这和冲突解决策略无关,是额外维护的索引数组自己实现链地址法:用 list 做桶,hash() 控制索引核心就三步:算哈希 → 取模定桶 → 在桶内遍历比对键。注意 Python 的 hash() 对相同字符串稳定,但对不同进程/启动可能加盐(PYTHONHASHSEED),所以别拿它做持久化依据。class SimpleChainedDict: def __init__(self, size=8): self.size = size self.buckets = [[] for _ in range(size)]<pre class='brush:python;toolbar:false;'>def _hash(self, key): return hash(key) % self.sizedef set(self, key, value): idx = self._hash(key) bucket = self.buckets[idx] for i, (k, v) in enumerate(bucket): if k == key: # 已存在,覆盖 bucket[i] = (key, value) return bucket.append((key, value)) # 新增def get(self, key, default=None): idx = self._hash(key) bucket = self.buckets[idx] for k, v in bucket: if k == key: return v return default</pre>桶大小固定,没扩容逻辑——实际要用就得加 len(self) > self.size * 0.7 时重建hash(key) 可能为负,但 % 在 Python 中结果恒为非负,安全桶内用线性查找,O(1) 是均摊的;最坏 O(n)(所有键哈希到同一桶)开放寻址法手动实现:线性探测 + 删除标记开放寻址难在删除:不能真删,否则会断掉后续探测链。得用一个特殊标记(如 DELETED)占位,查找时跳过,插入时可复用。 Mokker AI AI产品图添加背景

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

告别乱码与丢包:基于STM32G431的HAL库串口接收中断实战优化指南

STM32G431串口通信实战&#xff1a;从基础到工业级稳定传输的进阶指南 当你在调试智能小车传感器数据时&#xff0c;是否遇到过串口接收的数据突然出现乱码&#xff1f;当环境监测设备需要处理高频串口数据时&#xff0c;是否发现部分数据包神秘消失&#xff1f;这些看似简单的…

作者头像 李华
网站建设 2026/5/14 17:34:47

终极小说下载器:打造永久私人图书馆的完整解决方案

终极小说下载器&#xff1a;打造永久私人图书馆的完整解决方案 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 在数字阅读时代&#xff0c;你是否曾为心爱小说的突然消失而痛心&…

作者头像 李华
网站建设 2026/5/14 17:32:14

Beyond Compare 5终极激活指南:3种方法快速生成永久授权密钥

Beyond Compare 5终极激活指南&#xff1a;3种方法快速生成永久授权密钥 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 还在为Beyond Compare 5的30天试用期烦恼吗&#xff1f;面对"评估模…

作者头像 李华
网站建设 2026/5/14 17:29:23

改进FxLMS汽车驾驶位噪声控制【附程序】

✨ 长期致力于主动噪声控制、次级通路辨识、声场分析、自适应滤波算法研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;车身声腔共振频率分析与驾驶位声…

作者头像 李华
网站建设 2026/5/14 17:28:14

对比直连与通过taotoken调用大模型api的稳定性体验

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比直连与通过 Taotoken 调用大模型 API 的稳定性体验 在开发基于大模型的应用时&#xff0c;API 调用的稳定性是影响开发效率和最…

作者头像 李华