布隆过滤器 (Bloom Filter)

布隆过滤器 (Bloom Filter)

捡破烂的诗人 682 2022-07-13
  • 联系方式:1761430646@qq.com
  • 菜狗摸索,有误勿喷,烦请联系

布隆过滤器

  • 作用:类似于Set集合,判断某个元素是否存在集合中

  • 实现原理

    • 类似于HashMap的实现过程,通过构建一个bit[]数组(初始值为 0 ),以及构造多个散列函数

      布隆过滤器-1

    • 存放某元素时:将要存放的元素通过多个散列函数计算得到多个位置值,并把bit[]对应的位置值置为 1

      布隆过滤器-2

    • 判断某元素是否存在时:也是将此元素通过多个散列函数计算得到多个位置值,然后在bit[]数组对应的位置看是否为 1,如果对应位置中某个为 0,则此元素一定不存在,如果所有对应位置均为 0,则此元素时可能存在

  • 优点:

    • 空间效率和查询时间都远远超过一般的算法
    • 保密性强,布隆过滤器本身不存储元素本身
  • 缺点:

    • 不能删除元素:由于哈希冲突的问题,所以bit[]数组上某个位置上的值为 1,其可能是几个元素共有的,删除后会导致其他元素的误识别

      布隆过滤器-3

    • 元素越多,误报率越大

    • 无法获取元素本身

  • 应用场景:

    • 解决Redis缓存穿透问题
    • 推荐类事物不再推荐
    • 垃圾邮件过滤
  • 使用

    • 现在自己还基本上用不到,先理论为主

# Bloom Filter # 过滤器