bloom filter笔记

布隆过滤器是一种用于大数据场景下高效查询元素是否存在集合中的数据结构。它通过牺牲一定的准确性来减少存储空间,由一个比特数组和多个哈希函数组成。插入元素时,使用这些哈希函数将元素映射到数组的多个位置并置为1;查询时,检查对应位置,若全为1则可能存在,反之则确定不在。由于可能会出现误判,但插入和查询操作的时间复杂度均为O(1),使其成为处理大数据的优选方案。
摘要由CSDN通过智能技术生成

bloom filter笔记

布隆过滤器作为大数据领域一个重要的数据结构,我想着搞大数据多少要有些了解,所以简单总结一下他的主要思想

首先说说布隆过滤器的作用:用于查询一个元素是否存在于某个集合中。最早我们可以通过哈希表来实现这个功能。但是随着数据量的增大,维护一个哈希表所带来的空间开销太大,于是智慧的科学家思考是否可以以牺牲一定准确度来换取更小的存储空间和更快的查询速度。从此过滤器就应运而生了。布隆过滤器是其中最早的一款。

布隆过滤器作为最经典的一种数据结构,有很多对其的改进和创新,我们还是从最基础的原版开始介绍。

原始的布隆过滤器由一个连续空间的数组和若干哈希函数组成,仅支持插入和查询操作。

首先申请一块大小为 N 比特的连续的空间存放数组,初始值全部设为0。令每个元素占1比特,则数组最多可存N个元素。然后定义K个哈希函数:h0(x),h1(x),…,hk-1(x)。这些哈希函数从定义域映射到[0,N-1],对应数组中N个位置。如下表所示(实际中没有索引,只是为了方便看)

index0123456789
0000000000

插入元素

这样我们通过这K的哈希函数元素x映射到K个位置,比如当K=1,h1(x)=2,h2(x)=4,h3(x)=7。元素插入时,将这三个位置置为1。元素插入后数组变为:

index0123456789
0010100100
查询元素

查询操作也很简单,对于要查询的元素x,计算三个哈希函数的值:h1(x),h2(x),h3(x)。然后判断数组中对应的三个位置是否为1,如果为1,表示该元素在集合中,否则不在。

时间复杂度

处理大数据时我们对时间复杂度还是有较高要求的,布隆过滤器的插入和查询操作都是进行K次哈希计算,然后直接访存,所以时间复杂度都是常数级O(1)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值