位图、布隆过滤器

news2024/12/22 19:23:51

普通的哈希表增删查改的效率的确达到了令人满意的O(1),但是本质还是以空间换时间来实现的。并且哈希表中是直接存储数据的,应对一些海量数据处理的问题可能就会造成空间不足的问题。

加入现有40亿个无符号整形数字,设计一个算法来实现检测一个数字是否存在。40亿个无符号整形数字的大小大致有15G的体量,普通的内存是无法容纳这么大的文件的,因此不能通过直接的哈希映射来实现。

因此我们迫切需要设计一种能够节省空间的数据结构来实现目的。仔细想一想题目,判断存不存在,无非是一个两态的问题,是否可以把不同的状态设一个标识呢?0标识不在,1标识在是不是可以行得通。

如果我们让一个整数对应一个比特位,就可以节省很大空间了,那么现在只需要2^32-1个比特位就可以实现了(40亿整数有最大值,存在重复),通过计算现在只需要0.5GB的空间了,这绝对是一个很大的突破!

这种数据结构叫做位图

位图模拟实现源码:
https://gitee.com/chxchenhaixiao/test_c/tree/master/BitSet

位图的优缺点:
优点:通过比特位来映射数据,极大得节省了空间;不直接存储数据,提高了安全性。
缺点:只能够直接作用于整形数据,对于浮点型、字符串型、自定义类型等数据无法直接映射。因为这些数据类型得范围趋向于无穷,设置再多的比特位也无法完全标识所有数据。

实际中单纯得整形数据并不常见,常见的往往是字符串类型,既然无法直接用位图来实现,那么我们只能退而求其次,让每一个比特位能够对应多个数据,实现准确判断数据不存在的目的(存在可能是误判)。

从而衍生出布隆过滤器

那么什么是布隆过滤器呢?
布隆过滤器本质上是位图和哈希的结合,通过多个哈希函数得出多个哈希值,哈希值对应比特位。
虽然这样会导致存在的误判,但是也规避掉了很多不存在的查找。是一种高效的数据结构。

布隆过滤器模拟实现源码:
https://gitee.com/chxchenhaixiao/test_c/blob/master/BloomFitler/BloomFitler/BloomFitler.h

哈希切割,海量数据处理

在这里插入图片描述
精确算法:

借助哈希切割的思想

将2个大文件均拆解成相同个能够进入内存的小文件(不是平均分),读取其中一个文件中的数据,通过一个哈希函数可以得到一个哈希值n,n视作小文件的编号,将哈希值相等和近似数据存入一个小文件中;另一个文件同理。

最后只需要每次载入两个编号相同的小文件就可以得出部分答案。

由于小文件不是平均分的,可能存在某个小文件非常大不能载入内存的情况,此时可能需要对小文件再进行拆解。

每个小文件中应该有一个set对象来去重,避免小文件中的大量元素哈希冲突无法再切分的情况。

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

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

相关文章

RPC基础知识回顾

RPC基础知识回顾 1、先认识一下大家熟悉的HTTP 大家都了解HTTP吧。相信项目中也用过一些。 比如: JDK自带的老旧的HttpURLConnection,封装写的很累,java8之前基于HTTP1.0。在java9开始支持Http2.0Spring的其中RestTemplate都是基于HTTP/1.1的请求。最新的还有Sp…

SpringCloudEureka理论与入门

文章目录 1. 前置工作1.1 搭建 user-server1.1.1 pom1.1.2 po,mapper,controller1.1.3 yml1.1.4 启动类1.1.5 启动并访问 1.2 搭建 order-server1.2.1 pom1.2.2 po mapper controller1.2.3 yml1.2.4 启动类1.2.5 启动并访问 1.3 两个服务通信 2. Eureka2…

当HR问你:“对于你申请的这个岗位,你觉得你欠缺什么?”【文章底部添加进大学生就业交流群】

当HR问这个问题时,你可以展示自我认识和诚实,同时展现你对自己的积极态度和学习能力。以下是一个可能的回答示例: "对于我申请的这个岗位,我认为我可能欠缺一些行业特定的经验。虽然我在相关领域有一定的工作经验和技能&…

H5 网课宣传引导跳转微信单页源码

源码名称:网课宣传引导跳转微信单页 源码介绍:一款网课销售宣传单页源码,源码支持一键复制微信号并跳转打开微信功能。 需求环境:H5 提示:源码仅支持复制微信和跳转打开微信,客户需自行贴贴搜索添加好友…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的石头剪刀布手势识别系统详解(深度学习模型+UI界面代码+训练数据集)

