【数据结构】哈希经典应用:布隆过滤器(哈希+位图)——[深度解析](9)

前言

大家好吖,欢迎来到 YY 滴 数据结构 系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴 数据结构 专栏!更多干货持续更新!以下是传送门!

目录

  • 一.布隆过滤器产生的前提
  • 二.布隆过滤器的原理&基本场景
    • 【1】布隆过滤器的核心原理&重要性质
    • 【2】布隆过滤器的基本场景
      • (1)快速判断广告是否推送过——不需要精确的场景
      • (2)快速判断昵称是否注册过——需要精确的场景
  • 三.布隆过滤器一般不支持"删除"
  • 四.布隆过滤器的经典例题
    • 【1】给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法————(哈希切分)
    • 【2】如何扩展BloomFilter使得它支持删除元素的操作

一.布隆过滤器产生的前提

  • 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉
    那些已经看过的内容。
  • 用服务器记录了用户看过的所有历史记录,当推荐系统推荐新闻时会 从每个用户的历史记录里进行筛选,过滤掉那些已经存在的记录。 如何快速查找呢?
  1. 用哈希表存储用户记录,缺点:浪费空间
  2. 用位图存储用户记录,缺点:位图一般只能处理整形,如果内容编号是字符串,就无法处理
    了。
  3. 将哈希与位图结合,即布隆过滤器

二.布隆过滤器的原理&基本场景

【1】布隆过滤器的核心原理&重要性质

  • 布隆过滤器是由布隆(Burton Howard Bloom)在1970年提出的 一种紧凑型的、比较巧妙的概
    率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西可能存在或者一定不存在”,它是用 多个哈希函数 ,将一个数据映射到位图结构中
  • 此种方式不仅可以提升查询效率,也可以节省大量的内存空间。

如下图1所示:

  • 某样东西可能存在:baidu 与other 通过哈希函数Hash1,Hash2都同时映射到相同位置发生了哈希冲突。所以当我们根据该位置下定义:baidu/Other存在,则可能出现误判,这种误判无法消除,所以只能下定义——某样东西可能存在

如下图2所示:

  • 某样东西一定不存在:比如只有位图3号位置被标识为1,则一定能说明baidu和Other一定不存在

在这里插入图片描述
在这里插入图片描述

【2】布隆过滤器的基本场景

(1)快速判断广告是否推送过——不需要精确的场景

  • 比如我们在【一】中提出的我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过的内容。
    在这里插入图片描述

(2)快速判断昵称是否注册过——需要精确的场景

  • 根据布隆过滤器的性质:它会告诉你 “某样东西可能存在或者一定不存在
  • 如果每一次查询都访问数据库,会增加数据库查询负载降低效率
  • 因此我们设置一个布隆过滤器,把所有昵称都放到这个过滤器中, 如果显示昵称不存在,则支持输入昵称;如果显示昵称存在,则表示其可能存在,再到数据库中进行精确查询;

    在这里插入图片描述

三.布隆过滤器一般不支持"删除"

  • 布隆过滤器不能直接支持删除工作,因为在删除一个元素时,可能会影响其他元素

四.布隆过滤器的经典例题

【1】给两个文件,分别有100亿个query,我们只有1G内存,如何找到两个文件交集?分别给出精确算法和近似算法————(哈希切分)

  • 我们先有一个内存大小基本概念:1G约为10亿byte,假设一个query平均为30byte,那么100亿query就约为3000亿byte,约为300G
  • 哈希切分的基本概念: 是将一个大文件,利用哈希的原理, 将其分为若干个小文件。
  • 相同的数据都被分到同一个文件里
  • 在此题中,如下图所示,即:A和B中相同的query就会进入相同的小文件中
    在这里插入图片描述
    在这里插入图片描述

【2】如何扩展BloomFilter使得它支持删除元素的操作

  • 多个位标识同一个值,使用 引用计数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

修改Element UI可清空Input的样式

如图所示&#xff0c;修改Input右侧的清空按钮位置&#xff1a; <el-input class"create-catalog-ipt"placeholder"请输入相关章节标题"v-model"currentCatalogTitle"clearable /> // SCSS环境 ::v-deep {.create-catalog-ipt {input {he…

华为云之轻松搭建 Nginx 静态网站

华为云之轻松搭建 Nginx 静态网站 一、本次实践介绍1. 本次实践目的2. 本次实践环境 二、ECS弹性云服务器介绍三、准备实践环境1. 预置环境2. 查看ECS服务器的账号密码信息3. 登录华为云4. 远程登录ECS服务器 四、安装配置 Nginx1. 安装nginx2. 启动nginx3. 浏览器中访问nginx服…

【ARM Trace32(劳特巴赫) 使用介绍 14 -- Go.direct 介绍】

请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 Go.directGo配合程序断点使用Go 配合读写断点使用Go 快速回到上一层函数 System.Mode Go Trace32 Go.direct TRACE32调试过程中&#xff0c;会经常对芯片/内核进行控制&#xff0c;比如全速运行、暂停、单步等等。这篇文章先…

CentOS 7.x操作系统的ECS云服务器上搭建WordPress网站

WordPress是使用PHP语言开发的博客平台&#xff0c;在支持PHP和MySQL数据库的服务器上&#xff0c;您可以用WordPress架设自己的网站&#xff0c;也可以用作内容管理系统&#xff08;CMS&#xff09;。本教程介绍如何在CentOS 7.x操作系统的ECS实例上搭建WordPress网站。 背景…

服务器漏洞防护措施有哪些?

随着互联网的普及和发展&#xff0c;服务器在各个领域的应用越来越广泛&#xff0c;同时也面临着越来越多的安全威胁。服务器漏洞一旦被攻击者利用&#xff0c;不仅可能导致数据泄露、系统崩溃等严重后果&#xff0c;还可能影响到企业的正常运营和声誉。因此&#xff0c;加强服…

