我正在处理有关打开和关闭哈希表的一些问题,并且遇到了问题。 我必须使用以下输入显示7-bucket哈希表在使用Open哈希和关闭哈希填充时的外观。 1,8,27,64,125,516,343
使用散列函数h(k)= k mod 7
我相信对于开放哈希,结果表看起来像这样:
0 - > 343
1 - > 1 - > 8 - > 64
2 - >
3 - >
4 - >
5 - >
6 - > 27 - > 125 - > 216
我理解这种类型的表格。但是,对于一个封闭的桌子,我知道你应该把这个项目放在下一个可用的桶中。在插入125之前,我已经包含了我认为封闭哈希表应该是什么样子。
0 - >
1 - > 1
2 - > 8
3 - > 64
4 - >
5 - >
6 - > 27
所以现在我必须插入125. 125 mod 7是6.但是6斗中存在碰撞。所以现在我将转移到下一个开放的桶。但是没有一个。我只是在哈希表的开头重新启动,并将其插入到桶0?
答案 0 :(得分:1)
是的,你会“循环”并从头开始。对linear probing here有一个非常好的解释:
考虑上面提到的情况,其中数据'F'具有与数据'D'相同的哈希码。为了解决冲突,add算法需要探测表以便找到第一个空闲空间(在'C'之后)。
考虑上面提到的情况,其中数据'F'具有与数据'D'相同的哈希码。为了解决冲突,add算法需要探测表以便找到第一个空闲空间(在'C'之后)。
如果探测器循环返回,并最终到达它开始的相同元素,则意味着哈希表已满,并且不能再保存更多数据。添加操作将失败。