hash函数的设计思想与方法

hash函数的设计思想及方法

hash函数依赖于键的类型。对于每一种可能使用的键
  我们需要不同的hash函数。为了高效,同常避免
使用显示类型转换,尽力代之以将键视为机器字的
二进制正数表示的思想,这样有利于对其使用算术
运算。一个优秀的hash函数应该考虑到键的所有位,
尤其对于由字符组成的键。要计算出长键的取模
哈希函数,可以将键分块转换。或者用两个或三个
不同的hash函数,进行多次hash以减少键的冲突。

1、键是0-1的浮点数:
   将键乘以M,然后就近取整(下取整)得到介于0到M-1之间的
一个地址值。
   对于两个固定的任意数s和t,若键在s和t之间
,这时可以把键值减去s后,在除以(t-s),转换到
0-1之间,然后乘以M得到一个表的地址。

2、键是w位的整数:
   1)可以把它变成浮点数, 然后除以2的w次方,
得到介于0-1之间的浮点数。
   2)这种简单方法是选用质数M作为地址表长。
对任意整数键k,求k除以M的余数。
   3)对于浮点数,也可以使用模哈希。如果键值
在一个较小的范围内,可以把它们按比例缩放到
0-1的范围,再乘以2的w次方,得到一个w位的整数值,
再使用模哈希。
    只要能够访问键中的各个位,模哈希法就适用。
实现取模很普通,只是要求表大小为素数。
   4)用0到1之间的一个常数乘以键,再求M的余数
即h(k) = [ka] mod M. a = 0.618033..(黄金比)



你可能感兴趣的:(数据结构)