根据Cuckoo散列插入工作原理的留档,如果要使用散列函数h1将value e1插入到table1的位置h1(key1),并且h1(key1)已经被占用,因为(key2, value e2)被插入使得h1(key2)=h1(key1),则Cuckoo散列算法计算h2(key2)并尝试在table2的位置h2(key2)插入value e2。此过程重复。
所描述的查找算法是:
function lookup(x)
return T1[h1(x)] = x ∨ T2[h2(x)] = x
end
但是,当查找key2的值时,vale2可以在h1(key2)或h2(key2)中。如果h1(key1)=h1(key2),那么h1(key1)可以是vale1(发生驱逐)或vale2(没有驱逐)。Cuckoo哈希算法如何知道要查找哪个表来查找value e2?
代码似乎首先在T2返回值,如果失败,它会在T1返回值。
function lookup(x)
return T1[h1(x)] = x ∨ T2[h2(x)] = x
end
只有一种方法可以找出答案:检查两个位置。或者一般来说,所有key2
可能去过的位置。