散列函数(hash function)
WIKI
A hash function is any function that can be used to map data of arbitrary size to data of a fixed size.
定义
无论输入什么数据,输出一个数值
工作原理
-
散列函数总是将同样的输入映射到相同的索引
-
散列函数将不同的输入映射到不同的索引
-
散列函数知道数组有多大,只返回有效索引
散列表(hash table)
WIKI
In computing, a hash table (hash map) is a data structure which implements an associative array abstract data type, a structure that can map keys to values.
介绍
-
散列表使用散列函数来确定元素的存储位置
-
散列表由键和值组成,散列表将键映射到值
-
Python提供的散列表实现为字典,使用大括号创建散列表
dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
适用于
-
模拟映射关系
-
防止重复
-
缓存/记住数据,以免服务器通过过处理来生成它们
冲突
给两个键分配的位置相同
解决:将两个键映射到同一个位置,就在这个位置存储一个链表
经验教训
-
散列函数很重要,散列函数将键均匀地映射到散列表的不同位置
-
如果散列表存储的链表很长,散列表的速度将急剧下降
性能
| 散列表平均情况 | 散列表最糟情况 | 数组 | 链表 |
查找 | O(1) | O(n) | O(1) | O(n) |
插入 | O(1) | O(n) | O(n) | O(1) |
删除 | O(1) | O(n) | O(n) | O(1) |
PS: O(1)称为常量时间。不管散列表多大,所需时间相同
避免最糟情况
-
较低的填装因子
-
良好的散列函数