分享好友 最新动态首页 最新动态分类 切换频道
布隆过滤器
2024-12-26 11:11

      看见了海量数据去重,找到停留时间最长的IP等问题,有博友提到了Bloom Filter,我就查了查,不过首先想到的是大叔,下面就先看看大叔的风采。

布隆过滤器

一、布隆过滤器概念引入

      (Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的。它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率(假正例False positives,即Bloom Filter报告某一元素存在于某集合中,但是实际上该元素并不在集合中)和删除困难,但是没有识别错误的情形(即假反例False negatives,如果某个元素确实在该集合中,那么Bloom Filter 是不会报告该元素不存在于集合中的,所以不会漏报)。

      下面从简单的排序谈到BitMap算法,再谈到数据去重问题,谈到大数据量处理利器:布隆过滤器。

  • 对无重复的数据进行排序

      给定数据(2,4,1,12,9,7,6)如何对它排序

     方法1:基本的排序方法包括冒泡,快排等。

     方法2:使用BitMap算法

     方法1就不介绍了,方法2中所谓的BitMap是一个位数组,跟平时使用的数组的唯一差别在于操作的是位。首先是开辟2个字节大小的位数组,长度为12(该长度由上述数据中最大的数字12决定的),然后,读取数据,2存放在位数组中下标为1的地方,值从0改为1,4存放在下标为3的地方,值从0改为1....最后,读取该位数组,得到排好序的数据是(1,2,4,6,7,9,12)。

      比较方法1和方法2的差别:方法2中,排序需要的时间复杂度和空间复杂度很依赖与数据中最大的数字比如12,因此空间上讲需要开2个字节大小的内存,时间上需要遍历完整个数组。当数据类似(1,1000,10万)只有3个数据的时候,显然用方法2,时间复杂度和空间复杂度相当大,但是当数据比较密集时该方法就会显示出来优势。

  • 对有重复的数据进行判重

   数据(2,4,1,12,2,9,7,6,1,4)如何找出重复出现的数字

   首先是开辟2个字节大小的位数组,长度为12(该长度由上述数据中最大的数字12决定的,当读取完12后当读取2的时候,发现数组中的值是1,则判断出2是重复出现的。

二、布隆过滤器原理

      布隆过滤器需要的是一个位数组(这个和位图有点类似)和k个映射函数(和Hash表类似,在初始状态时,对于长度为m的位数组array,它的所有位都被置为0。对于有n个元素的集合S={s1,s2......sn},通过k个映射函数{f1,f2,......fk},将集合S中的每个元素sj(1&lt;=j<=n)映射为k个值{g1,g2......gk},然后再将位数组array中相对应的array[g1],array[g2]......array[gk]置为1如果要查找某个元素item是否在S中,则通过映射函数{f1,f2.....fk}得到k个值{g1,g2.....gk},然后再判断array[g1],array[g2]......array[gk]是否都为1,若全为1,则item在S中,否则item不在S中。这个就是布隆过滤器的实现原理。

      当然有读者可能会问:即使array[g1],array[g2]......array[gk]都为1,能代表item一定在集合S中吗?不一定,因为有这个可能:就是集合中的若干个元素通过映射之后得到的数值恰巧包括g1,g2,.....gk,那么这种情况下可能会造成误判,但是这个概率很小,一般在万分之一以下。

      很显然,布隆过滤器的误判率和这k个映射函数的设计有关,到目前为止,有很多人设计出了很多高效实用的hash函数。尤其要注意的是,布隆过滤器是不允许删除元素的(实际就是因为多个str可能都应设在同一点,而判断str存在的话是所有映射点都存在,所以不能删除),因为若删除一个元素,可能会发生漏判的情况。不过有一种布隆过滤器的变体Counter Bloom Filter,可以支持删除元素,感兴趣的读者可以查阅相关文献资料。

三、布隆过滤器False positives 概率推导

四、布隆过滤器应用

      布隆过滤器在很多场合能发挥很好的效果,比如:网页URL的去重,垃圾邮件的判别,集合重复元素的判别,查询加速(比如基于key-value的存储系统)等,下面举几个例子

  • 有两个URL集合A,B,每个集合中大约有1亿个URL,每个URL占64字节,有1G的内存,如何找出两个集合中重复的URL。

很显然,直接利用Hash表会超出内存限制的范围。这里给出两种思路

      第一种:如果不允许一定的错误率的话,只有用分治的思想去解决,将A,B两个集合中的URL分别存到若干个文件中{f1,f2...fk}和{g1,g2....gk}中,然后取f1和g1的内容读入内存,将f1的内容存储到hash_map当中,然后再取g1中的url,若有相同的url,则写入到文件中,然后直到g1的内容读取完毕,再取g2...gk。然后再取f2的内容读入内存。。。依次类推,知道找出所有的重复url。

      第二种:如果允许一定错误率的话,则可以用布隆过滤器的思想。

  • 在进行网页爬虫时,其中有一个很重要的过程是重复URL的判别,如果将所有的url存入到数据库中,当数据库中URL的数

量很多时,在判重时会造成效率低下,此时常见的一种做法就是利用布隆过滤器,还有一种方法是利用berkeley db来存储url,Berkeley db是一种基于key-value存储的非关系数据库引擎,能够大大提高url判重的效率。

      布隆过滤器主要运用在过滤恶意网址用的,将所有的恶意网址建立在一个布隆过滤器上,然后对用户的访问的网址进行检测,如果在恶意网址中那么就通知用户。这样的话,我们还可以对一些常出现判断错误的网址设定一个白名单,然后对出现判断存在的网址再和白名单中的网址进行匹配,如果在白名单中,那么就放行。当然这个白名单不能太大,也不会太大,布隆过滤器错误的概率是很小的。

五、布隆过滤器简单Java实现

 


最新文章
网页模板html,html网页首页模板
在当今数字化时代,网页模板HTML成为了网站开发中不可或缺的一部分。它不仅能够提高网页设计的效率,还能确保网站在不同设备和浏览器上保持一致的用户体验。本文将深入探讨网页模板的重要性、设计原则以及如何有效利用HTML模板来构建专业且
【E612支付宝下载】LG E612支付宝10.6.70.8100免费下载
支付宝是蚂蚁集团旗下业务,诞生于2004年,已经成长为的数字支付开放平台和服务业数字化经营开放平台。我们面向消费者、各行各业商家提供便捷、安全的数字支付服务,面向合作伙伴持续开放技术、产品,助力实现数字化升级。与此同时,大量商
成都申通电话(成都 申通)
1、申通快递客服电话2、申通客服人工24小时服务3、成都申通抚琴路营业部的电话是多少?4、四川成都新津申通电话号码是多少?5、申通客服电话955431、是申通快递客服电话。95543是申通快递的热线电话,它不是人工服务,就是一个机器人在那里接
王者荣耀插件教程?王者插件v10apk?
〖壹〗、先确定助手中开启悬浮窗,然后在手机管家~权限隐私~悬浮窗管理~打开相应软件的悬浮窗即可。〖贰〗、下载本页面的王者荣耀无限刷点卷版,下载叉叉游戏助手。分别安装上手机,运行叉叉助手,在里面找到王者荣耀无限钻石版,下载辅
锐明技术-市场前景及投资研究报告:汽车智能化,“龙腾四海”.pdfVIP
锐明技术(002970.SZ)深度报告汽车智能化“龙腾四海”2024年12月12日➢领先商用车产业信息化解决方案提供商,海外营销网络推动全球布局。锐明推荐首次评级技术作为一家领先的AIoT智能物联解决方案提供商,深耕商用车领域20余年,当前价格
用AI生成超逼真美女写真,轻松做出你的专属女神!
在这个数字化蓬勃发展的时代,AI技术已经渗透到我们生活的方方面面,甚至连艺术创作都与机器智慧紧密结合起来。想象一下,您可以随心所欲地创造出您心目中的美女写真,而不仅仅依靠传统的摄影或绘画。对许多人来说,这样的想法既令人兴奋又
Simply Static 项目常见问题解决方案
杂货产品检测43-YOLO(v5至v9)、CreateML、Paligemma、TFRecord、VOC数据集合集.rarIPCV分配-V6 2024-01-21 6:10 PM=============================*与您的团队在计算机视觉项目上合作*收集和组织图像*了解和搜索非结构化图像数据*注释,创
一键搭建QQ销售,助力业务腾飞
轻松搭建,助您业务腾飞!只需简单操作,即可创建专属,拓展商机,提升业绩,让您的业务快速起飞!确立的目标与挑选适宜的建站打造的风格与布局丰富的功能性优化的搜索引擎排名推广的策略与实施在互联网的飞速进步下,营销已成为商家拓展市
轻松生成惊艳美女写真,打卡AI绘图新趋势!
在社交媒体和自媒体盛行的今天,拥有一张美丽的侧脸或者个性凸显的独特魅力照,似乎已经成为了一种新时尚。想象一下,宝子们,只需通过一个简单的工具,就能轻松生成出让人惊叹的美女写真,是不是听起来十分诱人呢?今天,我带大家深度探讨
用AI工具生成超真实美女写真,不可错过的使用攻略!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个数字化不断发展的时代,越来越多的人寻求通过现代科技来满足个人的视觉需求。你是否曾
相关文章
推荐文章
发表评论
0评