为什么墓碑桶可以用来插入?

问题描述

https://research.cs.vt.edu/AVresearch/hashing/deletion.php

上面的网页是这样说的。

“如果在沿着探测序列搜索时遇到墓碑,则搜索过程继续搜索。当插入过程中遇到墓碑时,该槽可用于存储新记录。”

我不太明白为什么第二句话有效。假设三个键 k1、k2、k3 都具有相同的哈希值。通过开放寻址线性探测,它们被插入到哈希表中。哈希表桶看起来像这样。 k1 位于哈希值所指向的位置。

... k1 k2 k3 ...

现在删除 k1。哈希表变成如下,其中T表示墓碑。

... T k2 k3 ...

然后,我再次插入 k3,它首先到达 T 然后使用它,所以我最终在哈希表中得到了两个 k3。这对我来说没有意义。

... k3 k2 k3 ...

谁能解释为什么第二句话有意义?

解决方法

“然后,我再次插入 k3”

将其与 “当插入过程中遇到墓碑时,该槽可用于存储新记录。”相关联。 - 这不是一个简单的 if-then 规则在存储期间应用 -按桶迭代;只有在更大的意义上,“插入期间”是指搜索墓碑和现有但不同的元素,直到找到未使用的存储桶,如果确实到达未使用的存储桶但看到了墓碑,那么只有这样才能你回去覆盖墓碑。