如果双重散列函数也失败,我该怎么办?

时间:2012-05-11 04:11:16

标签: data-structures hash hashtable double-hashing

  

考虑将键10,22,31,9,15,28,62,88插入到a中   使用散列的开放寻址的长度为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放入哈希表。在这种情况下我该怎么办

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

h(9)= 9 mod 11,即9。

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

所以键应该是(9 + 10)mod 11,即8。

然后

8 - > 9