布隆过滤器【转】

博客围绕布隆过滤器展开,先提出判断网站访客IP是否首次访问的场景,分析了用hashtable存储IP存在空间大的问题,又介绍了bit存储方式及其缺点。接着阐述布隆过滤器原理,即多次散列值在bit上都为1可能存在,有一个不为1则一定不存在,还列举了其在网络爬虫、K - V数据库等方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景

假设你现在要处理这样一个问题,你有一个网站并且拥有很多访客,每当有用户访问时,你想知道这个ip是不是第一次访问你的网站。

hashtable 可以么

一个显而易见的答案是将所有的ip用hashtable存起来,每次访问都去hashtable中取,然后判断即可。但是题目说了网站有很多访客, 假如有10亿个用户访问过,每个ip的长度是4 byte,那么你一共需要4 * 1000000000 = 4000000000Bytes = 4G , 如果是判断URL黑名单, 由于每个URL会更长,那么需要的空间可能会远远大于你的期望。

bit

另一个稍微难想到的解法是bit, 我们知道bit有0和1两种状态,那么用来表示存在,不存在再合适不过了。

加入有10亿个ip,我们就可以用10亿个bit来存储,那么你一共需要 1 * 1000000000 = (4000000000 / 8) Bytes = 128M, 变为原来的1/32, 如果是存储URL这种更长的字符串,效率会更高。

基于这种想法,我们只需要两个操作,set(ip) 和 has(ip)

这样做有两个非常致命的缺点:

  1. 当样本分布极度不均匀的时候,会造成很大空间上的浪费

我们可以通过散列函数来解决

  1. 当元素不是整型(比如URL)的时候,BitSet就不适用了

我们还是可以使用散列函数来解决, 甚至可以多hash几次

布隆过滤器

布隆过滤器其实就是bit + 多个散列函数, 如果经过多次散列的值再bit上都为1,那么可能存在(可能有冲突)。 如果 有一个不为1,那么一定不存在(一个值经过散列函数得到的值一定是唯一的),这也是布隆过滤器的一个重要特点。

bloom-filter-url

布隆过滤器的应用

  1. 网络爬虫 判断某个URL是否已经被爬取过

  2. K-V数据库 判断某个key是否存在

比如Hbase的每个Region中都包含一个BloomFilter,用于在查询时快速判断某个key在该region中是否存在。

  1. 钓鱼网站识别

浏览器有时候会警告用户,访问的网站很可能是钓鱼网站,用的就是这种技术

从这个算法大家可以对 tradeoff(取舍) 有更入的理解。

转自https://github.com/azl397985856/leetcode/blob/master/thinkings/bloom-filter.md 

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值