小编Ann*_*nne的帖子

使用线性探测时处理哈希冲突

我已经阅读了关于哈希表和开放式adrdessing的内容.如果要在大小为13的哈希表中插入密钥:18,32,44:

18 gets index 5 (18 modulus 13 = 5)
32 gets index 6 (32 modulus 13 = 6)
44 gets index 5 (44 modulus 13 = 5)
Run Code Online (Sandbox Code Playgroud)

你会得到一个碰撞,因为索引5上已有东西.

如果你使用线性探测,你会做到这一点hashfunction = (key+i) modulus N,i = 0,1,2..直到你在哈希表中找到一个空位.然后将在索引7处插入44.

如果你删除32,然后你想要删除44.你开始看hashfunction(44)=5- 那不是44,然后hashfunction(44 + 1) = 6- 那是空的.然后你可能会认为44已经消失了.你如何在哈希表中标记一个地方,该地方不是真的空,但不包含密钥,你应该继续在下一个索引寻找44?

如果您需要在索引6处插入另一个键,则该键只会覆盖哈希表中的"标记".

您可以使用什么来标记索引 - 这里说的是关键,但已被删除 - 所以你继续看下一个索引?您不能只写null或0,因为您认为密钥已被删除(null)或者值为0的键已被覆盖44.

java hashtable

4
推荐指数
1
解决办法
2984
查看次数

标签 统计

hashtable ×1

java ×1