假设散列表表示为大小为7的数组。我们希望存储由三位数组成的字符串。主散列密钥是第二数字模7的数值。辅助散列密钥是增加1的第三数模4的数值。将以下字符串插入最初为空的哈希表:“111”,“222”,“737”,“323”和“234”。
我的回答:
6 -
111; 1 mod 7 = 1
是正确的吗?
答案 0 :(得分:2)
您可能想提一下您正在使用的哈希类型。我从你的描述中假设它是cuckoo hashing。如果是这种情况,您可以在最后一次插入之前完成。在插入234之前,您有:
0:
1: 111
2: 222
3: 737
4: 323
5:
6:
尝试使用h1
插入234会产生3 mod 7 = 3
的密钥,但是3已经包含373.继续h2
,我们得到4 mod 4 + 1 = 1
但是1已经包含111。此时不再有哈希函数,因此我们在1处插入234并重新执行111。
0:
1: 234
2: 222
3: 737
4: 323
5:
6:
哈希111与h1
再次给出1,h2
给出1 mod 4 + 1 = 2
,但是2已经包含222,所以我们将111存储在2并重新搜索222等等。在这种情况下,最终你会发现所有的钥匙都适合。如果它们的条目并非全部适合(即重新插入进入无限循环),则需要调整表的大小并使用新的散列函数重新散列。
答案 1 :(得分:0)
如果在检查辅助哈希键后仍然存在冲突,我不确定这个问题是什么要求你做的,但我认为它是这样的:
如果在第二次碰撞后前进一个,结果将是