首先要了解一下位图
位图:int[10],每个int类型的整数是4*8=32个bit,则int[10]一共有320个bit,每个bit非0即1,初始化的时候都是0
添加数据的时候,将数据进行hash得到hash值,对应到bit位,将该bit改为1,hash函数可以定义多个,则一个数据添加会将多个(hash函数个数)bit改为1,多个hash函数的目的是减少hash碰撞的概率
查询数据:hash函数计算得到hash值,对应到bit中,如果有一个为0,则说明数据不在bit中,如果都为1,则该数据可能在bit中
优点:
1.占用内存小
2.增加和查询元素的时间复杂度为:O(k),(k为哈希函数的个数,一边比较小),与数据量大小无关
3.哈希函数相互之间没有关系,方便硬件并行运算
4.布隆过滤器不需要存储元素本身,在某些对保密要求比较严格的场合有很大优势
5.数据量很大时,布隆过滤器可以表示全集
6.使用同一组散列函数的布隆过滤器可以进行交、并、差运算
缺点:
1.误判率,即存在假阳性(False Position),不能准确判断元素是否在集合中
2.不能获取元素本身
3.一般情况下不能从布隆过滤器中删除元素