Bloom Filter算法实现

Bloom Filter

Bloom Filter是由Bloom在1970年提出的一种快速查找算法,通过多个hash算法来共同判断一个元素(字符串)是否在这个集合内,空间利用效率很高。Bloomfilter中保存了一个n位的bit数组, 当一个元素被加到这个集合时,这个元素的key通过k个hash算法生成k个值,然后将内存数组对应的k个位置置1。判断一个元素是否在集合中,只需要查看Bloomfilter的内存数组k个位置是否全为1。当其中一个不是1时,此元素不在集合中。bloomfilter判断一个元素属于当前集合时,存在一定的误差率e。

误差率e

bloom filter-math详细的推倒了误差率e和集合元素n,bit数组m以及hash算法个数之间的关系。总结如下:

e = (1 - ((1 - 1/ m) ^ kn))^k ~= (1 - e^(-kn/m))^k
k = (m / n) * ln2 //k最优解公式
m>=nlg(1/E)*lge // 当误差率e<E时,m和n的关系
...
e < 0.1: k = 3.321928, m/n = 4.79
e < 0.01: k = 6.643856, m/n = 9.58
e < 0.001: k = 9.965784, m/n = 14.37

实现

Bloom Filter基于简单的加法Hash算法实现了一个Bloom Filter。通过给定误差率e和集合amount生成最优的Bloom filter。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 教你如何迅速秒杀掉:99%的海量数据处理面试题 本文经过大量细致的优化后,收录于我的新书《编程之法》第六章中,新书...
    Helen_Cat阅读 7,455评论 1 39
  • 1. 前言 Bloom Filter的名字早有耳闻,但一直没看实现原理。今天乘地铁时心血来潮看了算法,顿时被其简单...
    kophy阅读 10,805评论 5 29
  • (一)——开篇 大数据量的问题是很多面试笔试中经常出现的问题,比如baidu google 腾讯 这样的一些涉及到...
    零一间阅读 746评论 0 5
  • 布隆过滤器 Bloom Filter 布隆过滤器,用来判断一个元素是否在集合中。它的特点是节省空间,但是有误判。有...
    周肃阅读 4,662评论 0 5
  • 第一部分、十道海量数据处理面试题 1、海量日志数据,提取出某日访问百度次数最多的那个IP。 此题,在我之前的一篇文...
    零一间阅读 935评论 0 5