位图
来源:互联网 发布:王坚 阿里云 编辑:程序博客网 时间:2024/06/06 04:48
最近遇到一道题卡空间卡的很厉害,在网上搜了一下,发现了一个叫做位图的数据结构。
位图的原理就是用一个int的32个比特位表示0~31个数是否存在,1表示存在,0表示不存在。
位图优点:
1,速度快。
2,内存空间占用小。
3,能表示大范围数据。
位图的缺点 :
1,可读性差。
2,存储元素的个数比一般元素要多,但是存储元素的大小受空间大小的限制。
位图的实现(模板)
class BitMap { public: BitMap(int size = 100)//size表示你需要表示元素的个数 { _map.resize((size >> 5) + 1);//一个int可以表示32个元素,size个元素需要size/32 + 1个int来存储 //注意+1因为1/32 = 0,但是我们需要一个int } void set(int num)//将标志位设置为1表示元素存在 { int bite = num >> 5;//相当于/32//找出元素在数组中对应的下标 int bit = num % 32;//找出元素对应的bit位 _map[bite] |= (1 << bit); } void reset(int num)//将已存在元素删除,将对应的标志位置0 { int bite = num >> 5;//相当于/32//找出元素在数组中对应的下标 int bit = num % 32;//找出元素对应的bit位 _map[bite] &= ~(1 << bit); } bool test(int num) { int bite = num >> 5;//相当于/32//找出元素在数组中对应的下标 int bit = num % 32;//找出元素对应的bit位 if (_map[bite] & (1 << bit)) return true; else return false; } private: vector<int> _map; };
1e8素数表
const int MAXN = 10000005; const int N = 6000005; int prime[N]; int k; BitMap isprime(MAXN); void getPrime() { k = 0; for (int i = 2; i < MAXN; i++) { if (!isprime.test(i)) { prime[++k] = i; for (int j = i+i; j < MAXN; j+=i) { isprime.set(j); } } } }
阅读全文
0 0
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- 位图
- Python几个特殊语法的使用实例
- png转jpg具体操作方法
- yii2 RESTful 接口 api -2 : 自定义函数
- 3-sum问题平方对数级别解法(algs4)
- C程序设计基础——求a+aa+aaa+...+...得累加和
- 位图
- PopupWindow的简单使用
- LTC-PolygonLighting
- 关于I/O复用之select函数
- main(int argc, char ** argv)形参的理解与使用
- 2017年8月16日提高组T2 疾病
- FilterInputStream之装饰模式(例)
- Android编程权威指南(第2版)—第5章挑战练习
- 菜鸟初学JDK之ArrayList