首先,先把这些数据实现位向量:
该例中数据类型为int,且为32位
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1f
#define N 10000000
int a[1+N/BITSPERWOED];
把其对应位置0:
void clr(int i)
{
a[i>>SHIFT] &= ~(1<<(i&MASK));
}
把其对应位置1:
void set(int i)
{
a[i>>SHIFT] |= (1<<(i&MASK));
}
查询对应位是否为1:
int test(i)
{
return(a[i>>SHIFT] &(1<<(i&MASK));
}
然后将其运用到大数据的排序中,现将数据置于位图中,然后遍历打印,如果有重复数据则需要再用一个数组进行标记,打印时候考虑重复
1,for(i=0,N)
if(!test(i))
set(i)
2,for(t = 0, N)
if(test(t))
printf();
具体实现代码可以参考其他人的代码http://blog.youkuaiyun.com/txgc0/article/details/8676068
本文介绍了一种使用位向量来高效存储和操作大数据的方法,并详细解释了如何通过位操作实现数据的设置、清除及查询。此外还提供了一个利用位图进行大数据排序的示例流程。
4万+

被折叠的 条评论
为什么被折叠?



