优点:
- 不需要存储数据本身,只用比特表示,因此空间占用相对于传统方式有巨大的优势,并且能够保密数据;
- 时间效率也较高,插入和查询的时间复杂度均为O(k);
- 哈希函数之间相互独立,可以在硬件指令层面并行计算。
缺点:
- 存在假阳性的概率,不适用于任何要求100%准确率的情境;
- 只能插入和查询元素,不能删除元素,这与产生假阳性的原因是相同的。
可以用来作为缓存系统(如Redis)的缓冲,防止缓存穿透。存在假阳性,不存在假阴性。
k 为哈希函数个数,m 为布隆过滤器长度,n 为插入的元素个数,p 为误报率
k 次哈希函数某一 bit 位未被置为 1 的概率为:
插入n个元素后依旧为 0 的概率和为 1 的概率分别是:
Counting Bloom Filter
https://cloud.tencent.com/developer/article/1136056