C++ 位图

news2024/9/20 20:52:19

1. 位图概念

1. 面试题 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这40亿个数中。【腾讯】

1. 利用map,set等容器存储遍历   2. 排序(O(NlogN)),利用二分查找: \log_{2}N

但是其有40亿个数据,而且是整型,最后估算下来,光是数据就占用了十六个G,何况还要用红黑树,哈希表这样的结构存储下来,这是不现实的。

3. 位图解决

数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以使用一个二进制比特位来代表数据是否存在的信息,如果二进制比特位为1,代表存在,为0 代表不存在。比如:

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

2.位图的使用

在STL库中,已经为我们提供了位图bitset
参数为一个非类型模板参数N,其代表位图中要开多少个比特位。
函数声明功能
bool operator[ ] (size_t pos) const;返回对应位置的引用
size_t count() const noexcept;
计算所有比特位中1的个数
constexpr size_t size() noexcept;
返回比特位的个数
bool test (size_t pos) const;
检测某一个位的状态,是1返回true,是0返回false
bitset& set() noexcept;
把某一个位的值改为1
bitset& reset() noexcept;
把某一个位的值改为0

3.位图的实现

#include<iostream>
#include<bitset>
#include<vector>
using namespace std;
namespace lbk
{
	template<size_t N>
	class bitset
	{
	public:
		bitset()
		{
			_bit.resize(N / 32 + 1,0);
			_count = 0;
		}
		size_t size()
		{
			return N;
		}
		size_t count()
		{
			int bitCnttable[256] = {
				0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4, 1, 2, 2, 3, 2, 3, 3, 4, 2,
				3, 3, 4, 3, 4, 4, 5, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3,
				3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3,
				4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4,
				3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5,
				6, 6, 7, 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5, 2, 3, 3, 4, 3, 4,
				4, 5, 3, 4, 4, 5, 4, 5, 5, 6, 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5,
				6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 2, 3, 3, 4, 3, 4, 4, 5,
				3, 4, 4, 5, 4, 5, 5, 6, 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 3,
				4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7, 4, 5, 5, 6, 5, 6, 6, 7, 5, 6,
				6, 7, 6, 7, 7, 8 };
			for (auto e : _bit)
			{
				for (int i = 0; i < 4; i++)
				{
					unsigned char c = e;
					_count += bitCnttable[c];
					e >>= 8;
				}
			}
			return _count;
		}
		bitset& set(size_t x)
		{
			int i = x / 32;
			int j = x % 32;
			_bit[i] |= (1 << j);
			return *this;
		}
		bitset& reset(size_t x)
		{
			int i = x / 32;
			int j = x % 32;
			_bit[i] &= (~(1 << j));
			return *this;
		}
		bool test(size_t x)
		{
			int i = x / 32;
			int j = x % 32;
			return _bit[i] & (1 << j);
		}
	private:
		vector<int> _bit;
		size_t _count;
	};
}

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

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

相关文章

骨传导耳机哪个牌子值得入手?精选五款2024热销骨传导耳机推荐!

随着健康意识的不断提升&#xff0c;运动健身已成为大众生活的热门选择&#xff0c;而人们对运动时音乐享受的需求也随之达到了新的高度。然而&#xff0c;许多运动达人在享受音乐律动的同时&#xff0c;却常被传统耳机易脱落、维护不便等问题所困扰&#xff0c;这无疑给他们的…

智能计算模拟:DFT+MD+ML深度融合及科研实践应用

第一性原理、分子动力学与机器学习三者的交汇融合已在相关研究领域展现强劲的研究热潮。借助第一性原理计算揭示材料内在的量子特性&#xff0c;并结合分子动力学模拟探究材料在实际环境下的动态行为&#xff1b;运用机器学习算法与上述方法结合&#xff0c;开发高性能预测模型…

物理笔记-八年级上册

0.梦开始的地方 物理研究什么&#xff1f; 电学&#xff0c;力学&#xff0c;声学&#xff0c;光学&#xff0c;热学。 1.1.1长度的单位 国际基本单位制 单位转换 魔法记忆&#xff1a;千米-米-毫米-微米-纳米&#xff08;进率都是1000&#xff09; 单位换算计算方法 用科学…

科东软件获颁2024英特尔网络与边缘计算行业大会“技术创新奖”

AI浪潮席卷全球&#xff0c;它正推动着制造业向更加智能化、数字化的方向发展。作为这场技术革命的见证者和参与者&#xff0c;科东软件携手众多行业伙伴&#xff0c;与英特尔共同探讨边缘AI的未来发展趋势。 近日&#xff0c;第十七届英特尔网络与边缘计算行业大会在天津隆重…

28-《蔷薇》

蔷薇 蔷薇&#xff08;学名&#xff1a;Rosa sp.&#xff09;&#xff1a;是蔷薇属部分植物的通称&#xff0c;主要指蔓藤蔷薇的变种及园艺品种。大多是一类藤状爬篱笆的小花&#xff0c;是原产于中国的落叶灌木&#xff0c;变异性强。茎刺较大且一般有钩&#xff0c;每节大致有…

分压电阻方式的ADC电压校准

无人机有个流程是电池电压校准。具体做法是&#xff1a;让你用万用表测量一下电池两端的电压&#xff0c;然后输入到文本框中&#xff0c;电机计算能重新计算出电压分压器的值&#xff0c;从而获得电池电压值。 这种方法实现的原理是这样的&#xff1a; 电阻分压检测电压原理&…

