通俗易懂地了解 Bloom filter

Bloom filter 的作用就是查找某个元素是否有可能在该集合中

比如我们有一个 10000 长度的数组,我们想要查找 "Hello" 字符串是否在这个数组中,那我们就必须要通过循环对比来判断,这样会非常的浪费时间

这个问题可以通过 Bloom filter 解决

Bloom filter 的特点是:有可能误判但一定不会漏判,换句话说就是查询返回的结果 “可能在集合中” 或 “绝对不在集合中”。

原理很简单,我们先创建一个长度是10的数组

const arr = [0,0,0,0,0,0,0,0,0,0]

然后我们假设:

a => 1

b => 2

c => 3

d => 4

e => 5

...

z => 24

然后假设集合里只有 a,z 和 ac

我们就将 a 变成 1,然后用 1 取余数组的长度,也就是 1 % 10 = 1,然后将数组下标为 1 的数值变成1。

将 z 变成 24,然后用 24 取余数组的长度,也就是 24 % 10 = 1,然后将数组下标为 4 的数值变成1。

将 ac 变成 13,然后用 13 取余数组的长度,也就是 13 % 10 = 3,然后将数组下标为 3 的数值变成1。

const arr = [0,1,0,1,1,0,0,0,0,0,0]

接下来我们假设,需要判断 e 在不在这个集合中 

就将 e 变成 5

然后用 5 取余数组的长度,也就是 5 % 10 = 5,然后查看数组下标是 5 的元素是不是 1。

可以看到 arr[5] = 0,所以我们可以判断出 e 绝对不在这个集合中。

=====================

布隆过滤器用来给较多数据的集合做这种判断功能。所以如果数据较少,不需要用它

如果数据过多,那么我们需要更大的集合,不然耦合性会变大,所以要适时而用

猜你喜欢

转载自blog.csdn.net/weixin_42335036/article/details/124837852
今日推荐