头图

布隆过滤器(Bloom Filter)

bloom算法类似一个hash set, 用来判断某个元素是否在某个集合中. bloom不需要存储元素的值, 而是对于每个元素用k个比特位来存储其标志, 用来判断元素是否在集合中.
布隆过滤器算法:
1.首先需要k个hash函数, 每个函数可以把元素散列成1个整数
2.初始化时, 需要一个长度为n比特的数组, 每个比特位初始化为0
3.当一个元素加入集合时, 用k个hash函数计算出k个散列值, 并把比特数组中对应的比特位置为1
4.判断元素是否在集合中时, 只需要查询比特数组中对应的k个比特位, 如果所有的比特位都为1, 表示集合中存在这个元素
image.png

介绍

布隆过滤器(Bloom Filter)是由布隆在1970年提出的. 它由一个很长的二进制向量和一系列随机映射函数组成, 布隆过滤器可以检索一个元素是否在一个集合中.
优点:相比于其他数据结构, 布隆过滤器在时间和空间方面都有巨大的优势(都是常数)
缺点:有一定的误识别率(Bloom Filter报告元素存在于集合中, 但实际上并不存在)和删除困难, 但不会错误识别(如果元素确实不存在于集合中, Bloom Filter不会报告该元素存在于集合中)


布隆过滤器用例

  • Google 著名的分布式数据库 Bigtable 使用了布隆过滤器来查找不存在的行或列,以减少磁盘查找的IO次数
  • Google Chrome浏览器使用了布隆过滤器加速安全浏览服务
  • 识别垃圾邮件,只要是邮箱在黑名单中的邮件,就识别为垃圾邮件。假设黑名单的数量是数以亿计的,存放起来就是非常耗费存储空间的,布隆过滤器则是一个较好的解决方案。把所有黑名单都放在布隆过滤器中,再收到邮件时,判断邮件地址是否在布隆过滤器中即可。
  • 在很多的Key-Value系统中也使用了布隆过滤器来加快查询服务,如HBase, 一般而言,Value 保存在磁盘中, 访问磁盘需要花费大量时间, 然而使用布隆过滤器可以快速判断某个Key对应的Value是否存在, 因此可以避免很多不必要的磁盘IO操作, 只是引入布隆过滤器image.png

韩二愣子
7 声望0 粉丝

天南越国镜州青牛镇五里沟人氏,小名二愣子,天南地域燕族人。