bloomfilter
bloomfilter原理简介
将数值m用k个不同的hash函数散列到k个位,这个k个位数值置位1就表示数值m。
很明显,就是将数字转换成多个bit位存储的数据结构。当有数字集合的时候,可以减少数字在内存中空间占用(一堆数值转换为了一个大bit数组)。如果需要判断一个数字是否包含在一个集合中,只需要运算k个hash函数看对应的位是否为1。
简单来说就是将一组数值转换为一个bit数组,根据一个数值的多个hash值对应的位是否为1判断它是否在这个集合中。
应用场景
BloomFilter常用于判断某个值是否在一个集合当中
优点
- 空间消耗和时间消耗比较小,多个hash函数并无关联,可以并行加速
- 时间效率为O(n/k)
缺点
- 只能粗略判断得到结论可能存在,因为hash有可能存在冲突
- 已经加入的元素无法删除。还是由于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/
相关阅读
为了多来点干货,我写的思路会有点特别:不直接讲大数据是怎么做的,我会跳出来讲,在人工智能机器人这个方向,把握好哪三个点,能够更好的应
A5创业网(公众号:iadmin5)11月16日消息,近日有媒体报道相关部门检测并通知下架了90个恶意App,其中应用宝被检测为恶意App并下架。据
这篇文章干货满满,1. 既有调研对比 bigtable,cassandra 2.又有自身设计的说明. 对可靠性,可用性都说的很明白. 扩容等. 360自研
除了日常的社交需求外,用户对记录健康、拍照功能的软件也格外青睐。近日,国家计算机病毒应急处理中心通过互联网监测发现,“天
Beanstalkd 是一个高性能的消息队列中间件,本博文宅鸟将介绍一下这个东东的使用。一、先通过概念让大家了解Beanstalkd的特性和工