布隆过滤器是一种基于 Hash 的高效查找结构,能够快速回答“某个元素是否在一个集合内”的问题,布隆过滤器因为其高效性大量应用于安全和隐私保护领域,例如信息检索、注册等。 布隆过滤器采用了多个 Hash 函数来提高空间利用率,对于一个给定输入来说,通过多个Hash 函数计算出多个地址,并分别在位串的这些地址上标记为 1。当需要进行查找时,则进行同样的哈希计算,并查看对应元素,若是都为 1,则说明较大概率是存在该输入的。布隆过滤器相对于单个 Hash 算法的查找,大大提高了空间利用率,可以使用较少的空间来表示较大集合的存在关系。 具体地,假设存在 k 个哈希函数{h1,h2,…,hk}和一组元素{x1,x2,…,xk},通过这 k 个 Hash 函数将这一组元素映射到布隆过滤器中,并将对应位置设为 1,具体操作如图 2.4 所示。
元素的添加:如图 2.4 所示,将元素组中的元素 x1 经过 k 次哈希得到 k 个哈希值{h1(x1),h2(x1),…,hk(x1)},然后根据这些值找到对应位置,并将相应位置设为 1 。 元素的查询:经过上一步骤,x1 已经被添加到布隆过滤器中,接下来要查询 x1 是否已经存在于布隆过滤器中。首先,按照相同的方式计算该元素的 k 个哈希值,并将其表示为{h1(x1),h2(x1),…,hk(x1)},随后找到相应位置并检查该位置是否已经全部置 1。如果其中有 0 存在,则说明该元素不曾被添加到布隆过滤器中,否则,可以证明 x1 已被存储在布隆过滤器中。