我一直在尝试从这个伪代码中学习布谷鸟哈希插入的工作原理:
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)]
之类的代码,它们是交换值。
如果可能的话,可以理解伪代码的任何类型的更简单的版本/解释,因为难以从伪代码逐步理解该算法。
答案 0 :(得分:2)
正如您所注意到的,算法在每个点处交换要插入的值以及哈希表中的槽。它不会检查插槽是否为空,只检查该值是否为。
所以循环的更好描述是:
实际上,插入是在两个表之间形成锯齿的路径,在找到空槽(或路径太长)时结束。
这两个表必须具有不同的散列函数,因为如果一个值在两个表中具有相同的散列,则被驱逐的值将进入另一个表中的相同插槽,从而逐出一个值,该值将进入同一个插槽中原始表,使路径的最大长度为2。使用不同的散列函数,被驱逐的值可以在另一个表中的任何位置gi,并且典型的路径长度可以更大。