布隆过滤器总结(二)原理和例子
来源:互联网 发布:淘宝一元换购怎么做 编辑:程序博客网 时间:2024/05/01 11:51
布隆过滤器用于字符串去重复,比如网络爬虫抓取时URL去重、邮件提供商反垃圾黑名单Email地址去重。等等。用哈希表也可以用于元素去重,但是占用空间比较大,而且空间使用率只有50%。
布隆过滤器只占哈希表的1/8或1/4的空间复杂度,就能解决同样的问题,但是有一定的误判,而且不能删除已有元素。元素越多,误报率越大,但是不会漏报。对于还需要删除的布隆过滤器,还有Counter Bloom Filter,这个是布隆过滤器的变体,可以删除元素。
布隆过滤器的原理
布隆过滤器需要的是一个位数组(和位图类似)和K个映射函数(和Hash表类似),在初始状态时,对于长度为m的位数组array,它的所有位被置0。
对于有n个元素的集合S={S1,S2...Sn},通过k个映射函数{f1,f2,......fk},将集合S中的每个元素Sj(1<=j<=n)映射为K个值{g1,g2...gk},然后再将位数组array中相对应的array[g1],array[g2]......array[gk]置为1:
如果要查找某个元素item是否在S中,则通过映射函数{f1,f2,...fk}得到k个值{g1,g2...gk},然后再判断array[g1],array[g2]...array[gk]是否都为1,若全为1,则item在S中,否则item不在S中。这个就是布隆过滤器的实现原理。
前面说到过,布隆过滤器会造成一定的误判,因为集合中的若干个元素通过映射之后得到的数值恰巧包括g1,g2,...gk,在这种情况下可能会造成误判,但是概率很小。
总结一下,感觉布隆过滤器的实现原理并不是太复杂,但是映射函数这个东西说的还是比较虚无。对于布隆过滤器的数学证明,数学公式之类的,我还是觉得我研究不了那么深入了。毕竟现阶段水平还不到有时间去研究这么底层的,甚至于底层到和数学打交道的东西,就现阶段来说,只要知道有这样一个东西可用,会用,我就很满足了。
本来此处留空是准备自己写个简易版的布隆过滤器的,但是实在不懂,看来数据结构还远远有待补充。
另外附上一个第三方布隆过滤器控件,地址如下:http://bloomfilter.codeplex.com/
class Program { static void Main(string[] args) { //声明一个布隆过滤器的初始容量包含10000个项目 int capacity = 10000; float errorRate = 0.0001F; //初始化一个布隆过滤器 Filter<string> urlSeen = new Filter<string>(capacity, errorRate, null); //添加数据进入布隆过滤器 urlSeen.Add("www.baidu.com"); urlSeen.Add("www.google.com"); urlSeen.Add("www.qq.com"); Console.WriteLine("请输入网址:"); string str = Console.ReadLine(); //测试布隆过滤器是否记得这个url if (urlSeen.Contains(str)) { Console.WriteLine("此url已经有了!"); } else { Console.WriteLine("此url尚未被收录!"); } Console.ReadKey(); } }
http://blog.csdn.net/lifuxiangcaohui/article/details/42026009
- 布隆过滤器总结(二)原理和例子
- 布隆过滤器总结(二)原理和例子
- 布隆过滤器原理和例子
- 过滤器原理和例子
- 布隆过滤器原理
- 布隆过滤器原理
- Bloom Filter(布隆过滤器)的概念和原理
- 布隆过滤器的原理、实现和探究
- Bloom Filter(布隆过滤器)的概念和原理
- 布隆过滤器(Bloom Filter)的原理和实现
- 布隆过滤器(Bloom Filter)的原理和实现
- 布隆过滤器(Bloom Filter)的原理和实现
- Bloom Filter(布隆过滤器)的概念和原理
- BloomFilter(布隆过滤器)原理和python支持库
- 布隆过滤器原理介绍
- 布隆过滤器-原理介绍
- 布隆过滤器总结(一)详解
- 过滤器学习(概念和例子)
- Android编程判断SD卡是否存在及使用容量查询实现方法
- 物理内存分配与回收(1)
- httpd.conf
- PHP保存图片至服务器
- 16位计数器之元件例化的学习
- 布隆过滤器总结(二)原理和例子
- [笔记] 大型网站技术架构——核心原理与案例分析 [七]
- 指针的指针作用(申请空间)之一
- centos查看系统信息
- 数组名取地址 http://www.oschina.net/question/234345_48794?fromerr=KZCzKcSM
- HandlerInterceptor @Autowired报 null
- test
- 腾讯云新购买后的基本配置
- 验证算法