9.4.2 构造哈希函数的方法 四、折叠法 若关键字的位数很多,且每一位上数字分布大致均匀,则可采用移位叠加或间界叠加,即将关键字分成若干部分,然后以它们的叠加和(舍去进位)作为哈希地址。移位叠加是将分割后的每一部分的最低位对齐,然后相加;间界叠加是从一端向另一端沿分割界来回折叠,然后对齐相加。 例如,key = 110108780428895,则其移位叠加得到的哈希地址为321,间界叠加得到的哈希地址为410。(哈希表的表长为1000) |
|
|||||||
五、除留余数法 以关键字被某个数p除后所得余数作为哈希地址。即 Hash(key) = key MOD p 其中,MOD表示"取模"运算,p 为不大于表长的素数或不包含小于20的质因素的合数。 |
若p为含质因子c
的合数,则将使所有含质因子c 的关键字映象到"c 的倍数"的地址上,从而增加了冲突的可能性。 例如,假设哈希表长为10,取 p=9,则关键字序列 {12,39,24,36,81,78,60} 对应的哈希地址依次为:3,3,6,0,0,6,6。显然,H(key)=key%9 对这组关键字不是一个"好"的哈希函数。 |
|||||||
六、随机数法 当关键字不等长时,可取关键字的某个伪随机函数值作为哈希地址。 Hash(key) = random(key) 对于非数值型关键字,则需先将它们转化为数字。实际造表时,采用何种构造哈希函数的方法取决于建表的关键字集合的情况(包括关键字的范围和形态),总的原则是使产生冲突的可能性降到尽可能地小。 |