何为布隆过滤器

问题的提出

我们有一个不安全网页的黑名单,包含了100亿个黑名单网页的URL,每个网页URL最多占用64B.。

现在我们要设计一个网页过滤系统,这个系统要判断该网页是否在黑名单里,但是我们的空间有限,只有30GB.

允许有万分之一的判断失误

布隆过滤器

我们可以把所有的URL保存起来,比如放到hashmap里,但是64B*100亿=640GB,不符合要求。

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 

如果遇到网页黑名单系统、垃圾邮件过滤、爬虫网址判重等问题,如果可以容忍一定程度的失误率,那么我们就可以用布隆过滤器来解决。

哈希函数

我们先来认识一下哈希函数(或者说是复习)

1)

哈希函数的输入可以认为是无穷大或者是非常大的范围,比如任意一个整数(字符串),而输出域是有范围的

(这就意味着不同的输入可能是相同的输出)

2

当输入相同的值时,返回值也相同(确定性)

3)

所有不同的输入值得到的输出,均匀地分布在输出域内,并且与输入值出现的规律无关。(这也是评价一个哈希函数是否优秀的两个重要标准)比如:1和2相差很近,但是经过优秀的哈希函数计算后,他们应该差距较大。

4)

速度快:可以认为哈希函数的计算时间是O(1)的。

布隆过滤器输入

下面就开始介绍布隆过滤器啦。

1)

我们准备k个哈希函数,并且他们之间没有什么关系,彼此独立。

那么对于同一个输入对象(你想的没错就是一个URL),经过计算出来的结果也是完全独立的没有规律的。

2)

我们准备一个数组,长度为m,只有两种状态,所以我们选用bit数组名为bitmap。

3)

我们输入一个黑名单里的URL时:把URL用每一个哈希函数计算出来,结果%数组长度(目的是能存下呀。。。。。),把对应位置的bit变为1,记录下来。

处理完所有URL,我们的布隆过滤器就准备好啦。

布隆过滤器检查

我们如何用布隆过滤器检查某个URL是否是黑名单中的呢?
同样的方法,把这个值用k个哈希函数算出结果,每一个结果都去bitmap里找有没有存在过,只要有一个结果不存在,那这个URL就肯定不是黑名单了。(因为之前用同样的方法,bitmap变为1的那些位置和现在应该是一样的)

接下来就是比较佛性的事了,既然有一个答案不存在,这个URL就不是黑名单里的,那。。。所有答案都存在,就能确定它在黑名单里吗?

不是的。

因为可能是其它URL算出的答案恰好把本URL的答案全都算出来过。

想到这就不禁要问了:那这个数据结构有啥用?不是坑爹呢?

其实是有用的,他的失误率是很低很低的。

他的原则就是:“宁可错杀三千,不可放过一个”

如何设计空间和哈希函数

 

首先我们应该想到:数组太小的话肯定是不准确的,比如:

就这么小个数组,存了几个URL,十个地方全算出来过,全成1了。

那后面判断的时候就比较坑了,随便来什么URL,随便什么哈希函数,算出的答案全都出现过,这显然不是我们想要的。

所以,我们应该知道,数组过小会影响准确性。

那么我们如何根据数据量来设计数组大小和哈希函数个数呢?

以本题为例:

样本数:100亿

失误率:不超过0.01%,记为p

每个样本大小:64B(这个其实不影响布隆过滤器大小,因为这是和哈希函数有关的,一般的哈希函数都能接受64B的数据,并且输出,bitmap只需记录答案是否出现过即可)

布隆过滤器大小m由以下公式决定:

根据公式算出m=19.19n,向上取整20,所以需要2000亿bit=25GB

哈希函数的个数由以下公式决定:

k=14

布隆过滤器的失误率为:

计算出为0.006%,符合要求,此题可解。

公式分析

 

白名单

过滤器会用错误,对已经发现的错误样本可以建立白名单防止错误。

其他使用场景

  • 网页爬虫对URL的去重,避免爬去相同的URL地址
  • 垃圾邮件过滤,从数十亿个垃圾邮件列表中判断某邮箱是否是杀垃圾邮箱
  • 解决数据库缓存击穿,黑客攻击服务器时,会构建大量不存在于缓存中的key向服务器发起请求,在数据量足够大的时候,频繁的数据库查询会导致挂机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445349.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐算法--利用用户行为数据(02)

文章目录目录1.什么是用户行为数据?1.1用户行为分类2.用户行为数据如何使用?2.1 用户活跃度和物品流行度的分布2.2 用户活跃度和物品流行度的关系2.3 协同过滤算法3.实验设计和算法评测4.基于邻域的的推荐算法4.1 基于用户的协同过滤算法4.2 基于物品的协…

《Head First设计模式》第九章(2)组合模式

组合模式 ​ 基于前一篇迭代模式的案例进行需求更新,餐厅的菜单管理系统需要有煎饼屋菜单和披萨菜单。现在希望在披萨菜单中能够加上一份餐后甜点的子菜单。 在迭代模式中,披萨菜单是用数组维护的,我们需要让披萨菜单持有一份子菜单&#xf…

Python(4)--Pycharm安装、使用小技巧

Pycharm安装1.专业版Pycharm 安装2.设置Pycharm桌面快捷图标3.Linux卸载一个软件4.教育版Pycharm的安装5.多文件项目演练(Pycharm针对学生和教师开发了免费使用版)1.专业版Pycharm 安装 1.官网下载安装包 .tar.gz 2.解压缩 tar -zxvf 文件名 3.移动解压…

