布隆过滤器原理

简介

布隆过滤器是一个非常神奇的数据结构,通过它我们可以非常方便地判断一个给定数据是否存在于海量数据中。
在这里插入图片描述

结构

布隆过滤器是一个 bit 向量或者说 bit 数组。如果我们要映射一个值到布隆过滤器中,需要经过如下两步:

  1. 使用布隆过滤器中的哈希函数对元素值进行计算,得到哈希值(有几个哈希函数得到几个哈希值)。
  2. 根据得到的哈希值,在位数组中把对应下标的值置为 1。
    如下图:映射"Hello"到布隆过滤器,首先有三个不同的哈希函数分别对"Hello"求值,映射到三个不同的位置:3,5,9。然后把对应位置下标置1。
    在这里插入图片描述

再存一个值"world",分别经过hash运算后映射到2,4,9的位置。3,5,9已经被"Hello"映射了。
在这里插入图片描述
下面如果想查询"boluo",其映射的位置分别为1,2,3。因为2的位置并未置为1,所以认为不存在"boluo"。

而当我们需要查询 “Hello” 这个值是否存在的话,那么哈希函数必然会返回 3,5,9,然后我们检查发现这三个 bit 位上的值均为 1,那么我们可以说 “Hello” 存在了么?答案是不可以,只能是 “Hello” 这个值可能存在。

答案很简单,因为随着增加的值越来越多,被置为 1 的 bit 位也会越来越多,这样某个值 “boluo” 即使没有被存储过,但是万一哈希函数返回的三个 bit 位都被其他值置为 1 ,那么程序还是会判断 “boluo” 这个值存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值