山海鲸可视化软件:选择合适的图表,让数据可视化更高效

作为一名山海鲸可视化软件的开发者&#xff0c;我深知选择合适的图表对于数据可视化的重要性。下面我将从开发者的角度&#xff0c;分享一些关于如何选择合适可视图表的建议。 首先&#xff0c;我们需要明确数据可视化的目标。不同的图表类型具有不同的特点和适用场景&#xff…

中海达亮相能源北斗与时空智能创新技术应用大会

12月7日-8日&#xff0c;2023年能源北斗与时空智能创新技术应用大会暨鹭岛论坛在厦门举办。本次活动以“能源北斗时空智能”为主题&#xff0c;由中关村智能电力产业技术联盟、中国能源研究会、中国卫星导航定位协会、中国电力科学研究院有限公司、国网信息通信产业集团有限公司…

docker使用详解

介绍 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。 Docker基于轻量级虚拟化技术&#xff0c;整个项目基于Go语言开…

datax-自定义json遇到数据库字段名为关键字

一、背景 源数据库&#xff1a;pg 目标数据库&#xff1a;hive 问题&#xff1a; 自定义json时因pg表字段中包含desc的字段所以报错 二、定位问题 很明显&#xff0c;desc是关键字&#xff0c;所以报错 三、解决方案 将自定义json中的双引号调整成单引号&#xff0c;关键…

通过 RIOT 将 AWS ElastiCache 迁移到阿里云 Tair

本文通过示例介绍了 RIOT 如何轻松地将数据从 AWS ElastiCache 迁移到云原生内存数据库&#xff08;如 Tair 和云数据库 Redis 版&#xff09;。 1. 准备资源迁移 1.1. 源代码 AWS ElastiCache cache.r6g.xlarge。它有三个数据分片&#xff0c;与 Redis 6.2 兼容。 AWS EC2 t2.…

vue中预览pdf的方法

使用vue-pdf 备注&#xff1a;这里只介绍了一页的pdf <div class"animation-box-pdf"><pdf :src"http://xxxx" /> </div>import Pdf from vue-pdf // src可以是文件地址url&#xff0c;也可以是文件流blob&#xff08;将blob转成url&a…

Python机器学习19——常用六种机器学习的异常值监测方法(孤立森林,数据支持描述,自编码器,高斯混合,DBSCAN,LOF)

案例背景 异常值监测是机器学习的一个重要领域&#xff0c;博主以前做预测多&#xff0c;异常值监测涉及得少&#xff0c;但之后的工作可能需要做异常值方面的工作&#xff0c;所以大致总结了一下常用的机器学习来做异常值监测的方法以及代码。 标题的这些机器学习方法基本都…

Java项目学生管理系统六后端补充

班级管理 1 班级列表&#xff1a;后端 编写JavaBean【已有】编写Mapper【已有】编写Service编写controller 编写Service 接口 package com.czxy.service;import com.czxy.domain.Classes;import java.util.List;/*** author 桐叔* email liangtongitcast.cn* description*/ p…

计算机基础

【一】深度学习中常用的Linux命令汇总 1.man&#xff1a;man command&#xff0c;可以查看某个命令的帮助文档&#xff0c;按q退出帮助文档 2.cd&#xff1a;用于切换目录&#xff0c;cd - 可以在最近两次目录之间来回切换 3.touch&#xff1a;touch file创建文件。 4.ls&…

Windows、Linux 和 macOS 操作系统:操作系统大比较

目录 引言 Windows Linux macOS 1. 用户界面 1.1 Windows 1.2 Linux 1.3 macOS 2. 开发者支持 2.1 Windows 2.2 Linux 2.3 macOS 3. 安全性和稳定性 3.1 Windows 3.2 Linux 3.3 macOS 结论 引言 在计算机科学领域&#xff0c;操作系统是计算机系统中的核心软件…

【计算机视觉】SIFT

在边缘提取的时候&#xff0c;用高斯一阶导对信号进行卷积&#xff0c;响应值最大的就是边界如果用高斯二阶导对信号进行卷积&#xff0c;0点就是边界点&#xff08;二阶导等于0的点&#xff0c;对应一阶导的极值点&#xff09; 如果用高斯二阶导在不同的信号上进行卷积&#x…

华为数通---配置基本QinQ示例

QinQ简介 定义 QinQ&#xff08;802.1Q-in-802.1Q&#xff09;技术是一项扩展VLAN空间的技术&#xff0c;通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩展VLAN空间的功能&#xff0c;可以使私网VLAN透传公网。由于在骨干网中传递的报文有两层802.1Q Tag&#x…

【JavaWeb学习笔记】7 - Servlet入门开发

零、在线文档 Servlet 3.1 API Documentation - Apache Tomcat 8.0.53 一、Servlet基本介绍 1.为什么出现Servlet 提出需求:请用你现有的html css javascript&#xff0c;开发网站&#xff0c;比如可以让用户留言/购物/支付,你能搞定吗? 不能 这几个不能直接操作数据库 …

Android gradle配置jar包加载顺序及延伸知识

Android gradle配置jar包加载顺序及延伸知识 前言一、直接配置1.APP目录下的build.gradle2.项目级的build.gradle3.其他问题 二、gradle的生命周期及关键方法1.关键方法2.gradle的生命周期 总结 前言 项目涉及到了要加载framework.jar&#xff0c;需要将libs文件夹下的framewo…

SpringBoot对PDF进行模板内容填充、电子签名合并

1. 依赖引入–这里只包含额外引入的包 原有项目包不含括在内 <!-- pdf编辑相关--> <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version> </dependency><de…