redis-布隆过滤器原理

25 篇文章 1 订阅

参考:
http://imhuchao.com/1271.html
https://www.cnblogs.com/zhanggguoqi/p/10571225.html

作用
判断某个值是否在某个集合中。

特点
1、存储空间小:
因为它的原理是由一个长度为m的位数组(二进制向量),一个字节有8个位,如果我们使用四个hash函数来运算,那么每个key就会占用四个位,一个字节可表示两个key。相比于原来的一个字符需要一个字节来存,如果一个key有30个字符,那就是30个字节了,可见Bloom Filter显著缩短了空间。

2、写入的过程:O(1)
分别让key经过四个hash函数,假如结果为123,33333,456,78906,那么就去位数组上以他们为index,找到对应的位置,将值设置为1。因为hash函数的值可能相同,为了降低了冲突的概率,需要用多个hash函数。

3、判断速度快:O(1)
Bloom FIlter的查找过程是,假如使用了四个hash函数(运算结果都是整数),遍历,对key执行hash运算,假如得到3000, 这个整数就是位数组上特定位置,位数组的值只有0和1,如果是0,就可以明确判断为不存在,其他hash函数没必要执行了,如果为1,接着执行,值为0就可以中断了,如果都是1,可以近似判断为存在,因为这是个只有四个样本的概率判断。由于直接通过Index来查找的,根本不需要遍历整个集合,效率极高。

4、结果:
如果判断为不存在,那么一定不存在;如果判断为存在,那么大概率是存在的。

5、缺点:
有一定的错误概率,当集合中的元素越来越多,二进制序列中的1的个数越来越多的时候,判断一个字符串是否在集合中就很容易误判,原本不在集合里面的字符串会被判断在集合里面。

节点删除困难,因为不同的key对应hash函数的结果可能相同,构成冲突,所以你不能简单的将四个hash函数结果对应的位置置为0的方式来表示你删除了这个key。

6、参数设置
我们预估要存的数据量为n,期望的误判率为p
1、位数组长度m
m = -nlnp / ( (ln2)^2 )

2、hash函数个数选组
k = mln2 / n

3、寻找hash函数
比如BKDRHash,JSHash,RSHash等等

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值