BloomFilter用途原理及应用策略

BloomFilter是一种节省空间的数据结构,用于判断一个元素是否可能在给定的集合中。它通过多哈希函数将元素映射到位数组,实现快速查找。虽然存在误判可能,但其优点在于低空间占用和高效查询。适用于大规模数据集的成员资格查询,且插入后的元素无法删除。应用时需谨慎选择位数组大小和哈希函数数量以平衡精度和空间需求。
摘要由CSDN通过智能技术生成

BloomFilter原理简介

将数值m用k个不同的hash函数散列到k个位,这个k个位数值置位1就表示数值m。
很明显,就是将数字转换成多个bit位存储的数据结构。当有数字集合的时候,可以减少数字在内存中空间占用(一堆数值转换为了一个大bit数组)。如果需要判断一个数字是否包含在一个集合中,只需要运算k个hash函数看对应的位是否为1。
简单来说就是将一组数值转换为一个bit数组,根据一个数值的多个hash值对应的位是否为1判断它是否在这个集合中。

应用场景

BloomFilter常用于判断某个值是否在一个集合当中

优点

  1. 空间消耗和时间消耗比较小,多个hash函数并无关联,可以并行加速
  2. 时间效率为O(n/k)

缺点

  1. 只能粗略判断得到结论可能存在,因为hash有可能存在冲突
  2. 已经加入的元素无法删除。还是由于hash的冲突性,m散列到的值可能和n散列的值相同,如果把m对应散列的位删了那n可就查不到了。

应用策略

将数据集合初始化到bit数组的时候,设定的数组大小和hash函数的个数会对判断结果有很大的影响。这里照搬一下外链的结论,后续使用可参考。

假设BloomFilter中元素总bit数量为m,插入的元素个数为n,hash函数的个数为k,false positive probability(误判率)记做p,它们之间有如下关系(具体推导过程请参考维基百科):
1. 如果需要最小化false positive probability,则k的取值如下
k = m * ln2 / n; 公式一
2. 而p的取值,和m,n又有如下关系
m = - n * lnp / (ln2) ^ 2 公式二
3.把公式一代入公式二,得出给定n和p,k的取值应该为
k = -lnp / ln2
最后,也同样可以计算出m。

参考

https://zh.wikipedia.org/zh-hans/%E5%B8%83%E9%9A%86%E8%BF%87%E6%BB%A4%E5%99%A8
http://oserror.com/backend/bloomfilter/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值