引言
来填上篇文章《一文搞懂布隆过滤器原理》中的坑了,这篇博客我们来详细介绍一下布谷鸟哈希(Cuckoo Hash)和布谷鸟过滤器(Cuckoo Filter)的原理。
这里给出了两篇论文的链接:
- Cuckoo Hashing:https://www.sciencedirect.com/science/article/pii/S0196677403001925
- Cuckoo Filter:https://dl.acm.org/doi/abs/10.1145/2674005.2674994
布谷鸟哈希
为什么布谷鸟哈希起这个名字呢?这是因为布谷鸟生性狡猾又贪婪,它不肯自己筑巢,会把蛋下到别的鸟巢中,而且它的幼鸟也继承它的坏品德,它们通常会比正常的鸟早出生,在出生后幼鸟会将其他鸟蛋kick out,也就是踢出鸟巢,从而能独享"养父母"的食物。
布谷鸟哈希的算法就借鉴于此,当发生哈希碰撞的时候,new element会将old element踢走(kick out),不过被踢走的元素要比鸟蛋幸运,它们还有一个备用位置,当备用位置有元素时,也会将其kick out,如此循环往复,直到被踢的次数达到一个阈值,才确认哈希表已满,并执行