bloom filter原理
来源:互联网 发布:mac外接显示器不清楚 编辑:程序博客网 时间:2024/05/21 06:20
简介编辑
Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。如果检测结果为是,该元素不一定在集合中;但如果检测结果为否,该元素一定不在集合中。因此Bloom filter具有100%的召回率。这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况,可见 Bloom filter 是牺牲了正确率和时间以节省空间。[1]
2计算方法编辑
如需要判断一个元素是不是在一个集合中,我们通常做法是把所有元素保存下来,然后通过比较知道它是不是在集合内,链表、树都是基于这种思路,当集合内元素个数的变大,我们需要的空间和时间都线性变大,检索速度也越来越慢。 Bloom filter 采用的是哈希函数的方法,将一个元素映射到一个 m 长度的阵列上的一个点,当这个点是 1 时,那么这个元素在集合内,反之则不在集合内。这个方法的缺点就是当检测的元素很多的时候可能有冲突,解决方法就是使用 k 个哈希 函数对应 k 个点,如果所有点都是 1 的话,那么元素在集合内,如果有 0 的话,元素则不在集合内。[1]
3优点缺点编辑
Bloom filter 优点就是它的插入和查询时间都是常数,另外它查询元素却不保存元素本身,具有良好的安全性。它的缺点也是显而易见的,当插入的元素越多,错判“在集合内”的概率就越大了,另外 Bloom filter 也不能删除一个元素,因为多个元素哈希的结果可能在 Bloom filter 结构中占用的是同一个位,如果删除了一个比特位,可能会影响多个元素的检测。[1]
4简单例子编辑
下面是一个简单的 Bloom filter 结构,开始时集合内没有元素
当来了一个元素 a,进行判断,这里哈希函数有两个,计算出对应的比特位上为 0 ,即是 a 不在集合内,将 a 添加进去:
之后的元素,要判断是不是在集合内,也是同 a 一样的方法,只有对元素哈希后对应位置上都是 1 才认为这个元素在集合内(虽然这样可能会误判):
随着元素的插入,Bloom filter 中修改的值变多,出现误判的几率也随之变大,当新来一个元素时,满足其在集合内的条件,即所有对应位都是 1 ,这样就可能有两种情况,一是这个元素就在集合内,没有发生误判;还有一种情况就是发生误判,出现了哈希碰撞,这个元素本不在集合内。[1]
0 0
- 【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概念和原理
- Bloom Filter 原理与应用
- Java查漏补缺系列——abstract class和interface区别
- Power Designer 连接SqlServer 数据库 导出表结构
- IO之File类
- Java 基础之线程池的必要性
- springmvc如何访问到静态的文件,如jpg,js,css
- bloom filter原理
- 安装java memcached client到maven repository
- 不用临时变量,交换两个数。
- 课程实验1 基于java Socket的C/S小程序
- SGU - 196 - Matrix Multiplication (矩阵乘法)
- 搭建dns
- 结构-03. 平面向量加法(10)
- 用c语言实现输入一个十进制数,计算其转换为二进制数后其中包含1的个数
- [BZOJ 1854][SCOI 2010]游戏(二分图最大匹配)