位图及有关海量数据处理

news2024/12/23 9:23:01

bitset
1.给40亿个不重复的无符号整数,没排过序,给一个无符号整数,如何快速判断一个数是否在这40亿个中
①.如果用排序加二分查找,40亿个数需要16g内存,内存开不出这么大连续空间
②.每个值映射一个比特位,需要开多少个比特位?并非40亿个,而是2^32个(42亿9千万),开空间开的不是数据个数,而是数据范围
0.5g
采用位图解决
数据是否在给定的整型数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,如果为0,代表不存在
模拟实现位图

template<size_t N>
class bitset{
	public:
	bitset(){
		bits.resize(N/32+1,0);
	}
	void set(size_t x){
		size_t i=x/32;
		size_t j=x%32;
		bits[i]|=(1<<j);
	}
	void reset(size_t x){
		size_t i=x/32;
		size_t j=x%32;
		bits[i]&=~(1<<j);
	}
	bool test(size_t x){
		size_t i=x/32;
		size_t j=x%32;
		return bits[i]&(1<<j);
	}
	private:
	vector<int>bits;
};

2.给定100亿个整数,设计算法找到只出现一次的整数
我们分三种情况讨论
出现0次 00
出现1次 0 1
出现两次及以上 1 0
我们考虑使用两个位图

template<size_t N>
class twobitset{
	public:
		bool set(size_t x){
			if(bs1.test(x)==false&&bs2.test(x)==false){
				bs1.set(x);
			}
			else if(bs1.test(x)==false&&bs2.test(y)==true){
				bs1.set(x);
				bs2.reset(x);
			}
		}
	private:
	  bitset<N>bs1;
	  bitset<N>bs2;
};

3.设计算法超出出现次数不超过2次的所有整数
出现0次 0 0
出现1次 0 1
出现2次 1 0
出现3次及以上1 1

template<size_t N>
class twobitset{
	public:
		bool set(size_t x){
			if(bs1.test(x)==false&&bs2.test(x)==false){
				bs1.set(x);
			}
			else if(bs1.test(x)==false&&bs2.test(x)==true){
				bs1.set(x);
				bs2.reset(x);
			}
			else if(bs1.test(x)==true&&bs2.test(x)==false){
			   bs2.set(x);
			   }
		}
	private:
	  bitset<N>bs1;
	  bitset<N>bs2;
};

4.给两个文件,分别有100亿个整数,我们只有1G内存,如何找到两个文件交集
各自映射到一个位图,如果一个值在两个位图都存在,则是交集

template <size_t N> class bitset;

operator[]
在这里插入图片描述

#include<bitset>
#include<iostream>
using namespace std;
int main(){
	bitset<4>foo; //0000
	foo[1]=1;     //将第一位设为1  0010 
	foo[2]=foo[1]; //将第二位设为1 0110
	cout<<foo.test(2)<<endl;//因为已经将2这一位设为1,所以test(2)为true 
	cout<<foo[3]<<endl;//3这一位没被设置,故为0 
	cout<<foo<<endl; 
}

在这里插入图片描述
count(返回已经被set的个数)
在这里插入图片描述any
在这里插入图片描述
none
在这里插入图片描述
all
在这里插入图片描述
flip
在这里插入图片描述

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

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

相关文章

【Linux】进程间通信——system V共享内存、共享内存的概念、共享内存函数、system V消息队列、信号量

文章目录 进程间通信1.system V共享内存1.1共享内存原理1.2共享内存数据结构1.3共享内存函数 2.system V消息队列2.1消息队列原理 3.system V信号量3.1信号量原理3.2进程互斥 4.共享内存的使用示例 进程间通信 1.system V共享内存 1.1共享内存原理 共享内存区是最快的IPC形式…

图形编辑器开发:缩放和旋转控制点

大家好&#xff0c;我是前端西瓜哥。好久没写图形编辑器开发的文章了。 今天来讲讲控制点。它是图形编辑器的不可缺少的基础功能。 控制点是吸附在图形上的一些小矩形和圆形点击区域&#xff0c;在控制点上拖拽鼠标&#xff0c;能够实时对被选中进行属性的更新。 比如使用旋…

python_接口自动化测试框架

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

基于springBoot+Vue的停车管理系统

开发环境 IDEA JDK1.8 MySQL8.0Node 系统简介 本项目为前后端分离项目&#xff0c;前端使用vue&#xff0c;后端使用SpringBoot开发&#xff0c;主要的功能有用户管理&#xff0c;停车场管理&#xff0c;充值收费&#xff0c;用户可以注册登录系统&#xff0c;自主充值和预…

论文阅读——Prophet(cvpr2023)

