1. 哈希表知识
1.1 哈希表简介
哈希表(Hash Table):也叫做散列表。是根据键(key)、值(value)直接进行访问的数据结构。也就是说,它通过键key和一个映射函数Hash(key)计算出对应的值value,把key和value映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做哈希函数,存放记录的数组叫做哈希表。
哈希表的关键思想是使用哈希函数,将键 key 映射到对应表的某个区块中。
哈希表的原理实例如下图所示:
上图例子的解释:value = Hash(key) = key // 1000 作为哈希函数。// 符号代表整除。
- 插入:通过哈希函数解析关键字,并将对应值存放到该区块中
比如:value = Hash(key) = 0138 // 100 = 0,得出应将0138分配到0所在的区块中。 - 查找:通过哈希函数解析关键字,并在特点的区块搜索关键字对应的值。
比如: 查找4232,通过哈希函数,得出2022应该在4所对应的区块中。然后为满从4对应的区块中继续搜索,并在2对应的区块中成功找到。
比如:查找 3214,通过哈希函数,得出 3214 应该在 3 所对应的区块中。然后我们从 3 对应的区块中继续搜索,但并没有找到对应值,则说明 3214 不在哈希表中。
1.2 哈希函数
哈希函数:将哈希表中元素的键值(key)映射为元素存储位置(value)的函数。
哈希函数的重要的部分:
- 哈希函数应该易于计算,并且尽量使计算出来的索引值均匀分布。
- 哈希函数计算得到的哈希值是一个固定长度的输出值。
- if Hash(key1) != Hash(key2) 则 key1与key2一定不相等。
- if Hash(key1) = Hash(key2) 则key1与key2可能相等,也可能不相等(哈希碰撞)
下面我们介绍几个常用的哈希函数方法:
- 直接定值法:取关键字或者关键字的某个线性函数为哈希地址。即:Hash(key)