您的位置:首页 > 其它

2-bitmap 算法,可解决海量数据问题,减少内存使用

2012-08-15 15:54 519 查看
#include "stdafx.h"

#include <iostream>
#include <memory.h>
using namespace std;

unsigned char flags[1000];

unsigned get_val(int idx)
{
int i = idx / 4;
int j = idx % 4;
unsigned ret = (flags[i]&(0x3<<(2*j))) >> (2*j);
return ret;
}

unsigned set_val(int idx, unsigned int val)
{
int i = idx/4;
int j = idx%4;
unsigned tmp = (flags[i]&~((0x3<<(2*j))&0xff)) | (((val%4)<<(2*j))&0xff);
flags[i] = tmp;
return 0;
}

unsigned add_one(int idx)
{
if (get_val(idx)>=2)
{
return 1;
}
else
{
set_val(idx, get_val(idx)+1);
return 0;
}
}

int a[]={1, 3, 5, 7, 9, 1, 3, 5, 7, 1, 3, 5,1, 3, 1,10,2,4,6,8,0};

int _tmain(int argc, _TCHAR* argv[])
{
int i;
memset(flags, 0, sizeof(flags));

printf("原数组为:\n");
for(i=0;i < sizeof(a)/sizeof(int); ++i)
{
printf("%d  ", a[i]);
add_one(a[i]);
}
printf("\r\n");

for(i=0;i < sizeof(a)/sizeof(int); ++i)
{
printf("%d  ", a[i]);
add_one(a[i]);
}

printf("只出现过一次的数:");
for(i=0;i < 100; ++i)
{
if(get_val(i) == 1)
printf("%d  ", i);
}
printf("\r\n");
return 0;
}
2-bitmap 算法可以用于处理海量数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: