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

#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 算法可以用于处理海量数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值