hash函数的设计思想与方法

本文探讨了哈希函数的设计思想及其在不同键类型中的应用方法。针对浮点数和整数类型的键,介绍了多种高效的哈希算法。包括直接取整、模哈希等,并强调了优秀哈希函数应充分利用键的所有位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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..(黄金比)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值