图解布隆过滤器(Bloom Filter)

news2024/12/24 21:41:47

布隆过滤器详解

在这里插入图片描述

布隆过滤器(Bloom Filter)是一种空间效率非常高的随机数据结构,由布隆(Burton Howard Bloom)在1970年提出,用于检验一个元素是否属于一个集合。

在这里插入图片描述

具体来说,它可能会错误地认为一个不存在的元素存在(假阳性),但绝不会把一个存在的元素误判为不存在(假阴性),文章后面会详细说明。

在这里插入图片描述

布隆过滤器的基本原理

在这里插入图片描述

布隆过滤器由一个位数组(bit array)和多个哈希函数组成:

  1. 位数组:一个固定长度的位数组(bit array),所有位初始化为0。

在这里插入图片描述

  1. 哈希函数:一组独立的哈希函数,每个函数将输入映射到位数组中的某个位置。

在这里插入图片描述

插入操作

当插入一个元素时,布隆过滤器将该元素通过k个哈希函数计算出k个位置,并将这些位置上的位设置为1。

在这里插入图片描述

例如,假设有三个哈希函数 ( h1, h2, h3 ),插入一个元素 ( x ) 时,将位数组的 ( h1(x), h2(x), h3(x) ) 位置设置为1。

在这里插入图片描述

查询操作

当查询一个元素是否存在时,使用同样的k个哈希函数计算出k个位置,并检查这些位置上的位是否全为1。

  • 如果其中有一个位置为0,则该元素肯定不在(Firm No)集合中。

在这里插入图片描述

  • 如果所有位置都为1,则该元素可能在(Probably Yes)集合中。

在这里插入图片描述

  • 这里博主解释一下为什么说查询的时候结果为 “可能是”(Probably Yes),也就是“假阳性”(False positives)。

在这里插入图片描述

  • 比如说位数组已存储的有ribeyepotato两个值,这时候我们想查询lemon是否存在,于是通过哈希函数组计算哪些位上会存在1。
  • 但在哈希函数组的计算下,不同的k可能会得到相同的v。计算并不存在的lemon却得到了已存在的potato的值,也就是说我们得到的判断是——不存在位数组中的元素 存在!(假阳性出现啦!)

在这里插入图片描述

  • 但是布隆过滤器肯定不会存在假阴性滴!布隆过滤器有误判率,但不会漏报。只要存在,必然会存进位数组,必然能查询到!
    在这里插入图片描述

布隆过滤器的特点总结

1. 空间效率高

  • 布隆过滤器使用一个位数组来表示集合,而不是存储实际的元素。位数组中的每一位只有两种状态:0或1。

  • 通过哈希函数将元素映射到位数组的位置,以避免存储实际的元素,从而大大减少了存储空间的需求。

在这里插入图片描述

  • 多个元素可以共享相同的位,这进一步提高了空间利用率。虽然这会带来假阳性问题,但总体上节省了大量的内存。

2. 查询速度快

  • 查询操作只需要进行几次哈希运算和位数组访问。这些操作的时间复杂度是 (O(k)),其中 (k) 是哈希函数的数量。

在这里插入图片描述

  • 在现代计算机架构中,哈希运算和数组访问都非常快速,因此查询操作可以在常数时间内完成。

3. 插入速度快

  • 插入操作与查询操作类似,也是先通过 (k) 个哈希函数计算出 (k) 个位置,然后将这些位置的位设置为1。
    在这里插入图片描述

  • 由于只涉及位数组的更新和简单的哈希计算,插入操作的时间复杂度也是 (O(k)),且非常高效。

4. 无法删除元素

  • 标准布隆过滤器无法删除元素,因为无法确定某个位是由哪个具体元素设置的。(假阳性)

在这里插入图片描述

  • 由于多个元素可能导致同一个位被设置成1,删除一个元素可能会误删除其他元素的标志位,从而破坏整个过滤器的准确性。
    在这里插入图片描述

5. 假阳性存在

  • 当插入的元素数量增加时,位数组中的1的比例也会增加。这意味着不同元素通过哈希函数映射到同一位的概率增大。

  • 当查询一个不存在的元素时,如果该元素的所有哈希位置都被置为1(由于其他元素的影响),布隆过滤器将返回“可能存在”,即一个假阳性。
    在这里插入图片描述

  • 假阳性率与位数组长度 (m)、哈希函数数量 (k) 和元素数量 (n) 有关。通过选择这些参数,可以控制假阳性率,但无法完全消除。

