赞
踩
网上大部分python实现的布隆过滤器库如:pybloomfilter、pybloom 但都是基于py2且哈希函数用的都是sha1类、md5类,效率不如mmh3.所以决定自己实现,
git地址:https://github.com/Sssmeb/BloomFilter
第一次自己实现库 求星星!! 也欢迎讨论、指教!!
布隆过滤器是一种多哈希函数映射的快速查找算法,通常应用在一些需要快速判断某个元素是否属于集合,但并不严格要求100%正确的场合。
本质上是一种数据结构,比较巧妙的概率型数据结构。
布隆过滤器可能会出现误判,但不会漏判。即,如果过滤器判断该元素不在集合中,则元素一定不在集合中,但如果过滤器判断该元素在集合中,有一定的概率判断错误(在合适的参数情况下,误判率可以降低到0.000级别甚至更低)。
因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter相比于其他常见的算法极大节省了空间(相较于直接存储,可节省上千倍的空间)。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是存在误识别率和删除困难。
常见适用的场景主要利用布隆过滤器减少磁盘io或网络请求等:
一般将数据存储用做去重判断的方法有:
当数据量较小时,前3种方法都是不错的选择。但是当数据量非常大时(几G、甚至几十G)会出现存储瓶颈。
当数据量较大时,上述四种方法的表现:
基于以上的背景,可以看到:当数据量非常大时,方法4是较好的选择。但该较大的问题是冲突率高,为了降低冲突,Bloom Filter使用多个哈希函数,而不是一个。
总结BloomFilter的核心思想:
创建一个m位的BitSet,先将所有位初始化为0
插入数据流程:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。