海量数据处理--位图(BitMap)
来源:互联网 发布:淘宝达人是怎么赚钱 编辑:程序博客网 时间:2024/05/22 00:15
对于海量数据这个词,大家不难理解吧。主要是针对给定的数据量特别大,占用内存特别大的情况。那么和位图有什么关系呢。看下面一个腾讯的海量数据的例子吧。
例:给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在这40亿个数中。
对于这道题,我们给了40亿个不重复的无符号整数,一个整数是4个字节,那么就是40*4=160亿个字节,大概是16G的内存。显然在内存上时存不下的。那么我们怎么来查找呢。既然是不重复,就说明整数要么就不出现,要么就出现一次。整数的最大值是42亿多,即2^32。此时我们就可以用每一位来表示这个数存在或者不存在。如果将32位为一个编号时,原本16G的数据使用位图可以节省到500M的空间。大概我们刚刚学过哈希表,用访问地址的方法来快速的查找出地址对应的值。这里也一样,用到了哈希表中的新的解决海量数据的方法---位图。
那么问题来了?什么是位图呢?
我们用每一位标志这个数存在的状态,设为0(不存在)和1(存在);
位图的基本结构:
是一个size_t类型的vector数组;
vector<size_t> _array;
位图的基本函数:
对于判断一个无符号整数,是否存在这40亿个数中。
(1)需要存入这40亿个数,使用Set将对应的40亿个位置为1;
(2)使用Test将判断某个位是否为0或1;
注:位图只是考虑了整数类型
位图的实现代码:(vs2013)
#pragma once#include<iostream>using namespace std;#include<vector>//位图的每一位的0,1标志这个数存在或不存在的状态class BitMap{public:BitMap(size_t Size = 1024){_array.resize(Size/32+1);}~BitMap(){}public://将这个数存在的状态置为1void Set(const size_t& value){size_t index = value>>5;size_t bit = value % 32;_array[index] |= (1<<bit);}//将这个数不存在的状态置为0void Reset(const size_t& value){size_t index = value>>5;size_t bit = value % 32;_array[index] &= (~(1<<bit));}//测试某个数是否出现过bool Test(const size_t& value){size_t index = value>>5;size_t bit = value % 32;return (_array[index] & (1<<bit));}private:vector<size_t> _array;};void BitMapTest(){BitMap bm(size_t(-1)); //64位系统下表示的整数的最大值bm.Set(10);bm.Set(100);bm.Set(20);bm.Set(500);cout<<bm.Test(10)<<endl;cout<<bm.Test(200)<<endl;cout<<bm.Test(500)<<endl;cout<<bm.Test(40)<<endl;}
运行结果:
0 0
- 海量数据处理--位图(BitMap)
- 海量数据处理---位图法Bitmap
- 海量数据处理——位图法bitmap
- 海量数据处理——位图法bitmap
- 海量数据处理 bitmap算法实现32位压缩排序(位图排序)
- 海量数据处理(二) 位图
- JAVA海量数据处理之二(BitMap)
- 海量数据处理之Bitmap
- 海量数据处理之Bitmap
- 海量数据处理-----bitmap
- Bitmap 海量数据处理
- BitMap(位图) -处理海量数据
- 海量数据处理之bitmap实现
- bitmap 在海量数据处理中的使用
- 海量数据处理(二)
- 海量数据处理 (转)
- 海量数据处理(1)
- 位图(bitmap)排序
- 垃圾收集器
- 学习HTML+CSS的第三课笔记!
- express框架网址
- centos7安装mysql
- npm安装gulp和cnpm出现ERR:Windows_NT xxxx的解决办法
- 海量数据处理--位图(BitMap)
- 洛谷 P1101 单词方阵
- LeetCode题解整理版(二)
- 【Android】TextView倾斜文字
- 《Ubuntu14.04-server版下搭建LAMP环境》
- ES6学习网址, http://es6.ruanyifeng.com/#docs/let
- [js]
- tf-idf、逻辑回归和SVM on spark
- Java泛型