海量信息处理之位图的应用

来源:互联网 发布:网络渗透的目的 编辑:程序博客网 时间:2024/05/17 07:28

代码已经经过测试,后续待更新。

CPP文件如下:

#include "largerDataProcess_bitmap.h"// 位图的测试代码void largerDataProcess_bitmapCppTest(){bitmapOneTest();return;}int bitmapOne::bitmap_init( int size, int start ){g_size = size/8 + 1;g_base = start;g_bitmap = new char[g_size];if( g_bitmap == NULL )return 0;memset( g_bitmap, 0x0, g_size );return 1;}int bitmapOne::bitmap_set( int index ){cout<<"index = "<<index<<"  ";int quo = (index - g_base)/8;int remainder = (index - g_base )%8;unsigned char x = (0x1 << remainder );if( quo > g_size )return 0;cout<<"quo = "<<quo<<endl;g_bitmap[quo] |= x;return 1;}int bitmapOne::bitmap_get( int i ){int quo = (i)/8;int remainder = (i)%8;unsigned char x = (0x1 << remainder);unsigned char res;if( quo > g_size )return -1;res = g_bitmap[quo] & x;return res > 0 ? 1: 0;}int bitmapOne::bitmap_data( int index ){return (index+g_base);}int bitmapOne::bitmap_free(){delete[] g_bitmap;return 0;}bitmapOne::bitmapOne():g_bitmap(NULL),g_size(0),g_base(0){  }// 第一个位图bitmapOne的测试int bitmapOneTest(){bitmapOne bmOne;vector<int> v(100,0);for( vector<int>::iterator  vi= v.begin() ; vi != v.end(); vi++ )v[vi-v.begin()] = rand()%100;int i;bmOne.bitmap_init(100,0);for( i = 0; i< 20; i++ ){bmOne.bitmap_set(v[i]);}for( i = 0; i<100; i++ ){if( bmOne.bitmap_get(i) > 0 )cout<< bmOne.bitmap_data(i) << " ";}cout<<endl;bmOne.bitmap_free();return 0;}

头文件如下:

/*参考网页如下: *http://blog.csdn.net/gugemichael/article/details/8013150 大数据过滤及判断算法 -- Bitmap / Bloomfilter *http://blog.csdn.net/hguisu/article/details/7880288海量数据处理算法—Bit-Map *http://blog.csdn.net/net_assassin/article/details/9340597  bitmap与桶方式对1000万数据进行排序 *http://blog.csdn.net/qibaoyuan/article/details/5914458 位图排序 *http://blog.csdn.net/cike211/article/details/9990365 相关应用 */#ifndef  LARGERDATAPROCESS_BITMAP_H#define LARGERDATAPROCESS_BITMAP_H#include "Common.h"void largerDataProcess_bitmapCppTest();class bitmapOne{private:char *g_bitmap ;int g_size;int g_base;public:int bitmap_init( int size, int start );int bitmap_set( int index );int bitmap_get( int i );int bitmap_data( int index );int bitmap_free();bitmapOne();};int bitmapOneTest();#endif


0 0