概念
布鲁姆过滤器是一种用于关系查询的空间高效的数据结构。
它是由一个初始值为0的 P P P位的数组和 H H H个独立的哈希函数 h i h_i hi组成,哈希函数的范围为 ( 0 , 1 , 2 , . . . , P − 1 ) , i = 1 , 2 , . . . , H (0,1,2,...,P-1), i=1,2,...,H (0,1,2,...,P−1),i=1,2,...,H。 对于数据集 S S S中的元素 x x x, 它在布鲁姆过滤器中的 H H H个位置 h i ( x ) ( i = 1 , 2 , . . . , H ) h_i(x)(i=1,2,...,H) hi(x)(i=1,2,...,H)被设置为1。
为了查询元素
y
y
y是否属于数据集
S
S
S, 检查y所在的
H
H
H个位置
h
i
(
y
)
(
i
=
1
,
2
,
.
.
.
,
H
)
h_i(y)(i=1,2,...,H)
hi(y)(i=1,2,...,H)是否全为1, 若是,则y属于集合S。
如图, 由于
y
y
y所在的位置存在0, 所以
y
y
y不属于
S
S
S。
尽管布鲁姆过滤器因为哈希函数冲突导致存在一定的误报,但由于布鲁姆过滤器的查询速度快,占用空间小的优势,仍使其成为关系查询中常用的数据结构。
如果检测结果为是,该元素不一定在集合中;但如果检测结果为否,该元素一定不在集合中。因此Bloom filter具有100%的召回率。
每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况,