布隆过滤

最近经常在别人的文章中看到布隆过滤,看了一些应用场景,觉得这个东西还真是在特定的情况能发挥超常的作用。

比如我们在刷今日头条的时候,我们看完一段,然后下刷,头条就推荐一些新文章给我们。

头条有无数个文章,我们也读了一些文章,那么头条是怎么做到不推荐重复文章给我们的呢?这里就是用到布隆过滤的时候了。

 

先来个官方的解释:https://en.wikipedia.org/wiki/Bloom_filter

布隆过滤呢,是布隆这个人在1970提出来的一种数据结构,可以用来计算一个是不是包含在一个超大的集合中,但是有一定的误差。

如果计算到元素不在集合中,那么这个元素一定不在集合中;

如果计算到元素在集合中,那么这个元素可能在集合中。

 

假如我们有m个元素,现在要检查元素x是否在m中。那么布隆是怎么计算检查的呢?

1,建一个长度为n的数组,元素全部为0,

2,h个哈希算法,每个算法都把m中的元素hash成整数N

3,把数组的N元素设置成1

4,增加的时候,再用h个哈希算法,算出h个整数N,再把数组的元素N设置成1

查找时,把元素x,用h个哈希算法,算出h个整数N,如果数组的N元素某个为0,则我们认为x不在m中

这样我们的布隆过滤的数据结构就做好了。从中我们可以看到一些布隆过滤的优点:

1,没有存储m个元素的值

2,速度比较快

缺点就是有时候不准。m的数量越来越多,就越不准确。

有点像现在互联网分布式系统中的CAP理论

CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得 。

 

posted @ 2018-12-11 15:57  JustDotNet  阅读(339)  评论(0编辑  收藏  举报