布隆过滤器

布隆过滤器是一种基于二进制向量和随机函数的数据结构,用于大量数据的快速存在性判断。它存在误判但不存在误删,适用于存储空间有限且能接受一定误差的情况。其工作原理是通过多个映射函数将数据映射到位数组的不同位置,存在即可能,不存在则确定不在集合中。
摘要由CSDN通过智能技术生成

一、布隆过滤器的引入

       我们在大量数据中进行查找一个数据,最为常见的方法是采用位图来进行实现的,但是要在大量的字符串中进行查找的时候我们还能使用位图来实现吗?答案明显就是不可以的。在日常的生活中,我们判断元素是否是在集合中存在的;检查一个单词是否拼写正确的时候;我们可以把集合中元素存在计算机中去,但遇到一个新的元素的时候我们和集合中元素来进行比较,在计算机中集合是用哈希表来进行存储的,哈希表在数据比较小的时候,还是比较好的。但是,当数据非常大的时候,哈希表的存储效率就表现了出来,而且由于哈希冲突的原因我们会产生误判,也就是说不同的数据经过同一个哈希函数会产生通过一个地址。于是便引出了布隆过滤器(BloomFilter)。

二、布隆过滤器的简单介绍     

        布隆过滤器(BloomFilter)是由布隆来提出的,布隆提出了一种基于二进制向量和一系列随机函数的数据结构。但是也有一点问题,就是有一些误判并且不支持删除操作。下面我便说说为什么布隆过滤器会有一些误判呢?当两个字符串经过同一个映射函数投影到同一个位置的时候,我们便将这个位置置为1,查询的时候当这个位置为1的时候;我们只能说有一个字符串是存在的,但是却不能说两个字符串都存在的,当表示0的时候;就可以说字符串一定不存在。这也就是所谓的“存在是不准确的,不存在是一定准确的”。

三、布隆过滤器原理

       布隆过滤器也要一个位数组和k个映射函数,我们开始的时候把长为m的数组里全都放的是0。如下图所示:

      

        数组中的每一位都是一个二进制位,集合中的每一个字符串通过k个映射函数h,映射到这个数组的不同位置上去,然后再将该位置的值再由0置为1。

      

         如果要查找某个字符串是否在这个集合中,我们可以查看这个字符串静多个映射函数后在数组中的值,如果h1、h2、h3、h4......都为1,那么就表示这个字符串是存在的,反之不存在。

四、代码展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值