PRD: Peer Rank and Discussion Improve Large Language Model based Evaluations

文章目录 题目摘要相关工作方法实验与分析指标进一步分析结论 题目 PRD&#xff1a;同行排名和讨论改善基于大型语言模型的评估 论文地址&#xff1a;https://arxiv.org/abs/2307.02762 项目地址&#xff1a;https://openreview.net/forum?idYVD1QqWRaj 摘要 如今&#xff0c…

ChatGPT:ELMo,Transformer,Multitask

1&#xff0c;ELMo&#xff1a;Embedding新纪元 1.1&#xff0c;word2vec的局限性 word2vec&#xff1a;word2vec模型是一种可以用于各种任务的单词级别的表示学习。以单词stick为例子&#xff0c;它有非常多的意思&#xff1a; v. 粘贴&#xff1b;粘住&#xff1b;被接受&am…

webshell应急响应

前言 webshell在应急中占了很大的比例&#xff0c;本篇文章就来看看当遇到webshell时如何进行应急响应。 Webshell通常指以JSP、ASP、PHP等网页脚本文件形式存在的一种服务器可执行文件&#xff0c;一般带有文件操作、命令执行功能&#xff0c;是一种网页后门。攻击者在入侵一…

Email调用接口在高并发下的性能优化策略?

Email调用接口的安全保障措施&#xff1f;如何优化邮件调用接口&#xff1f; 无论是用户注册、密码重置还是促销邮件的发送&#xff0c;Email调用接口都是不可或缺的一部分。当面对高并发请求时&#xff0c;往往会成为瓶颈。AokSend将探讨几种在高并发环境下优化Email调用接口…

超级详细,如何手动安装python第三方库?

文章目录 1&#xff0c;python第三方库安装包有3种类型2&#xff0c;python第三方库安装包whl文件如何安装&#xff1f;3&#xff0c;python第三方库安装包zip和tar.gz文件如何安装&#xff1f;4&#xff0c; python第三方库安装包exe文件如何安装&#xff1f; 手动安装第三方库…

Unity材质球自动遍历所需贴图

Unity材质球自动遍历所需贴图 文章目录 Unity材质球自动遍历所需贴图一、原理二、用法1.代码&#xff1a;2.使用方法 一、原理 例如一个材质球名为&#xff1a;Decal_Text_Cranes_01_Mat &#xff0c; 然后从全局遍历出&#xff1a;Decal_Text_Cranes_01_Albedo赋值给材质球的…

校园选课助手【1】

项目背景 随着高校招生规模的不断扩大&#xff0c;学生选课需求日益增长。为提高选课效率&#xff0c;降低学生选课压力&#xff0c;本项目旨在开发一款校园选课助手软件。 项目目标:开发一款具有以下特点的校园选课助手软件&#xff1a; 易用性&#xff1a;界面简洁&#xff…

组蛋白乳酸化和RNA甲基化如何联动?请大数据把这个思路推给科研人

在细胞生物学中&#xff0c;基因表达调控是决定细胞功能与命运的核心过程之一。组蛋白作为修饰性蛋白&#xff0c;在调控基因转录中起着至关重要的作用。近年来&#xff0c;科学家们发现&#xff0c;组蛋白的多种化学修饰&#xff08;如甲基化、乙酰化、磷酸化等&#xff09;影…

Java零基础之多线程篇:多线程最佳实践

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

diff算法的流程

diff算法&#xff1f; 组件并不是真是的DOM节点&#xff0c;而是存在与内存中的一种数据结构&#xff0c;叫做虚拟DOM&#xff0c;只有当它真正插入文档中的时候才会真的变成DOM。 React的设计时所有的DOM变动都先在虚拟的DOM上发生&#xff0c;然后再将实际变动的部分反映在…

来聊一个有趣的限流器RateLimiter

写在文章开头 这一篇我们来聊一个比较使用的限流工具RateLimiter,它是Google开源的Java类库guava中的一个工具类,本文将从使用和源码分析的角度介绍RateLimiter的设计与实现,希望对你有帮助。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客…

【MATLAB源码】机器视觉与图像识别技术示例报告2---铁道口夜间列车通过时速度视觉测量

系列文章目录在最后面&#xff0c;各位同仁感兴趣可以看看&#xff01; 速度视觉测量 摘要对铁路夜晚环境情况分析视觉测量的流程步骤代码问题最后&#xff1a;总结系列文章目录 摘要 随着科技技术的不断发展&#xff0c;由于铁道口夜间交通事故频发&#xff0c;传统的雷达和…

铁路购票系统中的数据库技术《二》

铁路购票系统中的数据库技术《二》 缓存技术&#xff1a;减轻数据库压力数据一致性&#xff1a;确保交易公平分布式事务&#xff1a;跨系统的数据一致性读写分离&#xff1a;优化查询性能数据库备份与恢复&#xff1a;确保数据安全安全性&#xff1a;保护sensitive数据性能优化…

基于Python的鸢尾花聚类与分类

1 导入必要的库 from sklearn.datasets import load_iris import pandas as pd import matplotlib.pyplot as plt import numpy as np import seaborn as sns from sklearn.cluster import KMeans from sklearn.metrics import silhouette_score, silhouette_samples from skl…