目的:当在一个大的数据空间中查询某一个数据时,如果要查询的数据特别多,那么每次都遍历查询该空间,会导致出现慢查及占用大量本地内存,为了解决该现象,使用布隆过滤器。
原理:bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中。
算法实现:
- 首先需要k个hash函数,每个函数可以把key散列成为1个整数
- 初始化时,需要一个长度为n比特的数组,每个比特位初始化为0
- 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为1
- 判断某个key是否在集合时,用k个hash函数计算出k个散列值,并查询数组中对应的比特位,如果所有的比特位都是1,认为在集合中。
优点:
不需要存储key,节省空间
数据量越大越准确
缺点:
- 算法判断key在集合中时,有一定的概率key其实不在集合中
- 无法删除
总结:
集合中查到该数据的比特位为0,结果是该数据一定不存在在该集合中
但是该集合中查到的比特位为1,结果是该数据不一定存在该集合中,有可能不存在