Data structures 如果双哈希函数也失败了,我该怎么办

Data structures 如果双哈希函数也失败了,我该怎么办,data-structures,hash,hashtable,double-hashing,Data Structures,Hash,Hashtable,Double Hashing,考虑将键10、22、31、9、15、28、62、88插入到a中 长度为m=11的哈希表,使用带哈希的开放寻址 函数h(k)=k模m。说明插入这些命令的结果 使用h2(k)=1+(k mod(m-1))的双哈希的键 以下是我的方法 0 -> 22 , Since 22 mod 11 = 0 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9 -> 31 , Since 31 mod 11 = 9 10 -&

考虑将键10、22、31、9、15、28、62、88插入到a中 长度为m=11的哈希表,使用带哈希的开放寻址 函数
h(k)=k模m
。说明插入这些命令的结果 使用h2(k)=1+(k mod(m-1))的双哈希的键

以下是我的方法

0 -> 22 , Since 22 mod 11 = 0
1 ->
2 ->
3 ->
4 ->
5 ->
6 ->
7 ->
8 ->
9 -> 31 , Since 31 mod 11 = 9
10 -> 10 , Since 10 mod 11 = 10
好的,当尝试将键9放入哈希表时,问题就出现了


h(9)=9模11,也就是9。我不能放9,因为9已经走了。然后,我尝试使用给定h2(9)=1+(9mod(11-1))的双哈希函数,它是10,然后它又消失了。所以我还是不能把9放入哈希表。在这种情况下我应该怎么做

使用如下两个哈希函数:

hi=(h(key)+i*h1(key))%m 0≤i≤m-1
换言之:每次使用第二个散列函数
h1
的值递增,必要时环绕

因此,要查找密钥的地址列表如下所示:

h(key), h(key)+h1(key), h(key)+2*h1(key), ... , h(key)+n*h1(key)

如下所示使用两个哈希函数:

hi=(h(key)+i*h1(key))%m 0≤i≤m-1
换言之:每次使用第二个散列函数
h1
的值递增,必要时环绕

因此,要查找密钥的地址列表如下所示:

h(key), h(key)+h1(key), h(key)+2*h1(key), ... , h(key)+n*h1(key)

最后,我可以通过维基解释找到答案

h(9)=9模11,也就是9

h2(9)=1+(9模(11-1)),即10

所以键应该是(9+10)mod 11,也就是8

然后


8->9

最后,我可以通过wiki解释找到答案

h(9)=9模11,也就是9

h2(9)=1+(9模(11-1)),即10

所以键应该是(9+10)mod 11,也就是8

然后


8->9

谢谢你的回答。我将对此进行检查。谢谢我找到了将其作为答案发布的方法。如果反复递增
I
仍然无法解决冲突,以至于导致整数溢出,最终导致负索引,该怎么办?那怎么办呢?谢谢你的回答。我将对此进行检查。谢谢我找到了将其作为答案发布的方法。如果反复递增
I
仍然无法解决冲突,以至于导致整数溢出,最终导致负索引,该怎么办?那怎么办呢?