考虑将键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放入哈希表。在这种情况下我该怎么办
答案 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