我正在尝试了解开放式寻址方法。我指的是T. H. Cormen关于该主题的书,该书指出在公开寻址中很难删除。我完全陷入这一段:
我不明白请举例说明。
最佳答案
假设hash(x) = hash(y) = hash(z) = i
。并假设先插入x
,然后插入y
,然后再插入z
。
在开放式寻址中:table[i] = x
,table[i+1] = y
,table[i+2] = z
。
现在,假设您要删除x
,并将其设置回NULL
。
稍后,您将搜索z
,将发现hash(z) = i
和table[i] = NULL
,并且将返回错误的答案:z
不在表中。
为了克服这个问题,您需要使用一个特殊的标记设置table[i]
,该标记指示搜索功能以继续查看索引i+1
,因为那里可能存在其哈希也是i
的元素。
关于algorithm - 哈希表:为什么在开放式寻址方案中很难删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9127207/