Bloom Filter 原理与应用

基于Simulink的防空导弹六自由度弹道建模仿真实战 本文详细介绍了基于Simulink的防空导弹六自由度弹道建模仿真方法。通过分析导弹动力学原理、Simulink环境配置、气动力建模、推进控制系统设计等关键环节,提供了一套完整的实战指南。文章特别强调了六自由度模型在防空导弹仿真中的重要性,并分享了常见问题排查优化建议,为相关领域工程师提供实用参考。 阅读详情

介绍

Bloom Filter是一种简单的节省空间的随机化的数据结构,支持用户查询的集合。一般我们使用STLstd::set, stdext::hash_setstd::set是用红黑树实现的,stdext::hash_set是用桶式哈希表。上述两种数据结构,都会需要保存原始数据信息,当数据量较大时,内存就会是个问题。如果应用场景中允许出现一定几率的误判,且不需要逆向遍历集合中的数据时,Bloom Filter是很好的结构。

优点

1.    查询操作十分高效。

2.    节省空间。

3.    易于扩展成并行。

4.    集合计算方便。

5.    代码实现方便。

6.    有误判的概率,即存在False Position

7.    无法获取集合中的元素数据。

8.    不支持删除操作。

缺点

1.    有误判的概率,即存在False Position

2.    无法获取集合中的元素数据。

3.    不支持删除操作。

定义

Bloom Filter是一个有m位的位数组,初始全为0,并有k个各自独立的哈希函数。


1

添加操作

每个元素,用k个哈希函数计算出大小为k的哈希向量 
,将向量里的每个哈希值对应的位设置为1。时间复杂度为  ,一般字符串哈希函数的时间复杂度也就是 

查询操作

和添加类似,先计算出哈希向量,如果每个哈希值对应的位都为1,则该元素存在。时间复杂度与添加操作相同。

示例

2表示m=16k=2Bloom Filter的哈希值分别为(3, 6)(10, 3)


2

FalsePosition

如果某元素不在Bloom Filter中,但是它所有哈希值的位置均被设为1。这种情况就是False Position,也就是误判。

借用示例,如下:


3

这个问题其实和哈希表中的冲突是相同的道理,哈希表中可以使用开散列和闭散列的方法,而Bloom Filter则允许这样的情况发生,它更关心于误判的发生概率。

概率

宏观上,我们能得出以下结论:

参数表

变量

减少

增加

哈希函数总数

K

l  更少的哈希值计算

l  增加False Position的概率

l  更多的计算

l  位值0减少

Bloom Filter 大小

M

l  更少的内存

l  增加False Position的概率

l  更多的内存

l  降低概率

元素总数

N

l  降低False Position的概率

l  增加概率

FalsePosition的概率为 

假设mn已知,为了最小化False Position,则 

数据


4

扩展

CounterBloom Filter

BloomFilter有个缺点,就是不支持删除操作,因为它不知道某一个位从属于哪些向量。那我们可以给Bloom Filter加上计数器,添加时增加计数器,删除时减少计数器。

但这样的Filter需要考虑附加的计数器大小,假如同个元素多次插入的话,计数器位数较少的情况下,就会出现溢出问题。如果对计数器设置上限值的话,会导致Cache Miss,但对某些应用来说,这并不是什么问题,如Web Sharing

CompressedBloom Filter

为了能在服务器之间更快地通过网络传输Bloom Filter,我们有方法能在已完成Bloom Filter之后,得到一些实际参数的情况下进行压缩。

将元素全部添加入Bloom Filter后,我们能得到真实的空间使用率,用这个值代入公式计算出一个比m小的值,重新构造Bloom Filter,对原先的哈希值进行求余处理,在误判率不变的情况下,使得其内存大小更合适。

应用

加速查询

适用于一些key-value存储系统,当values存在硬盘时,查询就是件费时的事。

Storage的数据都插入Filter,在Filter中查询都不存在时,那就不需要去Storage查询了。

False Position出现时,只是会导致一次多余的Storage查询。

5

l GoogleBigTable也使用了Bloom Filter,以减少不存在的行或列在磁盘上的查询,大大提高了数据库的查询操作的性能。

InternetCache Protocol中的Proxy-Cache很多都是使用Bloom Filter存储URLs,除了高效的查询外,还能很方便得传输交换Cache信息。

