【笔记】关于构造一个有效的hash函数

如果采用:

hashresult=(random1*key+random2)mod B

的形式的话,B尽量是一个质数。因为如果B和大部分(random1*key+random2)都具有公因子,将导致hash不均匀。B为(random1*key+random2)的因子这种情况也需要考虑,但是使得B为质数减少了结果不随机的情况。

B的值为小于桶数目的最大质数

例如需要将行排列重新转换时,“行数为质数时才会发生真正的转换”,这时尝试取小于等于行数的质数。必须含有random1和random2。也可以直接mod行数。

可以转化数字的排列,如123改为312来进行哈希,或者寻找key的规律。哈希时是否使用随机数得视情况而定,但B最好一定是质数。

将字符转换为数字:转为ASCII或Unicode码。如果B较大,则可以将字符串拆分为多个组,每个组包含多个字符,一组字符连在一起看成一个整数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值