取关键字的某个线性函数为散列地址:Hash(Key)=A*Key + B
优点:简单、均匀 缺点:需要事先知道关键字的分布情况
使用场景:适合查找比较小且连续的情况
设散列表中允许的地址数为m,取一个不大于m,但最接近或者等于m的质数p作为除数,按照哈希函数:Hash(key) =key% p (p<=m),将关键码转换成哈希地址
假设关键字为1234,对它平方就是1522756,抽取中间的3位227作为哈希地址
适用场景:不知道关键字的分布,而位数又不是很大的情况
将关键字从左到右分割成位数相等的几部分(最后一部分位数可以短些),然后将这几部分叠加求和,并按散列表表长,取后几位作为散列地址
适用场景:事先不需要知道关键字的分布,适合关键字位数比较多的情况
选择一个随机函数,取关键字的随机函数值为它的哈希地址,即H(key) =random(key)
适用场景:通常应用于关键字长度不等时采用此法
适用场景:关键字位数比较大的情况,如果事先知道关键字的分布且关键字的若干位分布较均匀的情况
不同关键字通过相同哈希函数计算出相同的哈希地址,该种现象称为哈希冲突或哈希碰撞;
解决哈希冲突两种常见的方法:闭散列法和开散列法