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

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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值