一.简介
哈希表(hash,散列表)是根据关键码值(Key Value)而直接进行访问的数据结构
给定表 M,存在函数 F(key),对于任意给定的关键码值Key,代入函数后能得到包含该关键码值的记录在表中的地址
这个映射函数是散列函数,存放记录的数组叫做散列表
hash就是找到一种数据内容能够和数据存放地址之间的映射关系,hash table的查询速度几乎是O(1)的时间复杂度
二.散列函数
实际工作中根据不同的情况采用不同的哈希函数(散列函数):
(1) 计算哈希函数的时间
(2) 关键码值 Key 的长度
(3) 哈希表的大小
(4) 关键码值的分布情况
(5) 记录的查找频率
1.直接寻址法
2.数学分析法
3.平方取中法
4.折叠法
5.随机数法
6.除留余数法
三.哈希冲突
哈希冲突(hash collision)是不可避免的,如果遇到冲突可以采用开放定址法和链地址法
1.开放定址法
开放定址法是遇到冲突的时候查找顺着原来哈希地址查找下一个空闲地址然后插入
2.链地址法
链地址法是遇到冲突的时候在原地址新建一个节点空间,然后以链表的形式插入到该节点空间