Bloom Filter算法
来源:互联网 发布:sql server log 编辑:程序博客网 时间:2024/05/16 04:36
Bloom Filter 数据结构广泛地应用于网络技术中,它是由 Burton Bloom 在 1970 年提出来的。
它的优点是可以有效地节省空间,缺点是不能做到精确无误,不过这个看似很郁闷的缺点却可以使用调节参数的方法有效控制,
也可以通过不同的应用手段来避免差错。Bloom Filter 数据结构有很多应用,将在下一篇文章里叙述,
而这篇文章将简要叙述这个算法的原理和分析。
问题定义:如何用简单节省的方法将一个集合中的所有元素表述出来?
原理:有一个集合 S = ( x1, x2, ... , xn), 用一个 n bit 的数组把这个集合表示出来。
使用 k 个独立的哈希函数,将 S 中的每个元素 xi 映射到这个 n bit 的数组中的某一位上,
对于 S 中的每个元素要做 k 次哈希。n bit 的数组初始化每一位为 0 。
如图所示:
0 0 0 0 0 0 0 0 0 0 0 0
x2_______________
x1________| | |
| | | | |
0 1 0 1 0 1 0 1 0 0 1 0
x2'_______________
x1'______| | |
| | | | |
0 1 0 1 0 1 0 1 0 0 1 0
从上图可见,x1 , x2 被映射到 n-bit 中,来了两个查询,x1' 和 x2' ,
对这两个查询也分别做 k 个哈希映射,结果 x1' 对应的值不全是 1 ,
这说明在集合S中肯定不存在和 x1' 相同的元素。而 x2' 对应的 bit 都是1,这说明 x2' 有可能存在于集合中。
但是它不存在的可能性也是有的,因为不能保证不同的元素的哈希值不同。
下面是几个关于 bloom filter 的延伸分析。
1)使用 bloom filter 可以做集合的并、交运算。只需将 n-bit 数组 OR 或 AND 就可以了。
但是结果并不精确。
2)bloom filter 有时会用在描述一个变化的集合上。
添加一个新的集合元素进入 bloom filter 很容易,而删除从集合中删除一个元素,
却不是那么简单,因为会附带着把其他元素的信息也删除掉。为了解决这个问题,
使用多个 bit 位取代使用一个 bit 位。每次映射到这个位置,就加 1 。
}
Bloom Filter是可作为URL排重算法的一种算法.
它的基本思想来源于Hash表.但又不同.
Hash表的思想是通过散过函数快速定位的Hash桶位置.如果Hash冲突则开链表保存.
基本上一个合适的Hash函数,和合适的Hash桶大小,会使Hash冲突变得很小.
因而Hash表具有极快速的添加,查找,删除功能.也非常适合用于URL排重. 但是Hash表的实现空间效率不好.
而Bloom Filter是一种Hash表思想的延伸.它并不通过Hash表开链表的形式来解决冲突.
而是用多个Hash函数来计算数据,而取得多个Hash数组的下标,并标记,以多个Hash函数的计算结果来稀释冲突的机率.
例如用10个Hash函数分别计算同一个数据,而得到10个数组下标,通过判断这十个下标相对应的标记位的标记即可判断是否存在.
- Bloom filter算法简介
- Bloom Filter算法
- bloom filter算法
- Bloom-Filter算法
- Bloom-Filter算法
- Bloom Filter算法
- Bloom Filter算法
- 算法: Bloom filter
- Bloom Filter算法
- Bloom-Filter算法简介
- Bloom Filter算法
- Bloom Filter算法
- Bloom Filter算法学习
- Bloom Filter算法
- Bloom Filter算法
- Bloom-Filter算法 简介
- Bloom Filter算法
- Bloom Filter算法
- CDN总结之二
- 邮件 黑名单 白名单 灰名单
- SQL窗口函数——SQL Cookbook读书笔记之一
- 基于J2EE技术平台免费ERP软件---2BizBox
- actionMQ 使用 转载
- Bloom Filter算法
- 更改注册表后立即生效
- 配件厂商Case-Mate的配件图片泄露了iPhone 5的设计
- 降低系统服务的运行权限
- 驱动程序添加到内核
- WinCE BSP工程文件分析
- html在线编辑器
- 曾經瀏覽過的Blog
- 一劳永逸地激活NOD32,从此不需要NOD32激活码