【发布时间】:2023-04-04 05:58:01
【问题描述】:
我已阅读有关哈希表和开放地址的信息。如果要在大小为 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)
你会遇到冲突,因为索引 5 上已经有东西了。
如果您使用线性探测,您将执行 hashfunction = (key+i) modulus N where i = 0,1,2.. 直到您在哈希表中找到一个空白位置。然后 44 将被插入到索引 7 处。
如果你删除 32,然后你想删除 44。你首先查看hashfunction(44)=5 - 那不是 44,然后hashfunction(44 + 1) = 6 - 那是空的。然后你可能会认为 44 已经消失了。如何在哈希表中标记一个位置,该位置不是真正的空,但不包含键,并且您应该在下一个索引处继续寻找 44?
如果您随后需要在索引 6 处插入另一个键,那么该键只会覆盖哈希表中的“标记”。
你可以用什么来标记索引 - 说这里是一个键,但已被删除 - 所以你继续查看下一个索引?您不能只写 null 或 0,因为您认为键已被删除 (null) 或值为 0 的键已覆盖 44。
【问题讨论】: