位图模拟实现
来源:互联网 发布:网络金融运营模式 编辑:程序博客网 时间:2024/05/20 07:50
位图(BitMap):
位图是一个数组的每个数据的每个二进制位表示一个数据,0表示数据不存在,1表示数据存在。通常用来判断一个数据存在或者不存在。
优点:节省空间
位图代码实现:
#include<vector>using namespace std;class BitSet{public:BitSet(size_t n){_a.resize((n >> 5) + 1, 0);}void Set(size_t n)//设置{//先计算在那个区间size_t index = n >> 5;//在计算在那个位上size_t pos = n % 32;_a[index] |= (1 << pos);}void ReSet(size_t n)//复位重新置为0{//先计算在那个区间size_t index = n >> 5;//在计算在那个位上size_t pos = n % 32;_a[index] &= ~(1 << pos);}bool Test(size_t n)//判断某一个位置是0还是1{//先计算在那个区间size_t index = n >> 5;//在计算在那个位上size_t pos = n % 32;//直接与1相与return _a[index] & (1 << pos);}protected:vector<size_t> _a;};
位图面试题分析:
题目:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。【腾讯】
分析:
(1)计算占用空间大小:40亿int数据如果存起来大概需要16G的空间(显然要想直接将这16G的数据放到内存中现在的大多数计算机还是达不到的);
(2)采用位图这种存储结构,计算需要的空间大小;
(3)因为一个数存在不存在只需要用两种状态就可以表示出来(1存在,0不存在);
(4)所以一个int数据有32个位,可以表示32个数据存在不存在,因此16G的数据用位图来存在只需要500M左右的空间;
(5)500M大小的数据现在的内存还是可以比较容易的表示出来。
图示分析:
0 0
- 位图模拟实现
- VC 透明位图 实现透明位图类
- 【位图】位图实现,处理大数据
- 【位图】位图实现,处理大数据
- 位图的实现以及位图的应用
- 透明位图实现
- matlab实现位图数据结构
- C实现bitmap位图
- C实现bitmap位图
- C实现bitmap位图
- 位图简单实现
- C实现bitmap位图
- Android实现位图剪切
- 位图算法的实现
- Scala 实现位图法
- 位图的实现
- 位图排序基本实现
- Go实现位图排序
- Install VPN PPTP Server on CentOS 6
- 打印一个数的二进制形式
- C# 处理数据类型转换帮助类
- Lock接口
- EasyUI PropertyGrid与后台交互
- 位图模拟实现
- 设计模式——单例模式
- mysql增加用户并授权
- 树莓派上搭建NAS
- 递归
- zookeeper学习心得二:同步与异步
- Mysql修改数据库名
- fl2440——RTC(实时时钟)的学习、内核添加RTC支持
- 202. Happy Number