在这里插入图片描述

  1. 位数组长度 (m):

    • 增大 (m):随着位数组长度的增加,每个哈希位置被设置为1的概率减小,从而降低假阳性率。
    • 减小 (m):如果位数组太短,则不同元素的哈希位置更容易重叠,导致更多的位被设置为1,增加假阳性率。
  2. 哈希函数数量 (k):

    • 优化 (k):假阳性率与哈希函数数量存在一个最优点。当 (k) 过小或过大时,假阳性率都会增加。
    • 过多的哈希函数:增加哈希函数数量会增加每个元素的哈希位置数目,但也会因为重复设置同一位而降效率。
    • 过少的哈希函数:减少哈希函数数量会降低每个元素的哈希位置数目,增加假阳性率。
  3. 元素数量 (n):

    • 增大 (n):随着插入元素数量的增加,位数组中更多的位会被设置为1,导致假阳性率上升。
    • 减小 (n):较少的元素数量意味着位数组中更多的位将保持为0,降低假阳性率。

在这里插入图片描述


布隆适用场景

布隆过滤器适合于那些可以容忍一定误判率的应用场景,但不适合需要百分百准确判断的场景。
在这里插入图片描述
主要用于快速判断元素是否可能存在于一个庞大的集合中,如缓存、垃圾邮件过滤、网页爬虫的URL去重等

1.减少对不存在键的磁盘读取

在这里插入图片描述

2.减少缓存工作量,提高缓存命中率。

在这里插入图片描述

3.识别恶意网址

在这里插入图片描述

4.防止用户使用弱密码

在这里插入图片描述

还有很多应用场景等待列位去体验哈~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1859775.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024CICE电博会·以“链主”企业为核心,推动产业链协同发展

随着全球科技日新月异的发展,消费电子产业已成为推动经济增长、改善人民生活的重要力量。中国国际消费电子博览会(简称CICE电博会)自2001年创办以来,已经走过了二十余个春秋,凭借其独特的地理位置优势、专业的组织策划…

MYSQL九、MYSQL的视图的认识

视图 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在。行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 视图只保存了查询的SQL逻辑,不保存查询结果。在创建视图的时候,…

Delphi-2M:基于病史预测未来健康的改进GPT架构

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

一份日本 AWS Summit 的前线快报

5月底刚参加完 AWS 中国 Summit「这次的上海 AWS Summit 好玩的有点过分」,后来网翻官不经意间看到 6 月 AWS 还会在日本举办一场 Summit。正好最近公司也签下了几个日本客户,眼看着 5 年签证也即将到期,于是心一横,决定东渡扶桑。…

快速上手 Spring Boot:基础使用详解

快速上手 Spring Boot:基础使用详解 文章目录 快速上手 Spring Boot:基础使用详解1、什么是SpringBoot2、Springboot快速入门搭建3、SpringBoot起步依赖4、SpringBoot自动配置:以tomcat启动为例5、SpringBoot基础配置6、yaml7、多环境开发配置…

移动硬盘恢复数据要多久 4T移动硬盘数据恢复一般多少钱

在日常工作中,移动硬盘是非常实用的一种数据文件存储设备,在大数据存储上是有极强的优势的,不过移动硬盘有时候也会出现数据丢失的情况。接下来给大家详细讲解,移动硬盘恢复数据要多久,以及4T移动硬盘数据恢复一般多少…

当你在浏览器输入一个地址

