Bloom-Filter算法 简介
Bloom-Filter算法 其实可以看作 bit-map 的一种扩展。
它把已存在的元素通过多个hash 函数映射到一个 bit 序列,对于每一个元素根据hash函数的结果把相应的 位置置一(这个bit序列通常很长,但是比起记住所有元素它占用的空间是小的)。
在判断一个元素时候已存在的时候,它会把这个元素的多个hash结果对应到bit序列中查看,如果已经全部置为一,那么说明该元素已经存在。
一个Bloom Filter有以下参数:
m | bit数组的宽度(bit数) |
n | 加入其中的key的数量 |
k | 使用的hash函数的个数 |
f |
False Positive的比率 (假阳性) |
为了把错误率控制在 f,共有 n 个元素的集合作 bloom filter 其他参数可以由以下公式来定值:
m =nlg(1/f)*lge (其中 lg 表示以2为底的对数)
k = - ln(f) / ln(2)
另外对于一个元素非常多的集合要进行 Bloom Filter 操作,必须构造一个返回值范围很大的 hash 函数。可以用 md5 算法生成十六进制的hash值,然后转成十进制:
import hashlibm=hashlib.md5()
m.update('123123123123123123')
print int(m.hexdigest(), base=16)
详见:http://blog.csdn.net/hguisu/article/details/7866173
转载于:https://www.cnblogs.com/rav009/p/5131107.html
Bloom-Filter算法 简介相关推荐
- Bloom Filter算法
一.概念 Bloom Filter的中文翻译叫做布隆过滤器,是1970年由布隆提出的.它实际上是一个很长的二进制向量和一系列随机映射函数.布隆过滤器可以用于检索一个元素是否在一个集合中.它的优点是空间 ...
- Bloom Filter算法优化
Bloom Filter算法优化 基于Redis的Bloom Filter去重,利用Redis的String数据结构,但Redis的String最大只能512M,所以数据过大的时候,需要申请多个去重块 ...
- 利用bloom filter算法处理大规模数据过滤
Bloom Filter是由Bloom在1970年提出的一种快速查找算法,通过多个hash算法来共同判断某个元素是否在某个集合内.可以用于网络爬虫的url重复过滤.垃圾邮件的过滤等等. 它相比hash ...
- 布隆过滤器(Bloom Filter)算法
布隆过滤器原理 开发一个电商项目,因为数据量一直在增加(已达亿级),所以需要重构之前开发好的秒杀功能,为了更好的支持高并发,在验证用户是否重复购买的环节,就考虑用布隆过滤器. 也顺便更加深入的去了解下 ...
- Scrapy 爬虫去重效率优化之 Bloom Filter的算法的对接
From:https://cloud.tencent.com/developer/article/1084962 Python分布式爬虫打造搜索引擎Scrapy精讲-将bloomfilter(布隆过滤 ...
- 网页查重算法Shingling和Simhash和bloom filter研究
网页查重算法Shingling和Simhash和bloom filter研究 在网页查重算法中 shingling 和 simhash 被认为是当前最好的两个算法. shingling算法 shing ...
- Bloom Filter 大规模数据处理利器
2019独角兽企业重金招聘Python工程师标准>>> 最近工作中涉及到bloom Filter,真是一把科研利器呀,大数据.网络.云等等都可以用到! Bloom Filter是由B ...
- Bloom Filter与Cuckoo Filter
Bloom Filter 背景 日常生活中,包括在设计计算机软件时,我们经常要判断一个元素是否在一个集合中.最直接的方法就是将集合中全部的元素存在计算机中,遇到一个新元素时,将它和集合中的元素直接比较 ...
- Bloom Filter原理及python实现
文章目录 一.Bloom Filter存在的意义 二.Bloom Filter算法原理 三.Bloom Filter的优化 哈希函数选择 参数设计 误判率P(true) Hash Function的数 ...
- 大数据处理算法--Bloom Filter布隆过滤
1. Bloom-Filter算法简介 Bloom-Filter,即布隆过滤器,1970年由Bloom中提出.它可以用于检索一个元素是否在一个集合中. Bloom Filter(BF)是一种空间效率很 ...
最新文章
- 在Mac配置adb命令
- 转: 网卡名字eth0,eth1的修改方法
- iOS启动屏 ➕ 闪屏的方法
- 人月神话第一篇阅读笔记
- Java SE 7 Update 25 –发行说明进行了解释。
- (数论)逆元的线性算法
- 无任何网络提供程序接受指定的网络路径解决方法
- 微技能|几分钟搭建网站内容平台
- 必杀技———SQL基础整理系列(一)
- 离散数学及其应用傅彦pdf_离散数学及其应用 傅彦 等 高等教育出版社
- 迪文屏 DGUS采坑手册
- windows网络排查
- 上瘾读书笔记:让用户养成使用习惯的四大产品逻辑
- 外贸客户开发系列 ,让你在领英Linkedin客户开发上事半功倍
- java实现gif动画效果(java显示动态图片)
- 解决TypeError: set_ticks() takes 2 positional arguments but 3 were given
- 【Antdv】input type=number去掉上下箭头、提示文字、鼠标滚轮
- java中I/O流之字节流和字符流学习总结
- 四年级计算机教案模板,小学四年级计算机教案模板.doc
- 上职高学计算机专业有前途吗,职高有哪些专业前途好有发展前景
热门文章
- JS数据结构与算法——冒泡排序(把大的数字依次往后放)
- 天池 在线编程 到达终点
- 天池 在线编程 圣杯咒语
- LeetCode 1361. 验证二叉树(图的出入度)
- LeetCode 1028. 从先序遍历还原二叉树(栈)
- c++ 一行输出八个数字_R语言笔记(三):数据输入与输出
- kafka启动_Kafka安装部署——单节点
- springboot设置运行内存_Docker 如何运行多个 Springboot?
- redis如何设置定时过期_redis补充6之Redis 设置过期时间
- 美团 iOS 工程 zsource 命令背后的那些事儿