当前位置:网站首页>0 9 布隆过滤器(Bloom Filter)
0 9 布隆过滤器(Bloom Filter)
2022-07-29 06:46:00 【51CTO】
思考
如果要经常判断 1 个元素是否存在,你会怎么做?
很容易想到使用哈希表(HashSet、HashMap),将元素作为 key 去查找 * 时间复杂度:O(1),但是空间利用率不高,需要占用比较多的内存资源
如果需要编写一个网络爬虫去爬10亿个网站数据,为了避免爬到重复的网站,如何判断某个网站是否爬过?
很显然,HashSet、HashMap 并不是非常好的选择
是否存在时间复杂度低、占用内存较少的方案?
布隆过滤器(Bloom Filter)
布隆过滤器(Bloom Filter)
1970年由布隆提出
它是一个空间效率高的概率型数据结构,可以用来告诉你:一个元素一定不存在或者可能存在
优缺点
优点:空间效率和查询时间都远远超过一般的算法
缺点:有一定的误判率、删除困难
它实质上是一个很长的二进制向量和一系列随机映射函数(Hash函数)
常见应用
网页黑名单系统、垃圾邮件过滤系统、爬虫的网址判重系统、解决缓存穿透问题
布隆过滤器的原理
假设布隆过滤器由 20位二进制、 3 个哈希函数组成,每个元素经过哈希函数处理都能生成一个索引位置
添加元素:将每一个哈希函数生成的索引位置都设为 1
查询元素是否存在
* 如果有一个哈希函数生成的索引位置不为 1,就代表不存在(100%准确)
* 如果每一个哈希函数生成的索引位置都为 1,就代表存在(存在一定的误判率)

添加、查询的时间复杂度都是:O(k) ,k 是哈希函数的个数。空间复杂度是:O(m) ,m 是二进制位的个数
布隆过滤器的误判率

布隆过滤器的实现

Guava: Google Core Libraries For Java
https://mvnrepository.com/artifact/com.google.guava/guava
边栏推荐
- 用户列表 圆形头像并跟随小板块
- Explanation of suffix automata (SAM) + Luogu p3804 [template] suffix automata (SAM)
- Unity发送Post请求给GoLang服务端解析并返回
- WPF简单登录页面的完成案例
- Improved pillar with fine grained feature for 3D object detection paper notes
- Hj37 statistics of the total number of rabbits per month Fibonacci series
- Comparison of advantages between can & canfd integrated test analysis software lkmaster and PCA Explorer 6 analysis software
- 路由中的生命周期钩子 - activated与deactivated
- vagrant box 集群 处理
- gin 模版
猜你喜欢

WPF简单登录页面的完成案例

Spark Learning Notes (VII) -- spark core core programming - RDD serialization / dependency / persistence / partition / accumulator / broadcast variables

约瑟夫环问题

用户列表 圆形头像并跟随小板块

MySQL----多表查询

LeetCode 879. 盈利计划

VMware16创建虚拟机:无法创建新虚拟机,不具备执行此操作的权限

基于C语言实现图书借阅管理系统

Why does ETL often become ELT or even let?

Image noise and matrix inversion
随机推荐
Operator3 - design an operator
MySQL----多表查询
如何使用gs_expansion扩展节点
路由中的生命周期钩子 - activated与deactivated
fillder使用
Win11 system error: code execution cannot continue because ierutil.dll cannot be found. Reinstalling the program may fix this problem
gin 服务退出
最新百亿量化私募名单
Vite3.0 has been released, can you still roll it (list of new features)
VMware16安装虚拟机遇到的问题
CAN&CANFD综合测试分析软件LKMaster与PCAN-Explorer 6分析软件的优势对比
Redis Basics
暑期总结(二)
作业7.28 文件IO与标准IO
怎么会不喜欢呢,CICD中轻松发送邮件
WPF simple login page completion case
Homebrew brew update 长时间没反应(或卡在 Updating Homebrew...)
【OpenGL】着色器(Shader)的使用
记 - 踩坑-实时数仓开发 - doris/pg/flink
Hj37 statistics of the total number of rabbits per month Fibonacci series