网络应用

l P2P网络中查找资源操作,可以对每条网络通路保存Bloom Filter,当命中时,则选择该通路访问。

广播消息时,可以检测某个IP是否已发包。

检测广播消息包的环路,将Bloom Filter保存在包里,每个节点将自己添加入Bloom Filter

信息队列管理,使用Counter Bloom Filter管理信息流量。

垃圾邮件地址过滤

来自于Google黑板报的例子。

像网易,QQ这样的公众电子邮件(email)提供商,总是需要过滤来自发送垃圾邮件的人(spamer)的垃圾邮件。

一个办法就是记录下那些发垃圾邮件的 email地址。由于那些发送者不停地在注册新的地址,全世界少说也有几十亿个发垃圾邮件的地址,将他们都存起来则需要大量的网络服务器。

如果用哈希表,每存储一亿个 email地址,就需要 1.6GB的内存(用哈希表实现的具体办法是将每一个 email地址对应成一个八字节的信息指纹,然后将这些信息指纹存入哈希表,由于哈希表的存储效率一般只有 50%,因此一个 email地址需要占用十六个字节。一亿个地址大约要 1.6GB即十六亿字节的内存)。因此存贮几十亿个邮件地址可能需要上百 GB的内存。

Bloom Filter只需要哈希表 1/8 1/4的大小就能解决同样的问题。

BloomFilter决不会漏掉任何一个在黑名单中的可疑地址。而至于误判问题,常见的补救办法是在建立一个小的白名单,存储那些可能别误判的邮件地址。

引用

[1]     Bloom filter; http://en.wikipedia.org/wiki/Bloom_filter

[2]     Summary Cache: A Scalable Wide-Area Web Cache Sharing Protocol;http://pages.cs.wisc.edu/~cao/papers/summary-cache/

[3]     Network Applications of Bloom Filters: A Survey;http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.127.9672&rep=rep1&type=pdf

[4]     An Examination of Bloom Filters and their Applications;http://cs.unc.edu/~fabian/courses/CS600.624/slides/bloomslides.pdf

[5]     数学之美系列二十一布隆过滤器(Bloom Filter;http://www.google.com.hk/ggblog/googlechinablog/2007/07/bloom-filter_7469.html


PS:

在C++里面,bitmap可以用的数据结构为:

#include <bitset>
	bitset<100> bs;
	bs[1]=1;
	for (int i=0;i<10;++i)
	{
		cout<<bs[i]<<endl;
	}


 

Redis——Bloom Filter原理应用 摘要 在我们平时开发过程中,会有一些 bool 型数据需要存取,比如用户一年的签到记录,签了是 1,没签是 0,要记录 365 天。如果使用普通的 key/value,每个用户要记录 365个,当用户上亿的时候,需要的存储空间是惊人的。为了解决这个问题, Redis 提供了位图数据结构,这样每天的签到记录只占据一个位,365 天就是 365 个位, 46 个字节 (一个稍长一点的字符串) 就可以完全容纳下,这就大大节约了存储空间。 位图不是特殊的数据结构,它的内容其实就是普通的字符串,也就是 byte 阅读详情

相关推荐

基于Simulink的智能车辆电子稳定控制(ESC)仿真

本文完成了基于 Simulink 的智能车辆电子稳定控制(ESC),实现了:✅ 构建含轮胎非线性的车辆动力学模型✅ 设计滑模横摆稳定性控制器✅ 实现四轮制动力分配逻辑✅ 验证在双移线低附着场景下的卓越稳定性✅ 为主动安全控制系统开发提供完整范式。

xiaoheshang_123的博客 59

BloomFilter

BloomFilter是一个大数据处理的算法,它用来判断某个元素是否在集合中。它在空间和时间效率上很高,但是存在移动的误报率。如果返回false,说明元素肯定不在集合中,也就是说不会漏报;但如果返回true,怎可能存在错误。BloomFilter算法: 1)位数组: 假设Bloom Filter使用一个m比特的数组来保存信息,初始状态时,Bloom Filter是一个包含m位的位数组,每一

龙崎的专栏 578

泛微E-cology9.0(EC9)官方前台全套操作手册

