简单的构造哈希函数

除法散列法

最直观的一种。公式:

index=value%16

求模其实是通过一个除法运算得到的,所以叫除法散列法。

平方散列法

求index是非常频繁,而乘法的运算要比除法来得省时,可以考虑百除法换成乘法和位移操作。公式:

index=(value*value)>>28

value如果很大,value*value不会溢出吗?答案是会的,但这个乘法根本不会关心溢出,因为这根本不是为了获取相乘结果,而是为了获取index。

斐波那契散列法

找出一个理想的乘数,而不是拿value本身当做乘数。对于16位整数而言,这个乘数是40503,对于32位整数而言,这个乘数是2654435769,对于64位整数而言,这个乘数是11400714819323198485。这几个“理想乘数”是如何得出来的呢?这跟一个法则有关,叫黄金分割法则,而描述黄金分割法则的最经典表达式无疑就是著名的斐波那契数列。

参考

1.哈希表(Hash Table)及散列法(Hashing)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值