【C++位图】1. 快速查找某个数据是否在一个集合中 2. 排序(全部插入,遍历一遍) 3. 求两个集合的交集、并集等

news2025/8/11 14:09:46

目录

问题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。

2.简单实现一个位图 

 3.如何利用位图求两个集合的交集、并集


问题:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。

  1. 40亿个不重复的无符号整数需要多少空间:大概16G;那么使用哈希或者是红黑树内存不够
  2. 可以直接遍历,时间复杂度O(N);
  3. 排序时间复杂O(logN),二分查找时间复杂度O(longN);

Q:效率都不太好,有没有更好办法呢?

A:让一个比特位来标记一个元素存在或者不存在

40个整形放在位图里面只需要0.5G,而且查找的时间复杂度:O(1),非常棒;

2.简单实现一个位图 

位图的概念:所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。

  1. 初始化+1是为了:除了之后有余数,需要多开一个单位来存放,
  2. 大小端对于位图没有影响

 

template<size_t N>
	class bitset
	{
	public:
		bitset()
		{
			_bits.resize(N / 8 + 1, 0);
		}

		void set(size_t x)//把状态改为存在
		{
			//看在哪一个字节里面
			size_t i = x / 8;
			//第几位
			size_t j = x % 8;
			//大小端没有区别,找也是按这种方法找
			_bits[i] |= (1 << j);
		}

		void reset(size_t x)//把状态改为不存在
		{
			size_t i = x / 8;
			size_t j = x % 8;

			_bits[i] &= (~(1 << j));
		}

		bool test(size_t x)//查询是否存在
		{
			size_t i = x / 8;
			size_t j = x % 8;

			return _bits[i] & (1 << j);
		}

	private:
		std::vector<char> _bits;
	};

 3.如何利用位图求两个集合的交集、并集

1.并集

  • 把两个集合的元素都插入在一个位图里面,然后遍历一遍判断在不在即可;

 

 2.交集

  • 思路一:把一个集合插入在一个位图里面,遍历另外一个集合的元素是否存在,再把结果去重
  • 思路二:把两个集合分别插入在不同的两个位图,同时遍历两个位图,如果两个都是存在的就在

 

总结一下:位图的可以做些什么?

A:1. 快速查找某个数据是否在一个集合中 2. 排序(全部插入,遍历一遍) 3. 求两个集合的交集、并集等

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

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

相关文章

Golang入门笔记(14)—— 错误处理

来一个除以0的异常&#xff0c;代码如下&#xff1a; package mainimport "fmt"func main() {fmt.Println("before")divNum()fmt.Println("after") }func divNum() {num1 : 10num2 : 0result : num1 / num2fmt.Println(result) } console 异常&…

GitHub 昙花一现:《Spring Boot 趣味实战》神作开源几分钟被下架

又来给大家分享好书了&#xff1a;刘水镜老师的 Spring Boot 趣味实战&#xff0c;网上依旧是没有开源版本&#xff01;文末送上 刘水镜是谁&#xff1f; 十余年持续技术文章输出&#xff0c;CSDN 博客专家。2020 年《 Spring Boot 趣味私房课》专栏上线&#xff0c;凭借风趣…

创新案例|巴黎欧莱雅如何以内容+货架双轮驱动全渠道兴趣电商增长飞轮

对巴黎欧莱雅而言&#xff0c;兴趣电商作为内容场景为核心的平台&#xff0c;但货架场景已成为驱动增长的飞轮。巴黎欧莱雅团队注意到&#xff0c;抖音用户不只是被动地接受信息流推送&#xff0c;而是越来越倾向于主动搜索。消费者行为的重大变革意味着消费者不再满足于货找人…

【MFC】初识MFC(8)

MFC简介 微软提供的一个类库&#xff08;Class Libraries&#xff09;&#xff0c;封装了Windows的API&#xff0c;并且包含一个应用程序框架。 1、MFC是对前面窗口编程所用到的API进行封装&#xff0c;在Windows C基础上引入了C面向对象的思想&#xff0c;简单而言就是把API…

【论文翻译】2.5PC:一个更快的非阻塞原子提交协议

2.5-PC: A Faster and Non-Blocking Atomic Commit Protocol 目录1 介绍2 相关工作3 原子承诺和 3PC 概述4 为什么 3PC 是非阻塞的&#xff1f;5 2.5 PC6 2.5 PC 的非正式证明7 确认信息8 2.5 PC 机器证明参考摘要&#xff1a;我们提出 2.5PC&#xff0c;一种非阻塞原子提交协…

DNS与网站访问流程

1&#xff1a;dns与网址url简介 DNS是域名系统(DomainNameSystem)的缩写&#xff0c;域名系统是一中庞大而复杂的系统&#xff0c;但我们这里讲解重心并不是这个系统&#xff0c;而是指本地电脑dns是什么 讲到dns&#xff0c;我们就不得不讲讲网址和域名&#xff0c;我们经常会…

linux杀死进程的五种方法(kill)

添加链接描述 相关博主的链接&#xff1b; 方法一&#xff1a;通过kill 进程id的方式可以实现 首先需要知道进程id, 例如,想要杀死firefox的进程,通过 ps -ef|grep firefox,可以查到firefox的进程id: 然后通过 kill 3781 就可以关闭进程了. 补充: kill -9 来强制终止退出, 例…

