DataStructure.BloomFilter
Bloom Filters Ref[1]
1. 简介
Bloom filter(布隆过滤器;有更好的或正确的翻译,告诉我) 是一个数据结构,该数据结构快速并且内存高效,它可以告诉你某个元素是否在集合中。
作为高效的代价,Bloom filter是存在概率的数据结构:它告诉我们某个元素一定不在集合中,或者可能在集合中。
Bloom filter的基本数据结构是Bit Vector。
在Ref[1]中有简单形象的例子来说明Bloom Filter。
1.1 Hash Functions
在Bloom Filter中的hash function应该是独立的并且是均匀分布的。应该选用尽可能快的hash function。(sha1虽然被广泛使用,
但是在Bloom Filter的实现中并不是好的选择)。
hash function有:murmur, fnv, Jenkins Hashes。
1.2 How big should I make my Bloom filter?
false positive rate: (1-e-kn/m)k
false positive rate: 是指假肯定率(Q[1]: false positive rate 是指???)
k: hash function的个数
m: filter中的bits数
n: 已经被插入到filter里的元素个数
1.3 应该使用多少hash function?
hash function越多,bloom filter越慢,bloom filter就越容易被填满。如果hash function太少,就会得到太多的假肯定(false positive)。
由于在创建filter时必须为k选择一个值,你需要对n的变动范围进行界定。一旦范围确定了,仍然需要选择一个潜在的m和k。
幸运地,给定m和n,我们有一个函数来选择k的最佳值:(m/n)ln(2)
接下来选定bloom filter的尺寸/大小:
1. 选择一个n的范围值
2. 为m选择一个值
3. 计算k的最佳值
4. 根据n,m,k来计算error rate。如果该值不可接受,需要返回第二步并修改m的值。
1.4 How fast and space efficient is a Bloom filter?
一个给定有m个bits和k个hash function的Bloom filter,插入和成员身份的测试是O(k)。
2. Bloom Filter的应用案例
[Todo]
Reference
1. Bloom Filters by Example
http://billmill.org/bloomfilter-tutorial/
1.1 http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2011-handling-ridiculous-amounts-of-data-with-probabilistic-data-structures-4899047
1.2 Network Application of Bloom Filter: A Survey
http://citeseer.ist.psu.edu/viewdoc/download;jsessionid=6CA79DD1A90B3EFD3D62ACE5523B99E7?doi=10.1.1.127.9672&rep=rep1&type=pdf
1.3 Less Hashing, Same Performance
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.152.579&rank=1
1.4 Scalable Bloom Filters [AAAA]
http://gsd.di.uminho.pt/members/cbm/ps/dbloom.pdf
1.5
https://sites.google.com/site/murmurhash/
1.6
http://isthe.com/chongo/tech/comp/fnv/
1.7
http://www.burtleburtle.net/bob/hash/doobs.html
2. Bloom Filter [AAAAA]
http://en.wikipedia.org/wiki/Bloom_filter
DataStructure.BloomFilter的更多相关文章
- BloomFilter 与 Cuckoo Filter
BloomFilter 与 CuckooFilter Bloom Filter 原理 Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个相互独立的H ...
- Hbase中的BloomFilter(布隆过滤器)
(1) Bloomfilter在hbase中的作用 Hbase利用bloomfilter来提高随机读(get)的性能,对于顺序读(scan)而言,设置Bloomfilter是没有作用的(0.9 ...
- [转]BloomFilter——大规模数据处理利器
Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合. 一. 实例 为了说明Bl ...
- 基于Redis的BloomFilter算法去重
BloomFilter算法及其适用场景 BloomFilter是利用类似位图或者位集合数据结构来存储数据,利用位数组来简洁的表示一个集合,并且能够快速的判断一个元素是不是已经存在于这个集合.因为基于H ...
- BloomFilter–大规模数据处理利器(转)
BloomFilter–大规模数据处理利器 Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法.通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求1 ...
- BloomFilter——读数学之美札记
之前接触过bitmap,读吴军先生的数学之美,看到了一个更强大的数据结构,布隆过滤器(Bloomfilter),赶紧记下来吧,忘了怪可惜的. bitmap的使用是很有局限性的,往往只能用于海量数值型数 ...
- 【DataStructure In Python】Python实现各种排序算法
使用Python实现直接插入排序.希尔排序.简单选择排序.冒泡排序.快速排序.归并排序.基数排序. #! /usr/bin/env python # DataStructure Sort # Inse ...
- 【DataStructure In Python】Python模拟栈和队列
用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...
- 【DataStructure In Python】Python模拟链表
最近一直在学习Python和Perl这两门语言,两者共同点很多,也有不多.希望通过这样的模拟练习可以让自己更熟悉语言,虽然很多时候觉得这样用Python或者Perl并没有体现这两者的真正价值. #! ...
随机推荐
- python 如何注释
一.单行注释 单行注释以#开头,例如: print 6 #输出6 二.多行注释 (Python的注释只有针对于单行的注释(用#),这是一种变通的方法) 多行注释用三引号' ...
- spring boot 的服务监控
- Monkey测试结果分析【转】
转自[http://www.douban.com/note/257030241/] Monkey测试结果分析 一. 初步分析方法: Monkey测试出现错误后,一般的差错步骤为以下几步: 1. 找到是 ...
- 利用monkeyrunner、python脚本来做多设备多apk适配ui界面截屏的自动化测试
http://www.cnblogs.com/youxilua/archive/2011/11/25/2262715.html
- Redis Cluster 添加/删除 完整折腾步骤
Redis还是挺好玩的,今天测试了集群的添加.删除节点.重分配slot等.更深入的理解redis的游戏规则.步骤繁多,但是详细. 环境解释: 我是在一台Centos 6.9上测试的,各个redis节点 ...
- 用python来分割图片
程序思路: 此次程序主要是利用PIL(Python Image Libraty)这库,来进行图片的处理.PIL是一个功能非常强大的python图像处理标准库,但由于PIL只支持python2.7.如今 ...
- ubuntu下mysql源码编译安装
建议:cpu4核以上,内存4G以上 1. 安装环境:Ubuntu Server 14.10MySQL-5.6.23.tar.gz 2. 安装必备的工具sudo apt-get install make ...
- C#之代码优化
1.if和swith: 区别:1.if语句会执行多次判断,增加CPU的消耗,效率较低:switch只判断一次,效率较高 2.if表示的是一个范围,switch表示一个点 2.for和foreach f ...
- [1.16更新B14特征处理]津南数字制造题目解读及部分思路~~有趣的特征
[1.16更新B14特征处理]津南数字制造题目解读及部分思路--有趣的特征 Article onion啦啦啦 2019-01-17 16:03:38 11 1790 11 首先声明,我并不能保证这些特 ...
- WebForm从客户端中检测到有潜在危险的Request.Form 值的处理办法
从客户端中检测到有潜在危险的 Request.Form 值由于在.net中,Request时出现有HTML或Javascript等字符串时,系统会认为是危险性值.立马报错上面的错误. 如:在网页的Te ...