Java学习 - 布隆过滤器

news2024/10/5 17:24:16

前置需求

  • 需求
    • 已经有50亿个电话号码,现在给出10万个电话号码,如何快速准确地判断这些电话号码是否已经存在?
  • 参考方案
    • 通过数据库查询:比如MySQL,性能不行,速度太慢
    • 将数据先放进内存:50亿*8字节=40GB,内存占用太大
    • hyperloglog算法:准确度不行
  • 现实类似问题
    • 垃圾邮件判断
    • 文字处理软件的错误单词检测
    • 网络爬虫的url去重
  • 解决方法
    • 使用布隆过滤器

布隆过滤器介绍以及原理

  • 布隆过滤器作用

    • 占用很少的空间和使用较少的时间判断一个小数据集是否是一个大数据集的子集
  • 布隆过滤器参数

    • n:一个很长的二进制,n位
    • m:需要放入的数据数量,m个
    • k:k个哈希函数
  • 布隆过滤器构建过程

    • 初始化:原始二进制数字中的每一位都置为0

    • 一个数据经过1个哈希函数会得到一个位置,该位置置1

    • 一个数据经过k个哈希函数处理会,在原理二进制中会有k个位置被置1

    • 所有数据重复以上两步,即可构建出对于这个数据集的布隆过滤器

      在这里插入图片描述

  • 布隆过滤器判断有无

    • 一个数据经过k个哈希函数处理,查看得到的位置是否都为1,如果有至少一个位置不为1,则证明这个数据不在数据集中,反之,这个数据很大可能在这个数据集中(因为存在误差)
  • 布隆过滤器的误差

    • 误差可能存在

      • 一个数据并未参数构建布隆过滤器,但是它的计算结果可能会“已经存在”,比如当只用1个哈希函数或者二进制数很短时,可能别的数据的结果刚好与整个数据相同,于是这个数据也被当做存在了
      • 已有的数据一定显示已有,未有数据可能”已有“
    • 误差计算

      在这里插入图片描述

    • 误差率统计

      在这里插入图片描述

布隆过滤器的实现

  • 由Go和redis组合实现一个布隆过滤器
  • 底层数据结构
    • redis中衍生数据类型很适合作为实现布隆过滤器的底层数据类型
  • 实现方法
    • 布隆过滤器的构造参数:插入数量m,哈希函数个数k
    • 布隆过滤器的操作函数:Add,Contains,Probability
    • 封装redis位图操作
    • 总体代码
    • 样例测试

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

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

相关文章

用pycharm进行python爬虫的步骤

使用 pycharm 进行 python 爬虫的步骤:下载并安装 pycharm。创建一个新项目。安装 requests 和 beautifulsoup 库。编写爬虫脚本,包括获取页面内容、解析 html 和提取数据的代码。运行爬虫脚本。保存和处理提取到的数据。 用 PyCharm 进行 Python 爬虫的…

机器人控制系列教程之Simulink中模型搭建(1)

机器人模型获取 接上期:机器人控制系列教程之控制理论概述,文中详细讲解了如何通过Solidworks软件导出URDF格式的文件。文末提到了若需要将其导入到Simulink中可在命令行中输入smimport(urdf/S_Robot_urdf.urdf),MATLAB将自动打开Simulink以…

TCP单进程循环服务器程序与单进程客户端程序

实验目的 理解并掌握以下内容: 网络进程标识(即套接字地址)在Linux中的数据结构与地址转换函数。网络字节序与主机字节序的定义、转换以及相关函数在网络编程中的应用。数据结构内存对齐的基本规则,以及基于数据结构构建PDU的基本方法。TCP单进程循环服务器与单进程客户端的…

【ai】ubuntu18.04 找不到 nvcc --version问题

nvcc --version显示command not found问题 这个是cuda 库: windows安装了12.5 : 参考大神:解决nvcc --version显示command not found问题 原文链接:https://blog.csdn.net/Flying_sfeng/article/details/103343813 /usr/local/cuda/lib64 与 /usr/local/cuda-11.3/lib64 完…

【机器学习300问】133、什么是降维?有哪些降维的方法?

假如你有一本非常厚的书,每一章代表一个特征维度,而书中的故事(数据点)在每个章节(维度)都有详细的描述。但是,读者(模型)发现很难理解和记忆这个复杂的故事,…

