为什么开放寻址哈希表中需要墓碑?

问题描述 投票:0回答:1

对于删除,我会继续搜索,直到到达最后一个占用的单元格,然后我会将其与我之前遇到的要删除的值交换并清除最后一个单元格。我根本不知道为什么需要墓碑。

algorithm data-structures hashtable
1个回答
0
投票

因为同一个存储桶可以成为任意数量的哈希存储桶的碰撞后搜索链的一部分。当您“清除最后一个单元格”时,通过该存储桶的所有冲突搜索链将看到已清除的“单元格”(存储桶),并且如果它们遵循通常的哈希表逻辑,它们将停止搜索(并且不会注意到其他相同的-hashed-to-bucket content),如果他们不停止搜索,所有查找的效率都会降低,因为他们使用一些奇怪的逻辑来确定何时停止。最简单的情况 - 线性探测:您可以找到一组元素并将它们移动到正确的位置,以便将来的查找工作 - 这只是更主动的工作,以后可能有用也可能没有用。有时懒惰是好的(例如,您可以将表增长到在墓碑变得有问题之前重新散列的程度)。

© www.soinside.com 2019 - 2024. All rights reserved.