哈希表(散列表)之乘法哈希(散列)法

理解乘法哈希法:高效散列策略
乘法哈希法是一种高效的哈希计算方法,哈希函数表达式为h(k)=(A*k mod 2^w)^rsh(w-r)。其中,w代表计算机字节长度,A是满足特定条件的w位二进制常数,r与哈希表大小m相关,r=⌈log2m⌉。举例说明,当m=8,w=7,A=1011001(2),k=1101011(2)时,经过计算得到的哈希值为3。乘法哈希法因其高效性在数据结构和算法中被广泛应用。

乘法哈希法对应的哈希函数h(k)=(A∗kmod  2w)rsh(w−r)h(k)=(A*k\mod 2^w )rsh(w-r)h(k)=(Akmod2w)rsh(wr)

www为计算机的每一个字的字节长度,即计算机位数,常见的有32位和64位

AAA是一个常数,满足:AAA在二进制下的长度为www

rrr是一个与哈希表大小有关的常数,设哈希表长度为mmmr=⌈log⁡2m⌉r=\lceil\log_2 m\rceilr=log2m

rshrshrsh是右移操作,在C++编程语言中的对应代码为>>

举例说明:
假定m=8m=8m=8,则r=3r=3r=3;假定w=7w=7w=7(世界上并不存在7位的计算机),选取A=1011001(2)A=1011001_{(2)}A=1011001(2),若k=1101011(2)k=1101011_{(2)}k=1101011(2)
哈希函数的计算如下:A∗k=1011001(2)∗1101011(2)=10010100110011(2)A*k=1011001_{(2)}*1101011_{(2)}=10010100110011 _{(2)}Ak=1011001(2)1101011(2)=10010100110011(2),可以看到A∗kA*kAk在二进制下长度为2w2w2w,实际上,这不是偶然,两个www位二进制数相乘得到的是2w2w2w位的二进制数。
A∗kmod2w=10010100110011(2)mod  27A*kmod2^w=10010100110011_{(2)}\mod2^7Akmod2w=10010100110011(2)mod27,二进制数对2w2^w2w取余,只需要截取原二进制数的后www位,这里得到0110011(2)0110011_{(2)}0110011(2)
右移w−r位w-r位wr,即右移4位,得到011(2)011_{(2)}011(2),对应十进制数为3

乘法哈希法的优点在于其计算效率较高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值