布隆过滤器
布隆过滤器的实现过程
布隆过滤器的核心思想是通过多个哈希函数和一个位数组来实现的。接下来,我将详细介绍布隆过滤器的工作原理和实现步骤。
1. 定义布隆过滤器结构
布隆过滤器包含两个核心部分:
-
位数组(bit array):一个固定大小的位数组,所有元素的初始值都为0。它用来存储元素的“指纹”。
-
哈希函数(hash functions):用于将元素映射到位数组中的多个位置。
2. 初始化
布隆过滤器首先会创建一个位数组 bit_array,长度为 m,所有位初始化为 0。同时定义 k 个不同的哈希函数,哈希函数分别将输入映射到 [0, m-1] 范围内的不同位置。
3. 添加元素
-
当我们要添加一个元素
x时,布隆过滤器会依次使用k个哈希函数来计算元素x的k个哈希值,这些哈希值将对应到位数组中的k个位置。 -
对应的
k个位置的值会被设置为 1。
步骤:
-
通过每个哈希函数
h_i(x),计算出k个哈希值。 -
对于每个哈希值
h_i(x) % m,将bit_array[h_i(x)]设置为 1。
示例:
假设:
-
位数组大小
m = 10 -
哈希函数数量
k = 3 -
元素
x = "apple"
经过 k = 3 个哈希函数后,假设计算出的哈希值是 [2, 5, 7]。那么我们将位数组的第 2 位、第 5 位和第 7 位设置为 1。
4. 查询元素
查询元素是否在集合中时,同样使用 k 个哈希函数计算出该元素的 k 个哈希值。
-
如果所有哈希值对应的位都为 1,那么布隆过滤器返回 可能存在。
-
如果有任何一个哈希值对应的位为 0,布隆过滤器返回 绝对不存在。
步骤:
-
通过每个哈希函数
h_i(x)计算出k个哈希值。 -
检查位数组中对应的
k个位置是否都为 1。 -
如果全部为 1,返回“可能存在”,否则返回“不存在”。
示例:
对于元素 x = "apple",假设 k = 3,哈希值是 [2, 5, 7]。我们检查位数组的第 2 位、第 5 位和第 7 位:
-
如果这些位置的值都是 1,那么我们会返回“可能存在”。
-
如果任何一个位置是 0,那么就返回“不存在”。

浙公网安备 33010602011771号