Bloom Filter

它是一种二进制向量数据结构,用于判断一个元素 是否在集合中(判断某一个元素不在集合中有100%把握,判断元素在集合中 有一定的错误)。

原理:使用哈希函数将某一个元素映射到数组上,并不像HasMap存储对应元素,而是存储0/1 状态位。当有大量元素时很大的几率发生哈希冲突,因此可能影响它判断一个元素在集合中。比如有一个元素实际上不在集合中,但是标志位可能由于哈希冲突置为1导致判断出错。解决方案:使用多个哈希函数,对应多个点,当所有的位置都是1,表示它可能在集合中;反之,则一定不在集合中。

特定:1.它并不存储实际的元素,因此它非常节约空间

2.它使用数组存储,因此它可以用常数时间判断

3.它使用0/1存储状态,因此一定元素放入集合就无法删除,删除可能会导致其他元素的映射位置为0导致判断失误

应用:可以用于解决 缓存穿透问题:当请求的数据明显不存在时,使用这种方式过滤请求可以提高性能。

扩展:用于存储的数组从byte数组改成int数组, 增大状态的数量从而支持删除元素

 

 

技巧:要想保持错误率低,最好让位数组有一半还空着。

在错误率不大于є的情况下,m至少要等于n log2(1/є)才能表示任意n个元素的集合

这说明在哈希函数的个数取到最优时,要让错误率不超过єm至少需要取到最小值的1.44倍。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值