布隆过滤器(Bloom Filter)

布隆过滤器(Bloom Filter) 能排除一个元素一定不属于某个集合

Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive),但如果一个元素不属于这个集合能快速判断出不属于这个集合

初始状态时,Bloom Filter是一个包含m位的位数组,每一位都置为0

 

 为了表达S={x1, x2,,xn}这样一个n个元素的集合,Bloom Filter使用k个相互独立的哈希函数(Hash Function),它们分别将集合中的每个元素映射到{1,,m}的范围中。对任意一个元素x,第i个哈希函数映射的位置hi(x)就会被置为11ik)。注意,如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。在下图中,k=3,且有两个哈希函数选中同一个位置(从左边数第五位)。   

 

 

在判断y是否属于这个集合时,我们对y应用k次哈希函数,如果所有hi(y)的位置都是11ik),那么我们就认为y可能是集合中的元素,如果其中有一个位置是0则就认为一定不是这个集合中的元素。下图中y1就不是集合中的元素。y2或者属于这个集合,或者刚好是一个false positive

 

posted on 2021-01-23 20:08  淡如清风  阅读(56)  评论(0编辑  收藏  举报

导航