摘要:本篇博客深入探讨了使用深度学习技术开发石头剪刀布手势识别系统的过程,并分享了完整代码。该系统利用先进的YOLOv8、YOLOv7、YOLOv6、YOLOv5算法,并对这几个版本进行性能对比,如mAP、F1 Score等关键指标。文章详细阐述了YOL…

【漏洞复现】网康科技 NS-ASG 应用安全网关 SQL注入漏洞(CVE-2024-2330)

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

碳实践 | 基于“界、源、算、质、查”五步法,实现企业组织碳核算

碳排放核算是夯实碳排放统计的基础,提高碳排放数据质量的关键,同时,将推动能耗“双控”向碳排放“双控”转变。总体来看,碳核算分为区域层面、组织层面和产品层面的碳核算,这三个层面的意义和计算方法完全不同。本文将…

SingleSpa微前端基本使用以及原理

先说说singleSpa的缺点 不够灵活 不能动态加载css文件css不隔离没有js沙箱的机制 ( 没有全局对象 每次切换的应用 都是同一个window ) 但是刚刚接触微前端 可以了解一下微前端的基础使用 qiankun微前端框架已经很成熟 也是基于singleSpa来实现的 点击跳转qiankun的基础使用 大…

6.同步异步、正则表达式

JS执行机制 js的特点:单线程,同一时间只能做一件事 可以通过多核CPU解决这个问题,允许js脚本创建多个线程,于是js出现了同步和异步 同步 程序执行的时候按照顺序依次执行 异步 程序执行的时候,会跳过某个步骤继续…

装饰者模式-C#实现

可以使用装饰者模式来动态地给一个对象添加额外的职责。 装饰者模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰者模式相比生成子类可以更灵活地增加功能。 在装饰者模式中各个角色有: 抽象构件(Phone)角色&#…

【NR 定位】3GPP NR Positioning 5G定位标准解读(十三)-DL-AoD定位

前言 3GPP NR Positioning 5G定位标准:3GPP TS 38.305 V18 3GPP 标准网址:Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读(一)-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读(…

STM32点亮LED灯与蜂鸣器发声

STM32之GPIO GPIO在输出模式时可以控制端口输出高低电平,用以驱动Led蜂鸣器等外设,以及模拟通信协议输出时序等。 输入模式时可以读取端口的高低电平或电压,用于读取按键输入,外接模块电平信号输入,ADC电压采集灯 GP…

EM算法详解

EM(Expectation-Maximum)算法也称期望最大化算法,曾入选“数据挖掘十大算法”中,可见EM算法在机器学习、数据挖掘中的影响力。EM算法是最常见的隐变量估计方法,在机器学习中有极为广泛的用途,例如常被用来学习高斯混合模型(Gaussian mixture model,简称GMM)的参数;隐…

3D产品配置器帮助您更快进入市场的 5 种方式

如果您的电子商务商店可以从产品配置器的使用中受益(而且大多数都可以),您还应该知道,此功能还可以帮助您的公司采用更具创新性的产品开发姿态。 更简单地说:它可以帮助您更快地构建更好的产品。 继续阅读以了解3D 产…

FPGA Vivado环境下实现D触发器

题目要求:使用Verilog HDL语言设计一个D触发器。请提交程序源代码和Word格式的作业文档,作业文档中应给出程序源代码及RTL分析原理图。 D触发器的工作原理: 初始状态下,触发器处于复位状态,输出为复位信号的稳定状态…

springboot266基于Web的农产品直卖平台的设计与实现

农产品直卖平台的设计与实现 摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了&#x…

2024 前端javaScript+ES6

JavaScript 基础 1、基本数据类型: 1.1 基本数据类型: Number(数值):表示数字,包括整数和浮点数。例如:5、3.14。 String(字符串):表示文本数据&#xff…

Docker容器化技术(互联机制实现便捷互访)

容器的互联是一种让多个容器中的应用进行快速交互的方式。它会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。 1.自定义容器命名 连接系统依据容器的名称来执行。因此,首先需要自定义一…

【数据挖掘】实验2:R入门2

实验2&#xff1a;R入门2 一&#xff1a;实验目的与要求 1&#xff1a;熟悉和掌握R数据类型。 2&#xff1a;熟悉和掌握R语言的数据读写。 二&#xff1a;实验内容 1&#xff1a;R数据类型 【基本赋值】 Eg.1代码&#xff1a; x <- 8 x Eg.2代码&#xff1a; a city …

谷歌破解 OpenAI 模型关键信息;微软更改默认浏览器,不再主推 Edge 丨 RTE 开发者日报 Vol.163

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE &#xff08;Real Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…