Python2.7中dict实现原理和哈希表介绍

本文介绍了Python2.7中dict的底层实现原理——哈希表,详细阐述了哈希表产生的原因、哈希函数、冲突及其解决方法,包括开放地址法、再哈希法、链地址法和公共溢出区。此外,还讨论了哈希表的装填因子α对查找效率的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

Python中dict对象是表明了其是一个原始的Python数据类型,按照键值对的方式存储,其中文名字翻译为字典,顾名思义其通过键名查找对应的值会有很高的效率,时间复杂度在常数级别O(1).本文针对其实现的数据结构进行原理性说明和拓展,不涉及Python的源码剖析。


dict底层实现

在Python2中,dict的底层是依靠哈希表(Hash Table)进行实现的,使用开放地址法解决冲突。所以其查找的时间复杂度会是O(1),下文会具体讲解哈希表的工作原理和解决冲突时的具体方法。


哈希表

哈希表是key-value类型的数据结构,通过关键码值直接进行访问。通过散列函数进行键和数组的下标映射从而决定该键值应该放在哪个位置,哈希表可以理解为一个键值需要按一定规则存放的数组,而哈希函数就是这个规则。此处提出几个专业名词后面会一一进行介绍。

  • 哈希函数
  • 装填因子
  • 冲突

1.哈希表产生的原因

假设我们存在一个简单的键值对结构,键-员工号,值-是否在岗。现在需要这样一个功能,输入员工号,返回该员工是否在岗,理想的方法是创建一个长度为Max(员工号)的数组,数组下标就是员工号,数组中的值用0和1对是否在岗进行区分,这样只需要O(1)的时间复杂度就可以完成操作,但是扩展性不强,存在以下问题。
1.假设新进员工的员工号比Max(员工号)还要大,这就需要重新申请数组进行迁移操作。
2.假设一种极端的情况,存在两个员工,员工号分别是1和100000000001,这样子的话按照先前的设计思路&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值