我正在尝试了解开放式寻址方法。我指的是T. H. Cormen关于该主题的书,该书指出在公开寻址中很难删除。我完全陷入这一段:



我不明白请举例说明。

最佳答案

假设hash(x) = hash(y) = hash(z) = i。并假设先插入x,然后插入y,然后再插入z
在开放式寻址中:table[i] = xtable[i+1] = ytable[i+2] = z

现在,假设您要删除x,并将其设置回NULL

稍后,您将搜索z,将发现hash(z) = itable[i] = NULL,并且将返回错误的答案:z不在表中。

为了克服这个问题,您需要使用一个特殊的标记设置table[i],该标记指示搜索功能以继续查看索引i+1,因为那里可能存在其哈希也是i的元素。

关于algorithm - 哈希表:为什么在开放式寻址方案中很难删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9127207/

10-12 17:27