位图、布隆过滤器

普通的哈希表增删查改的效率的确达到了令人满意的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.hqwc.cn/news/535531.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理论学习 BatchNorm2d

import torch import torch.nn as nn# With Learnable Parameters m nn.BatchNorm2d(100) # Without Learnable Parameters m nn.BatchNorm2d(100, affineFalse) input torch.randn(20, 100, 35, 45) output m(input)print(output) print(output.shape)这段代码展示了如何使…

深度学习--离线数据增强

最近做项目遇见数据集背景非常单一,为了增加模型的返回能里,只能自己做一些数据增强来增加背景的多样性。代码如下: import numpy as np import cv2def create_mask(box, height, width):"""创建一个全零的掩码图像&#xff…

第14届环境与农业工程国际会议(ICEAE 2024)即将召开!

2024年第14届环境与农业工程国际会议(ICEAE 2024)将于6月7日至9日在泰国曼谷召开。本次会议旨在促进环境与农业工程的研究和开发活动,共同探讨领域内最新以及具有根本性的进展突破。热忱欢迎从事相关领域研究的专家,学者和专业技术…

深入解析C++树形关联式容器:map、set及其衍生容器的使用与原理

文章目录 一、引言二、关联式容器的中的 paira.pair 的创建及使用b.pair 间的比较 三、 map 与 set 详解1. map 的基本操作2. set 的基本操作3.关联式容器的迭代器 四、 multimap 与 multiset 的特性五、关联式容器的使用技巧与注意事项1. 键值类型的选择与设计2. 自定义比较函…

微机综合保护测控装置在某电厂10.5kV厂用电系统改造中的应用

彭姝麟 Acrelpsl 0 引言 某电厂8号机组10.5kV厂用电系统分为两段,即V、VI段。正常工况下V、VI段分段运行,即联络断路器060处于断开位。V段由8GB经051断路器供电,同时还可由IV段047断路器供电(紧急备用电源)&#xff0…

CASA模型原理深度解析:揭示生态系统净初级生产力的奥秘

植被,作为陆地生态系统的重要基石,对维护生态环境功能具有不可替代的作用。其中,植被净初级生产力(NPP)是衡量植被生态系统健康与功能的关键指标。它反映了单位面积上绿色植被通过光合作用生产的有机质总量在扣除自养呼…

面试总结-刷题心得

结论先行,刷题策略:《代码随想录》的回溯、贪心、动态规划、二分、双指针 《算法图解》的动态规划 《剑指offer》全书 1 问题 我从校招找工作开始就有个痛点,动态规划,贪心算法,或者没有刷到过的回溯,都不…

走进AI新时代:织信低代码的实践与启示

最近 AIGC 很火,在各个领域都玩出了一些新花样。 比如在“低代码”领域,可以通过 AI 自动生成一个网站门户。 但这会带来开发效率的提升吗?如果 AI 能快速开发网站、APP等业务应用,那么 AI 生成能否完全取代低代码的可视化配置&a…

挑战杯 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习多目标跟踪 …

tigramite教程(六)使用TIGRAMITE 进行因果发现

使用TIGRAMITE 进行因果发现 基本用法简单玩玩万年不变的第一步:画出来调查数据依赖性和滞后函数PCMCI 因果发现错误发现率控制进一步相关的方法学教程 画图整合专家对链条的假设基准测试和验证因果效应估计数据集挑战滑动窗口分析 TIGRAMITE 是一个时间序列数据分析的python包…

目标检测——YOLOv2算法解读

论文:YOLO9000: Better, Faster, Stronger 作者:Joseph Redmon, Ali Farhadi 链接:https://arxiv.org/pdf/1612.08242v1.pdf 代码:http://pjreddie.com/yolo9000/ YOLO系列其他文章: YOLOv1通俗易懂版解读SSD算法解读…

视觉图像处理和FPGA实现第三次作业--实现一个加法器模块

一、adder模块 module adder(ina, inb, outa); input [5:0] ina ; input [5:0] inb ; output [6:0] outa ;assign outa ina inb; endmodule二、add模块 module add(a,b,c,d,e); input [5:0] a ; input [5:0] b ; input [5:…