16.一篇文章学会django模型的使用

1.django模型简单示例 1.1 创建django项目 创建完项目&#xff0c;还需要创建django子项目 django-admin startproject model_study cd .\model_study\ python manage.py startapp model_app1.2配置应用 将模型对应的应用程序&#xff08;刚刚创建的子应用&#xff09;添加…

CentOS 7 Jenkins配置及SpringBoot项目自动部署

1.下载Jenkins 下载地址:War Jenkins Packages 运行Jenkins之前确保系统已经安装好JDK&#xff0c;因为我安装的是JDK1.8,所以选择2.346.1 这个版本 2.启动jenkins 将下载好的jenkins.war上传到服务器上,我的目录是/home/jenkins 启动命令 java -jar jenkins.war --httpPo…

万字详文:TCP 拥塞控制详解

本文主要介绍 TCP 拥塞控制算法&#xff0c;内容多来自网上各个大佬的博客及《TCP/IP 详解》一书&#xff0c;在此基础上进行梳理总结&#xff0c;与大家分享。因水平有限&#xff0c;内容多有不足之处&#xff0c; 敬请谅解。一、TCP 首部格式 在了解 TCP 的拥塞控制之前&…

多向思考者--高敏感人群的内心世界

工作以后很少看心理学的书&#xff0c;因为心理学书给我的印象是&#xff1a;国外翻译的很啰嗦&#xff0c;国内的太鸡汤&#xff0c;看的时候能有感触&#xff0c;看完以后就都忘记了。阅读心理学的书籍&#xff0c;更多的是跟着书中的内容和自己对话。看完《多向思考者》这本…

SpringMVC使用(二)

1. 统一异常处理 SpringMVC提供了统一处理Controller层抛出的异常的方法 1.1 统一异常处理案例 RestController的统一异常处理 package com.lan.controller;import com.lan.exception.BusinessException; import com.lan.exception.SystemException; import org.springfram…

DolphinDB Kafka 插件介绍

1. DolphinDB Kafka 插件介绍 DolphinDB Kafka 插件支持把 DolphinDB 中生产的数据推送到 Kafka&#xff0c;也支持从 Kafka 订阅数据&#xff0c;并在 DolphinDB 中消费。用户可以在 DolphinDB 中实例化 Producer 对象&#xff0c;把 DolphinDB 中的数据同步到 Kafka 中指定的…

LeetCode | 218. 天际线问题

城市的天际线是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度&#xff0c;请返回由这些建筑物形成的天际线 。 每个建筑物的几何信息由数组 buildings 表示&#xff0c;其中三元组 buildings[i] [lefti, righti, heighti] 表示&#xff1a;…

Egg如何实现文件上传

文件上传是开发中不可避免的一项。那么在没有单独的资源服务器的时候&#xff0c;上传的文件可能要放在我们的项目文件夹服务器上&#xff0c;我们如何实现文件上传呢&#xff1f; 首先不用想&#xff0c;我们需要一个测试页面。html用来上传文件。如下&#xff1a; <!DOCT…

D. Minimal Height Tree(如何BFS遍历序列使树的高度最小)

Problem - 1437D - Codeforces Monocarp有一棵由n个顶点组成的树&#xff0c;它的根在顶点1。他决定研究BFS&#xff08;宽度优先搜索&#xff09;&#xff0c;所以他在他的树上运行BFS&#xff0c;从根开始。BFS可以用下面的伪代码来描述。 a [] # 顶点被处理的顺序 q Queu…

mdr1基因寡核苷酸/酸敏感靶多肽/聚乙二醇埃博霉素B偶联阿霉素的相关制备

小编这里整理了mdr1基因寡核苷酸/酸敏感靶多肽/聚乙二醇埃博霉素B偶联阿霉素的相关内容&#xff0c;一起来看&#xff01; 聚乙二醇埃博霉素B偶联阿霉素相关研究&#xff1a; 阿霉素与酰肼聚乙二醇羧基在磷酸的作用下反应制得阿霉素聚乙二醇羧基中间体,其中阿霉素与磷酸的摩尔比…

Android App手势冲突处理中上下左右滑动的处理以及侧滑边缘菜单的讲解及实战(附源码 可直接使用)

运行有问题或需要源码请 点赞关注收藏后评论区留言~~~ 一、上下滚动与左右滑动的冲突处理 Android控件繁多&#xff0c;允许滚动或滑动操作的视图也不少&#xff0c;如果开发者要自己接管手势处理&#xff0c;那么这个页面的滑动就存在冲突的情况&#xff0c;如果系统响应了A视…

贴花、射线、动画通知——足迹01

案例实现效果&#xff1a; 人物跑步留下脚印&#xff08;其他运动留下脚印也是同理&#xff09;。 重点&#xff1a; 贴花的创建、射线、动画通知。射线碰撞决定贴花生成位置&#xff0c;动画通知决定贴花生成时间。 一、贴花 1、贴花纹理图 在网络上找素材&#xff08…

JavaSE之动态代理

目录动态代理动态代理的好处Proxy重写invoke方法实例最后动态代理 动态代理需要确定要代理的对象&#xff0c;所以需要先new一个要代理的对象 动态代理的好处 可以在不改变方法源码的情况下&#xff0c;实现对方法功能的增强。 简化了代码。 提高了软件系统的可扩展性。 P…