【发布时间】:2017-05-03 16:01:58
【问题描述】:
我一直在尝试从这个伪代码中了解杜鹃散列插入的工作原理:
procedure insert(x)
if lookup(x) then return
loop MaxLoop times
x ↔ T1[h1(x)]
if x = ⊥ then return
x ↔ T2[h2(x)]
if x = ⊥ then return
end loop
rehash(); insert(x);
end
在此在线resource 的第 4 页中找到。我想知道是否有人可以解释MaxLoop下的代码?
我对算法的看法如下:
- 尝试使用散列函数
h1(x)在两个表的第一个中插入键 - 如果它们发生冲突,尝试插入到第二个表中,使用
h2(x) - 如果他们是第二张表中的冲突,则插入回第一张表中,并踢出之前的占用键。
- 不断重复上述步骤,直到插入钥匙。如果出现循环,则重新哈希表并重新开始。
我只是不明白这些步骤是如何进入 MaxLoop? 下的代码的,尤其是像 x ↔ T1[h1(x)] 和 x ↔ T2[h2(x)] 这样的行,它们是交换值。
如果可能,我们将不胜感激任何更简单的伪代码版本/解释,因为很难从伪代码逐步理解该算法。
【问题讨论】: