先简单介绍下哈希函数
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数 ——百度百科
哈希表
函数算法
1.映射方法
1>.除法
2>.乘法
m = 2^r m为哈希槽数
w为操作系统位数,32或64
h(k) = (A*K mod 2^w) >> (w-r) 注:类似转幸运大转盘,K为圈数, A基数
2.映射重复解决方法
1>.链表法 在重复位置后添加新节点
2>.开放寻址 按照某种规则向后或左右探测,若空则放
注:链表法在删除时方便,开放寻址删除后,新节点进来有可能占有原来删除的位置,如果有其它操作可能会不便,所以需要设标记之类
(1)线性探测 一位一位向后探测 h(k,i)=(h(k,0)+i) mod m