1.直接寻址法 取关键字或关键字的某个线性函数为散列地址,即H(key)=key或H(key) = a•key + b,其中a和b为常数(这种散列函数叫做自身函数)。
例如有一个从1到100岁的人口数字统计表,其中可以用年龄作为关键字,哈希函数可以取函数自身。或者有一个解放后出生的人口调查表,关键字是年,哈希函数取关键字加一个常数,H(key)=key+(-1949)。
2.数字分析法 找出数字的规律,利用这些数据构造冲突概率较低的函数。
例如统计员工的生日,可以发现年份是差不多的,所以不能选择年份作为关键字,选月,日造成冲突的可能性小点。
3.平方取中法 取关键字平方后的中间几位作为散列地址。
4.折叠法 将关键字分割成位数相同的几部分,最后一部分位数可以不同,然后取这几部分的叠加和作为散列地址。
5.随机数法 选择一随机函数,取关键字的随机值作为散列地址,通常用于关键字长度不同的场合。
6.留余数法 取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即 H(key) = key MOD p, p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。