一、Framework 这个模型分为两阶段&#xff1a;一是答案启发生成阶段&#xff08;answer heuristics generation stage&#xff09;&#xff0c;即在一个基于知识的VQA数据集上训练一个普通的VQA模型&#xff0c;产生两种类型的答案启发&#xff0c;答案候选列表和答案例子&am…

python安装redis库

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

关于电路的一些杂项内容补充总结

过载和过流 什么是过载&#xff1f;什么是过流&#xff1f;专业电力知识快来与网上国网交流~ - 知乎 磁珠 最全讲解磁珠_磁珠的用法_大话硬件的博客-CSDN博客 重点 磁珠主要是用来抑制信号线、电源线上的高频的噪声和尖峰干扰。 谐振 什么是谐振&#xff1f;什么是LC谐振电路&a…

2024北京理工大学计算机考研分析

24计算机考研|上岸指南 北京理工大学 计算机学院始建于1958年&#xff0c;是全国最早设立计算机专业的高校之一。2018年4月&#xff0c;计算机学院、软件学院、网络科学与技术研究院合并成立新的计算机学院。学院累计为国家培养各类人才15000余名。计算机科学学科ESI排名进入全…

LeetCode.203移除链表元素(原链表操作、虚拟头结点)

LeetCode.203移除链表元素 1.问题描述2.解题思路3.代码 1.问题描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val …

WGCLOUD 中文繁体版本 下载

wgcloud 繁体版下载 下載繁體版安裝包 - WGCLOUD

AJAX技术-04-- 跨域说明

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1 同源策略同源策略介绍规定要求 请求协议://域名:端口号 关于同源策略练习关于同源策略总结 2.JSONPJSONP原理说明关于JSONP优化 3.CORS介绍介绍不允许跨域说明跨域…

基于OGG实现Oracle实时同步MySQL

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

02_MySQL体系结构及数据文件介绍

#课程目标 了解MySQL的体系结构了解MySQL常见的日志文件及作用了解事务的控制语句&#xff0c;提交和回滚能够查看当前数据库的版本和用户了解MySQL数据库如何存放数据能在使用SQL语句创建、删除数据库 #一、MySQL的体系结构 ##1、客户端(连接者) MySQL的客户端可以是某个客户…

【键盘变成了快捷键,怎么办?】

**最便捷的操作&#xff1a;**拔掉键盘有线插头&#xff0c;将键盘驱动进行卸载&#xff0c;重新插上键盘即可 键盘驱动如何卸载: 以win10为例&#xff0c;点击开始菜单栏选择设置 选择左上角系统 选择系统中&#xff0c;点击最下方关于&#xff0c;点击右侧的设备管理器 选…

用户与组管理:如何在服务器系统中管理用户和权限

你是否想过&#xff0c;当你登录到一个服务器系统时&#xff0c;你是如何被识别和授权的&#xff1f;你是否知道&#xff0c;你可以通过创建和管理用户和组来简化和优化你的系统管理工作&#xff1f;你是否想了解一些常用的用户和组管理命令和技巧&#xff1f;如果你的答案是肯…

解决Linux Visual Studio Code显示字体有问题/Liunx下Visual Studio Code更换字体

01、具体问题 在Linux下VsCode控制台与代码区显示异常&#xff0c;如下图所示&#xff1a; 代码显示 终端显示 02、解决方案 下载字体 [rootlocalhost mhzzj]$ cd /usr/share/fonts # 进入目录 [rootlocalhost fonts]$ sudo yum install git # 下载字体 [rootlocalhost fo…

.netcore 获取appsettings

我的开发环境是abpvnext net6.0 。 因为业务需要&#xff0c;从原来老项目net4.5工程里复制了一个报表导出的业务类到net6项目里面&#xff0c;但是他的获取appsettings的代码其实不用想都知道会报错。因为原来framwork时代获取appsettings的方法常见的是 System.Configura…

基础C语言编程题

int i,j; int a[3][3]; for(i0;i<3;i){for(j0;j<3;j){scanf("%d",&a[i][j]);a[i][j]a[i][j]*2;}} 6.功能&#xff1a;把20个随机数存入一个数组&#xff0c;然后输出该数组中的最大值。 int main(){int p[20];int i,max0;for(i0;i<20;i){scanf("…

Promise的总结

Promise的总结 &#xff08;1&#xff09;什么是同步&#xff0c;异步&#xff1f; 同步表示需要前一个任务完成之后&#xff0c;才会执行下一个任务&#xff0c;简而言之&#xff0c;就是上一行代码执行返回结果后&#xff0c;才会执行下一行代码&#xff08;好理解&#xf…