2012-05-11 62 views
0

考虑将键10,22,31,9,15,28,62,88插入到长度为m = 11的 散列表中,使用开放寻址哈希 函数h(k) = k mod 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 mod 11,也就是9.自9以后我就不能放9。然后我尝试给出h2(9)= 1 +(9 mod(11-1))的双散列函数,它是10,它又一次消失了。所以我仍然不能把9放入哈希表。在这种情况下我该怎么做。

回答

0

最后,我可以用维基解释找到答案。 http://en.wikipedia.org/wiki/Double_hashing

小时(9)= 9模11,其为9

H2(9)= 1 +(9 MOD(11-1)),它是10

所以关键具有应(9 + 10)模11,其为8

然后

8 - > 9

3

使用两个散列函数是这样的:

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) 
+0

感谢您的回答。我会检查这一点。 –

+0

谢谢,我发现我将它作为答案发布的方式。 –