泛微E-cology9.0(EC9)官方前台全套操作手册,包含9个文档,word格式。注意这是操作手册,不是二开文档!适合操作人员使用

布隆过滤器(Bloom Filter原理解析

概述 布隆过滤器(Bloom Filter)是布隆在1970年提出的,它可以用来检索一个元素是否在一个集合中。实际上布隆过滤器通过一个二进制向量和一系列随机哈希函数完成元素检索,其优点在于比一般的算法具有更高的时间效率和空间效率,但其缺点是有一定的误差以及难以进行删除操作。 原理 布隆过滤器的核心就是哈希函数,可以将其看作是对 bitmap 的拓展,通过将添加的元素经过 k 个哈希函数映射到一个很长的 bit 向量中的 k 个位置,并将它们置为 1。检索时,通过判断这个位置是否都为 1 就能大概知道集合中是

Ulrich蚊子Blog 4329

【算法】BloomFilter概念和原理以及业务中的应用场景

BloomFilter概念和原理以及业务中的应用场景

互联网小阿祥 1204

BloomFilter原理学习

BloomFilter我们可能经常听到也在使用, 它的特点是如果判断结果为"不存在", 则一定不存在;如果判断为存在, 则可能存在. 如下图未说明当我们判断z元素存在时, 其实是不存在的, 即存在有概率性.

开心就好的专栏 1956

Bloom Filter概念和原理

Bloom Filter概念和原理焦萌 2007年1月27日 Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并能判断一个元素是否属于这个集合。Bloom Filter的这种高效是有一定代价的:在判断一个元素是否属于某个集合时,有可能会把不属于这个集合的元素误认为属于这个集合(false positive)。因此,Bloom Filter不适

jiaomeng 30万+

Bitmap 和 Bloom Filter原理应用

Bitmap 和 Bloom Filter原理应用

qq_37527921的博客 1206

Bloom Filter概念、原理应用

Bloom Filter概念、原理应用

oligaga的博客 268

[Bloom过滤器,论文个人阅读分享]Network Applications of Bloom Filters: A Survey

Bloom filter是一个简单的空间高效的随机数据结构,用于表示支持成员查询的集合。Bloom 过滤器允许误报,在控制错误的概率的条件下,节省空间的优势可以一定克服这个缺点。自 1970 年代以来,Bloom filter已被用于数据库应用程序,但直到最近几年,它们在网络文献中变得流行。本文的目的是调查Bloom filter在各种网络问题中已经被使用和改进的方式,目的是提供一个统一的数学和实用的框架来理解它们,并刺激它们在未来应用中的使用。

GutsShinyHero的博客 1393

Bloom Filters by Example

Bloom Filters by Example A Bloom filter is a data structure designed to tell you, rapidly and memory-efficiently, whether an element is present in a set. The price paid for this efficiency is that

screaming的博客 736

Network Applications of Bloom Filters: A Survey

Bloom Filter假阳性误判率公式推导,论文阅读相关记录

qq_51382761的博客 1141

布隆过滤器 (Bloom Filter) 详解

布隆过滤器 (Bloom Filter)是由Burton Howard Bloom于1970年提出,它是一种space efficient的概率型数据结构,用于判断一个元素是否在集合中。在垃圾邮件过滤的黑白名单方法、爬虫(Crawler)的网址判重模块中等等经常被用到。哈希表也能用于判断元素是否在集合中,但是布隆过滤器只需要哈希表的1/8或1/4的空间复杂度就能完成同样的问题。布隆过滤器可以插入元

wusecaiyun的专栏 580

Compressed Bloom Filter

转载地址:https://blog.csdn.net/jiaomeng/article/details/1505299 Compressed Bloom Filter 在前面的讨论中,我们都只将Bloom Filter作为一种表示集合的数据结构。但在网络应用中,Bloom Filter经常被当作节点之间交换信息时传递的消息。从这个角度考虑,我们自然希望消息在传递之前能够被压缩。 那么Bloo...

weixin_40805079的博客 345

布隆过滤器(Bloom Filter)-使用原理和场景

布隆过滤器 Bloom Filter

m0_38068812的博客 1991
上一篇: BloomFilter--大规模数据处理利器
下一篇: 生产者-消费者问题
qingen123
博客等级 码龄14年 82粉丝 67原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值