【Redis | 第五篇】一篇文章看懂布谷鸟过滤器

在这里插入图片描述

5.布谷鸟过滤器

5.1起源介绍

布谷鸟算法的启发来自于布谷鸟,因为布谷鸟这种鸟很有意思,生出来的孩子自己不养,直接把孩子扔到其他鸟的鸟巢中去了。

但有时候,这些布谷鸟蛋会被被寄宿的鸟妈妈发现,然后就被抛弃;有时候,这些宿主会直接放弃整个鸟巢寻找新住处。然而道高一尺魔高一丈,有些品种的布谷鸟生下来的布谷鸟蛋的颜色和被寄宿的鸟的鸟蛋颜色很像,并且布谷鸟的破壳时间往往比宿主的鸟蛋早,小布谷鸟破壳后会将一些鸟蛋扔出鸟巢以获得更多的食物,小布谷鸟还能模拟宿主鸟孩子的叫声来骗取更多的食物!

简单来说,就是如何更高效地去骗吃骗喝

5.2原理

最简单的布谷鸟哈希结构是一维数组结构,会有 两个 hash 算法 将新来的元素映射到数组的两个位置。

  • 如果两个位置中有一个位置为空,那么就可以将元素直接放进去。‘

  • 但是如果这两个位置都满了,它就不得不「鸠占鹊巢」,随机踢走一个,然后自己霸占了这个位置。

    踢走的那个再经过哈希,找到数组的两个位置,以此类推

5.2.1演示步骤

(1)保存元素(两个位置均为空)

新来的元素a经过hash会落在(A2,B1)的位置,由于A2还没有元素,a直接落入A2

img

(2)保存元素(其中一个位置被占)

新插入元素b的hash会落在(A2,B3),由于A2已经被a占了,所以b会落在b3

img

(3)保存元素(两个位置都被占)

新来元素c的hash为(A2,B3), 由于两个位置都已经被占,它会随机将一个元素挤走,这里挤走了a

img

(4)被挤掉的元素重新找位置

a会重新进行hash,找到还未被占的B1位置

img

从上面可以看出,布谷鸟哈希算法会==帮这些受害者(被挤走的蛋)寻找其它的窝==。因为每一个元素都可以放在两个位置,只要任意一个有空位置,就可以塞进去。所以这个伤心的被挤走的蛋会看看自己的另一个位置有没有空,如果空了,自己挪过去也就皆大欢喜了。

但是如果这个位置也被

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自梦里的一条鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值