布隆过滤器 Bloom Filter
简明: 布隆过滤器是一种数据结构, 一种特殊的集合, 提供插入和查询操作
文章目录
1. 用途:
- 查询一个键是否在集合中,
- 不需要知道键的值,
- 不需要知道准确的答案(他说在有可能实际不在)
- 节约空间
2. 实现:
一个bool数组 + 多个Hash函数
三个操作
1. 初始化
bool数组全为0
2. 插入
一个键, 对每一个Hash都计算一个Hash值, 在bitmap对应位置改成1
3. 查询
一个键, 对每个Hash都计算Hash值, 如果bitmap对应的位置都是1那么就是存在
3. 性质
1. 可能存在假正例(False Positive)
就是查询一个元素在不在集合中时, 布隆说存在这个元素但实际情况是不存在
这种情况的概率为
P
=
(
1
−
e
−
H
N
M
)
H
H
:
哈希函数个数
M
:
B
i
t
M
a
p
的长度
N
:
集合能容纳的个数
P = (1 - e^{-\frac{HN}{M}})^H \\ H: 哈希函数个数\\ M: BitMap的长度\\ N: 集合能容纳的个数\\
P=(1−e−MHN)HH:哈希函数个数M:BitMap的长度N:集合能容纳的个数
2. 不存在假负例(False Negtive)
就是不可能有: 查询一个元素在不在集合中时, 布隆说不存在但实际情况是存在, 就是元素真的存在于集合中, 布隆一定不会犯错说不存在.