引言
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,这样子的话按照先前的设计思路&#