乘法哈希法对应的哈希函数h(k)=(A∗kmod 2w)rsh(w−r)h(k)=(A*k\mod 2^w )rsh(w-r)h(k)=(A∗kmod2w)rsh(w−r)
www为计算机的每一个字的字节长度,即计算机位数,常见的有32位和64位
AAA是一个常数,满足:AAA在二进制下的长度为www位
rrr是一个与哈希表大小有关的常数,设哈希表长度为mmm,r=⌈log2m⌉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)}A∗k=1011001(2)∗1101011(2)=10010100110011(2),可以看到A∗kA*kA∗k在二进制下长度为2w2w2w,实际上,这不是偶然,两个www位二进制数相乘得到的是2w2w2w位的二进制数。
A∗kmod2w=10010100110011(2)mod 27A*kmod2^w=10010100110011_{(2)}\mod2^7A∗kmod2w=10010100110011(2)mod27,二进制数对2w2^w2w取余,只需要截取原二进制数的后www位,这里得到0110011(2)0110011_{(2)}0110011(2)
右移w−r位w-r位w−r位,即右移4位,得到011(2)011_{(2)}011(2),对应十进制数为3
乘法哈希法的优点在于其计算效率较高
理解乘法哈希法:高效散列策略
乘法哈希法是一种高效的哈希计算方法,哈希函数表达式为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。乘法哈希法因其高效性在数据结构和算法中被广泛应用。
197

被折叠的 条评论
为什么被折叠?