你在浏览器中输出了一个地址,回车后,一直到显示页面,中间经历了哪些过程 ? 1. 用户输入 URL 并按下回车 用户在浏览器的地址栏中输入一个 URL(例如 http://example.com)并按下回车键。 2. DNS 解析 浏览…

【机器学习】自然语言处理(NLP)领域革命性突破的模型——Transformer

目录 引言 自注意力机制介绍 生成Query、Key和Value向量 模型结构与实现 在自然语言处理中的应用 个人主页:东洛的克莱斯韦克-CSDN博客 👀引言 👀在自然语言处理领域,传统的循环神经网络和长短时记忆网络虽然取得了一定的成…

linux 登录ftp报Received message too long 1416128883

在linux 登录ftp报Received message too long 1416128883 [rootlocalhost ~]# sftp oaftp172.20.xx.xx解决办法: [rootlocalhost ~]# usermod -s /bin/bash oaftp[rootlocalhost ~]# systemctl restart vsftpd.service[rootlocalhost ~]# sftp oaftp172.20.xx.xx完…

【TB作品】stm32单片机,红外遥控器,温控风扇,模拟空调,PWM风扇

空调机 硬件:stm32、oled显示器、ds18b20温度传感器、风扇驱动和风扇、红外接收器、遥控器 软件功能: (1)显示室内温度 (2)显示当前模式:常态、除湿、通风 (3)显示当前风…

昇思25天学习打卡营第6天 | 函数式自动微分

神经网络的训练主要使用反向传播算法, 模型预测值(logits)与正确标签(label)送入损失函数(loss function)获得loss, 然后进行反向传播计算,求得梯度(gradie…

Kubernetes 中 ElasticSearch 中的 MinIO 审核日志

无论您是在本地还是在云中,您都希望确保以同构的方式设置工具和流程。无论在何处访问基础结构,您都希望确保用于与各种基础结构进行交互的工具与其他区域相似。 考虑到这一点,在部署您自己的 MinIO 对象存储基础架构时,深入了解您…

【Python】已解决:urllib模块设置代理ip

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:urllib模块设置代理ip 一、分析问题背景 在使用Python的urllib模块进行网络请求时,有时我们需要通过代理服务器来发送请求,以达到隐藏真…

python中的<class ‘complex‘>

一般编程里面不怎么会讲&#xff0c;但是还是挺强大的一个类。 在 Python 中&#xff0c;<class complex> 表示复数类型。复数是一种包含实部和虚部的数学数&#xff0c;可以用 a bj 的形式表示&#xff0c;其中 a 表示实部&#xff0c;b 表示虚部&#xff0c;j 是虚数…

2024年广西三支一扶报名详细流程(附报名照处理流程)​

2024年广西将招募1650名高校毕业生到基层从事支农、支医、支教和帮扶乡村振兴工作&#xff08;简称“三支一扶”&#xff09;。 招募对象为全日制普通高校应届及择业期内2022年至2024年毕业的全日制普通高校毕业生。 ➡️招募条件。 1.具有全日制大专&#xff08;含高职高专&am…

【C++题解】1058 - 求出100至999范围内的所有水仙花数。

问题:1058 - 求出100至999范围内的所有水仙花数。 类型&#xff1a;简单循环 题目描述&#xff1a; 所谓水仙花数&#xff0c;就是指各位数字立方之和等于该数的数&#xff1b;a^3 称为 a 的立方&#xff0c;即等于 aaa 的值。 例如&#xff1a;因为 15313533^3 &#xff0c;…

【JavaEE 进阶(六)】Mybatis操作数据库

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多进阶知识 目录 1.前言2.JDBC操作3.Mybatis3.1Mybatis入门3.1.1准备工作3.1.2配置数据库连接3.1.2写持久…

13 物理层介质及设备

物理层介质及设备 一、线缆的连接 &#xff08;一&#xff09;线序 ​ 线序&#xff1a; RJ-45连接头12345678568A绿白绿橙白蓝蓝白橙棕白棕568B橙白橙绿白蓝蓝白绿棕白棕 ​ 1、2发送&#xff0c;3、6接收 &#xff08;二&#xff09;线缆的应用 1.线缆的连接 ​ 标准…

OpenHarmony 5.0 纯血鸿蒙系统

OpenHarmony-v5.0-Beta1 版本已于 2024-06-20 发布。 OpenHarmony 5.0 Beta1 版本标准系统能力持续完善&#xff0c;ArkUI 完善了组件通过 C API 调用的能力&#xff1b;应用框架细化了生命周期管理能力&#xff0c;完善了应用拉起、跳转的能力&#xff1b;分布式软总线连接能力…

MindManager2024思维导图软件重磅发布更新!

大家好啊&#xff01;&#x1f44b; 今天我超级激动要分享给大家一款改变我工作和学习方式的工具——MindManager2024思维导图软件&#xff01;这可不仅仅是个工具哦&#xff0c;它更像是我的私人思维助手&#xff0c;帮我整理思绪&#xff0c;规划时间&#xff0c;还能激发创新…