首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
【python】字典数据结构的计划原理学习
返回列表
发新帖
【python】字典数据结构的计划原理学习
[复制链接]
发表于 2025-12-2 23:04:30
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
先说结论:
python的dict,底层是哈希表(hash table)与开放寻址方案(二次探测 + 伪随机跳跃)
此中,
核心结构:哈希表是一个“数组”
每个 dict 底层对应一块数组(table),数组每个槽位(slot)大概存一个 key-value。
index: 0 1 2 3 4 5 6 7
value: [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
复制
代码
任何输入的key 会被哈希(hash(key))
d["abc"] = 123
# python会计算
h = hash("abc") → 得到一个整数,如 918273645
slot = h % table_size → 如 918273645 % 8 = 5
复制
代码
于是 key 放到
槽位 5
index: 0 1 2 3 4 5 6 7
value: [ ] [ ] [ ] [ ] [ ] [('abc',123)] [ ] [ ]
复制
代码
如果盘算出的槽位已经被占用,dict 不会链表化
存储
,而是 继续找下一个空槽位,此中会利用 开放寻址(Open Addressing)
slot 6 空? → 放这里
slot 6 也有人? → 看 slot 7
复制代码
dict 会控制“
负载
因子”(利用率),好比如果槽位利用率高出 ~2/3,自动扩容。扩容后空间很大,辩论变少,因此 dict 的
性能
保持 O(1)。
扩容利用:
table 巨细扩成原来的 2 倍
全部 key 重新哈希并放入新 table(rehash)
看具体的应用场景:利用dict举行查找、插入利用,时间复杂度是O(1)
1. 查找过程
查找 d[key]:
盘算 hash(key)
定位槽位 slot = hash % table_size
看到槽位里是不是这个 key
是 → 找到
否 → 利用开放寻址规则继续探测
那么影响时间好坏的,就要看hash算法的底层原理了,hash函数大抵是位运算+随机化
回复
使用道具
举报
返回列表
美食家大橙子
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表