位图的实现以及位图的应用
来源:互联网 发布:云豹直播源码破解版 编辑:程序博客网 时间:2024/05/22 06:36
位图就是用每一个bit位来存储某种状态,适用于大规模数据且数据状态不多的情况。通常用来判断一个数据是否存在。
#include<iostream>#include<vector>using namespace std;class BitMap{public: BitMap() {} BitMap(size_t size) { _table.resize((size>>5) + 1); } void Set(int val)//将对应bit位置1--等同于插入一个元素 { size_t byteNo = val >> 5;//在哪个字节 size_t bitNo = val % 32;//在哪个bit位 _table[byteNo] |= (1 << bitNo); //置1 } void Reset(int val)//将对应bit位置0--等同于删除一个元素 { size_t byteNo = val >> 5; size_t bitNo = val % 32; _table[byteNo] &= ~(1 << bitNo);//置0 } bool Test(int val) { size_t byteNo = val >> 5; size_t bitNo = val % 32; if ((1 << bitNo)&_table[byteNo]) { return true; } else { return false; } }private: vector<int> _table;};void FunTest(){ BitMap bm(100); bm.Set(30); bm.Set(65); bm.Set(66); bm.Set(26); bm.Set(15); bm.Set(23); bm.Set(2); bm.Set(47); cout<<bm.Test(15)<<endl; cout<<bm.Test(20)<<endl;}
位图相关应用:
1、给定100亿个整数,设计算法找到只出现一次的整数。
我们可以将这100亿个整数拆分成1000份文件,在每一份文件中使用位图,用两个bit位来存储一个数据的状态,00:出现0次,01:出现1次,10:出现多次,11:舍弃。再将1000份文件中只出现一次的数据保存至一个文件中即可。
2、给两个文件,分别有100亿个整数,我们只有1G内存,找到两个文件交集 。
所有整数共2^32种可能,每个数据用两个bit位表示,共需要2^32*2/8 = 1GB内存,00:两个文件均没出现,10:文件1出现过,01:文件2出现过,11:两文件均出现过,遍历两个文件中的所有整数,然后寻找位图中11对应的整数即是两个文件的交集。
3、1个文件有100亿个int,1G内存,找到出现次数不超过2次的所有整数 。
与问题1类似:我们可以将这100亿个整数拆分成1000份文件,在每一份文件中使用位图,用两个bit位来存储一个数据的状态,00:出现0次,01:出现1次,10:出现两次,11:舍弃。再将1000份文件中出现次数不超过两次的数据保存至一个文件中即可。
4、给两个文件,分别有100亿个query,我们只有1G内存,找到两个文件交集。
hash分桶法:将两个文件分别切分为1000份,每个文件相同的query会进入编号相同的文件(哈希算法会将query转换为整型,对应下标index=query/1000);依次将相同编号的小文件加载到内存进行比较;找出交集。
- 位图的实现以及位图的应用
- 位图的实现以及应用
- day24之位图的实现和位图的应用
- 位图算法的应用
- 位图法的应用
- 第一章:位图的应用
- 位图的应用
- 位图索引的应用
- 位图数据结构的实现与应用
- 位图算法的实现
- 位图的实现
- 位图的实现
- 透明镂空位图的实现
- 位图bitmap的实现作用
- find_first_zore_bit-一个位图的实现
- 缩放位图以及简单的图形处理
- 实现透明位图时对单色位图与颜色位图转换的思考
- 位图文件的另类应用:文件画图
- 【JavaScript学习】之My97DatePicker日期选择库
- 数据结构和算法_数组/链表反转
- Go调用ssh 执行Shell命令
- Tensorflow(4) Semantic Segmentation 图片预处理
- #102. 最小费用流
- 位图的实现以及位图的应用
- C语言库函数探究
- 看我是怎么学SLAM(二)——3D自主探索建图源码解读
- Spring-AOP 通过配置文件实现 环绕增强
- css居中总结
- android总体流程
- 文本自动摘要—tensorflow_textsum
- java-栈的实现
- Softmax