Bloom Filter
来源:互联网 发布:阅读打卡软件 编辑:程序博客网 时间:2024/06/02 07:28
布隆过滤器(Bloom Filter)是1970年由布隆提出的。
它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。
它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
算法描述
Bloom Filter由长度为m的bit数组和k个hash函数组成
m = -nlnp/(ln2)^2,p是误判率k = ln2 * m/n
输入样本对象,将通过k个hash函数,生成k个值,映射至bit数组,对应位置1;
查看一个对象是否在一个集合中,首先将该对象通过k个hash函数,映射至bit数组,查看所有对应位是否都为1,若都为1,则存在;只要一个不为1,就不存在。当bit数组过小时,回存在误判,但其实误判率很低,万分之一。
URL黑名单
网页黑名单包含100亿个网页,每个网页的URL最多占用64B,现在实现一个网页过滤系统,根据网页的URL判断网页是否在黑名单上。
要求:
1)允许万分之一以下的误判率。
2)额外空间不超过30GB。
100亿*64B =640G>30GB,不可以。
用布隆过滤器,无需考虑每个样本的大小
m = -n*lnp/(ln2)^2 = 19.19n
向上取整m=20n = 2000亿bit = 25GB<30GB,完全可以,
即需要长度为2000亿的bit数组。
k = ln2*m/n = 14
即需要14个hash函数。
阅读全文
0 0
- Bloom Filter
- Bloom Filter
- Bloom Filter
- Bloom Filter
- Bloom Filter
- Bloom Filter
- Bloom Filter
- Bloom Filter
- bloom filter
- bloom filter
- Bloom Filter
- Bloom Filter
- bloom filter
- bloom filter
- bloom filter
- Bloom filter
- Bloom filter
- Bloom Filter
- axure原型设计之抽屉列表
- 【 CDN 最佳实践】CDN 加速 OSS 常见问题及处理思路
- Android在原生集成react native
- ajax的一些简单例子
- C#的冒泡排序
- Bloom Filter
- jQuery的change方法什么时候触发? 你绝对意想不到,即使你通过jQuery修改了input标签的value值(即修改内存中的DOM树中的input),也不会触发change事件,不会,不会
- 中断向量表IDT的初始化
- SQL一些常用的简单语法
- 微信小程序公共组件的引用与控制
- css DOM(页面进行标签的增删改)
- 高通AR摄像机参数详解
- Activiti学习笔记一 activiti-explorer 项目部署
- 一个奇妙的java坑:Long 类型的比较