我知道的 位图

位图这些知识点,又不难,不知道白不知道;
看看万一以后用到,还能有这个概念;
在这里插入图片描述

一、位图:

1.1、位图概念:

用每个比特位判断某种状态,0/1 判断为两种状态,可以大大节省空间;
适用于数据无重复,海量数据;通常判断数据存不存在;

2.2、位图实现原理:

2.2.1、构造位图:

在这里插入图片描述
在这里插入图片描述

2.2.2、位图的存储:

在这里插入图片描述

在这里插入图片描述

2.2.3、位图的查找

算出位置,然后通过与只有该位置为1,其他位置为0的数,相与(&),返回结果;

在这里插入图片描述

2.2.4、位图的删除:

算出位置,然后通过与只有该位置为0,其他位置都为1的数,相与(&)。

在这里插入图片描述

2.3、位图代码实现:

#include<vector>
using namespace std;
//用于存储不重复数据的简单信息,不需要存放数据本身
//节省空间,查找效率高o(1)
class Bitmap {
public:
	//位图大小和数据范围有关
	Bitmap(size_t range)
		:_bit(range/32+1)
	{ }
	//存储信息
	void set(size_t num) {
		//计算位置
		//计算整数位置:/32
		int idx = num / 32;
		//计算比特位位置:%32
		int bitIdx = num % 32;
		//把对应比特位变为1
		//按位或运算
		_bit[idx] |= 1 << bitIdx;
	}
	//查找信息
	bool test(size_t num) {
		int idx = num / 32;
		int bitIdx = num % 32;
		return _bit[idx] & (1 << bitIdx);
	}
	//删除信息
	void reset(size_t num) {
		int idx = num / 32;
		int bitIdx = num % 32;
		_bit[idx] &= ~(1 << bitIdx);
		}
private:
	//整数数组
	vector<int> _bit;
};

2.4、位图的应用:

  1. 快速查找某个数据是否在一个集合中
  2. 排序
  3. 求两个集合的交集、并集等
  4. 操作系统中磁盘块标记

在这里插入图片描述

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值