赞
踩
什么是布隆过滤器?
维基百科给出的解释如下:
布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制矢量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
如果有1亿个不重复的网址,如何判定某个网址是否包含在这1亿个地址中?可能第一时间就想到用hash表了。但是,如果用hash表,存储1亿个网址,假设1亿个网址都被压缩为8字节的短网址,因为hash表中不可避免总会发生碰撞,如果控制hash表的装填因子在0.5左右,那至少需要的内存大小为:2*8*10^8/(1024^3)=1.5G。如果需要存储10亿,100亿的网址呢?有人会说,可以采用位图的方式,将每个网址经过一个哈希函数映射到某一位,比如1亿个网址,只需要1亿位就可以保存,也就只需要1*10^8/(1024^2*8)=11.9M。但是因为哈希函数冲突概率太高,假设要将冲突概率降低到1%,至少要将位图长度设定为url个数的100倍,所以使用的内存大小也接近1G了。显然,这种情况下hash表或位图处理就不再合适。这时候就需要用到布隆过滤器了。
布隆过滤器原理
布隆过滤器需要一个位数组,这点和位图类似。还需要k个映射函数,这点和h
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。