Bloom 过滤器学习笔记
简介
Bloom 过滤器是一种概率性数据结构,用于以较大的把握判断某一个元素是否在集合中。若 Bloom 过滤器认为某一个元素在集合中,则此元素小概率不在集合中,即可能存在假阳性;若 Bloom 过滤认为某一个元素不在集合中,则此元素一定不在集合中,即不存在假阴性。常见的应用场景有:判断用户名是否被占用、判断银行卡是否已挂失、判断用户是否看过广告等等。相比于确定性的数据结构,Bloom 过滤器占用更小的存储空间。
前置说明
- 某时刻下元素个数为 。
- 底层数据结构是一个大小为 的比特数组。
- 包含 个相互独立的散列函数,可将元素映射到某个数组位置。
操作与算法
初始化
- 确定 的大小。
- 将数组所有位置置为 0。
时间复杂度:。
添加元素
- 依次用 个散列函数映射元素到 个数组位置。
- 将这些数组位置置为 1。
时间复杂度:。
判断元素是否在集合中
- 依次用 个散列函数映射元素到 个数组位置。
- 这些数组位置是否存在值为 0:
- 若是,则元素一定不在集合中。
- 若否,则元素有可能在集合中。
时间复杂度:。
局限性
- 添加后的元素无法从模糊集合中移除。
- 较小或 设置不当的情况下,会导致假阳性概率较大。
- 假阳性概率:。
- 最优设置:。