推荐算法--推荐系统冷启动问题(03)

文章目录目录1.什么是冷启动问题?1.1冷启动问题1.2 冷启动问题的分类1. 用户冷启动2 物品冷启动3 系统冷启动2.如何解决冷启动问题?2.1利用用户注册信息2.2选择合适的物品启动用户的兴趣2.3利用物品的内容信息2.4 发挥专家的作用目录 1.什么是冷启动问题…

《Head First 设计模式》第十章-状态模式 状态模式

状态模式 策略模式和状态模式是双胞胎,在出生时才分开。你已经知道,策略模式是围绕可以互换的算法来创建成功业务的,然而,状态走的是更崇高的路,它通过改变对象内部的状态来帮助对象控制自己的行为。 定义状态模式 …

推荐算法--利用用户标签数据(04)

文章目录流行的推荐系统通过3种方式联系用户兴趣和物品 (1):利用用户喜欢过的物品,给用户推荐与他喜欢过的物品相似的物品,这是基于物品的算法。 (2):利用和用户兴趣相似的其他用户…

Python(5)-注释

Python注释1.单行注释2. 多行注释(块注释)3.注释的使用和代码规范pyhton 的注释 使用自己熟悉的语言(中文),解释代码。Python解释器在执行文件时不会执行井号右边边的内容。1.单行注释 # 井号后面跟着注释内容 灰灰的虚…

网络原理知识点总结

第一章: 计算机网络系统由资源子网和通信子网组成。 计算机网络系统主要由网络通信系统、操作系统和应用系统构成 互联网基础结构发展的三个阶段: 第一阶段:从单个网络 ARPANET 向互联网发展的过程。 第二阶段:建成了三级结构…

推荐算法--时效性(05)

时效性 推荐系统应该考虑时间效应,因为用户的兴趣是有时间变化的。用户一年前喜欢的东西现在不一定感兴趣,相比于推荐过去喜欢的物品,推荐用户近期喜欢的物品更有参考价值。而在新闻更是如此,推荐过去跟用户兴趣一致的新闻已经失去…

推荐算法--推荐系统架构(06)

外围架构一般来说,每个网站都有一个 UI 系统,UI 系统负责给用户展示网页并和用户交互。网站会通过日志系统将用户在 UI 上的各种各样的行为记录到用户行为日志中。 从上面的结构可以看到,除了推荐系统本身,主要还依赖两个条件--界…

Python(6)-算数运算符

算数运算符1.算数运算符2.优先级1.算数运算符 加 减- 乘* 除/ 取商// 取余数% 幂**(能算n次方: 2**38,一直以为只能算平方) 扩展: 乘法用于字符串:字符串重复指定的次数,要拼接的次数很长时,用乘号很方便…

推荐算法--其他信息(07)

文章目录目录1.利用上下文信息1.1时间上下文1.2地点上下文2.利用网络社交数据2.1 获取网络社交数据途径2.2 社交网络数据2.3 基于社交网络的推荐2.4 推荐算法2.5 给用户推荐好友目录 1.利用上下文信息 1.1时间上下文 用户的兴趣是随着时间变化的,三天打鱼两天晒网…

Python(7)-程序执行的原理

程序执行的原理1.计算机中的三个核心部件2.程序执行的原理3.程序的作用1.计算机中的三个核心部件 CPU:中央处理区,超大规模的集成电路,负责处理数据、计算 内存:临时存储数据,断电数据消失,读取数据快 硬盘…

橙白oj 2017级《算法分析与设计》-练习02

注:A题我以为给新生出的,应该贼简单,是按顺序消灭,卡了十几分钟,成了最后一个ac的题,真是菜的真实。 Problem A: Description 白细胞是人体与疾病斗争的“卫士”。当病菌侵入人体体内时,白细胞…

python(9)-变量、input函数

变量、input函数1.变量的定义(不可变对象)2.变量的类型3.变量的命名规范4. 不同类型的数据计算5.类型转换函数6.input()7.Tips程序是用来处理数据的,而变量是用来存储数据的。 关于函数,是一个提前准备好的代码;可以直接使用,不用…

推荐算法--总结(08)

一、推荐系统结构二、推荐引擎算法(Algorithm)1、协同过滤推荐算法1.1 关系矩阵与矩阵计算1.1.1 用户与用户(U-U矩阵)1.1.2 物品与物品(V-V矩阵)1.1.3 用户与物品(U-V矩阵)1.1.4 奇异…

算法总结-1算法入门

1.0 前言 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。 …

FM系列算法解读(FM+FFM+DeepFM)

在计算广告中,CTR是非常重要的一环。对于特征组合来说,业界通用的做法主要有两大类:FM系列和Tree系列。这里我们来介绍一下FM系列。   在传统的线性模型中,每个特征都是独立的,如果需要考虑特征与特征之间的相互作用…

二叉树层序遍历

层序遍历序列为:ABCDEFG 思路:栈是先进后出的数据结构,而队列是先进先出的数据结构。 我们层序遍历,很明显,先遇到的节点先打印,不同于前中后序遍历,我们采用队列结构。 具体执行过程如下&…

深度学习(01)-- 基础学习

文章目录目录1. 深度学习基础1.1 深度学习总览1.2 深度网络训练过程1.2.1 传统神经网络的训练方法为什么不能用在深度神经网络1.2.2 deep learning训练过程1.3 数学知识:2. 九种深度学习模型2.1 受限玻尔兹曼机RBM2.2 自编码器AE(降维)2.3 深…