视频监控业务平台LntonCVS国标视频综合管理平台功能及技术优势

随着安防行业的快速进步,传统的视频监控平台正在与先进的技术和互联网技术融合,包括5G通信、GIS、大数据、云计算、边缘计算、AI识别、智能分析和视频直播等。这些技术的整合形成了综合性视频监控管理平台,具备集中管理、多级联网共享、互联互…

在 UBUNTU 22.04 上逐步构建 Postal SMTP 服务器

构建 Postal SMTP 服务器来发送批量电子邮件是电子邮件营销人员的不错选择。Postal 功能非常强大,并拥有大量开发人员的支持。它是一个用 JavaScript 和 Ruby 编写的开源邮件服务器脚本。它可用于构建内部 SMTP 服务器,就像 Mailgun、Sendgrid、Mailchim…

数字信号处理实验四(FIR数字滤波器设计)

FIR数字滤波器设计(2学时) 要求: 设计一个最小阶次的低通FIR数字滤波器,性能指标为:通带0Hz~1500Hz,阻带截止频率2000Hz,通带波动不大于1%,阻带波动不大于1%,采样频率为8…

JeecgBoot新建模块

引言 jeecg-boot设置了demo, system等默认模块。在二次开发中,常常需要进行模块扩展。比如新增一个订单模块或支付模块。如何准确的新增模块,在此文进行记录。 步骤 新建模块 在项目点击右键,新建模块。 如下图。 注意:报名需…

arco disign vue 日期组件的样式穿透

问题描述: 对日期组件进行样式穿透. 原因分析: 如图,日期组件被展开时它默认将dom元素挂载到body下, 我们的页面在idroot的div 里层, 里层想要穿透外层是万万行不通的. 解决问题: 其实官网提供了参数,但是并没有提供例子, 只能自己摸索着过河. 对于日期组件穿透样式,我们能…

来自Claude官方的提示词库,支持中文!建议收藏!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之…

KV260视觉AI套件--开箱报告

目录 1. 简介 2. 与 Zynq 的渊源 3. 官方的入门步骤 4. 总结 1. 简介 传统的ARMFPGA或DSPFPGA控制方案在软件、逻辑、硬件以及系统工程的协同调试中,往往需要团队成员之间严格按照预定计划和接口规范进行分工合作,这不仅增加了测试过程的复杂性&…

ubuntu16.04上搭建qt开发环境

安装qt 下载qt在linux下的安装包qt-opensource-linux-x64-5.8.0.run;将安装包拷贝到ubuntu16.04上;执行如下命令进行安装,注意:安装前先断开虚拟机的网络,这样就避免了注册账户的操作 基本上一路按“next”键&#xf…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 数字排列游戏(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 &#x1f…

第5章 传输层

王道学习 考纲内容 (一)传输层提供的服务 传输层的功能:传输层寻址与端口;无连接服务和面向连接服务 (二)UDP UDP数据报;UDP检验 (三)TCP …

坑——python的redis库的decode_responses设置

python的redis库查询返回的值默认是返回字节串,可以在redis.Redis()方法中通过设置decode_responses参数,让返回值直接是字符串; 查询返回字节串是因为Redis()方法中decode_responses默认值是False: 设置decode_responses为True就…

mac Canon打印机连接教程

官网下载安装驱动: 选择打印机类型和mac系统型号下载即可 Mac PS 打印机驱动程序 双击安装 系统偏好设置 点击“”添加: OK可打印玩耍!! 备注: 若需扫描,下载扫描程序: 备注:…

java 统计xmind的结点数(测试用例case数)

mac电脑解压出来的xmind的数据主要在content.json上 开头结尾有[],里面是json import org.json.JSONArray; import org.json.JSONObject; import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream;public class XMindLeafCounter2 {public stat…

小程序驾校预约系统的设计

管理员账户功能包括:系统首页,个人中心,学员管理,教练管理,驾校信息管理,驾校车辆管理,教练预约管理,考试信息管理 微信端账号功能包括:系统首页,驾校信息&am…

【面试干货】与的区别:位运算符与逻辑运算符的深入探讨

【面试干货】&与&&的区别:位运算符与逻辑运算符的深入探讨 1、&:位运算符2、&&:逻辑运算符3、&与&&的区别 💖The Begin💖点点关注,收藏不迷路💖 & 和 …