热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

bitmap实现大数据排序和去重

要点:假如有10亿元素,全部数据读进内存,占用1000000000*4102410241024≈3.725G,爆炸!解决方法:bitmap算法,每一位都能

要点:

假如有10亿元素,全部数据读进内存,占用 1000000000 * 4 / 1024 / 1024 /1024 ≈ 3.725 G,爆炸!

解决方法

bitmap算法,每一位都能表示一位数字,10000000000 / 8 / 1024 / 1024 / 1024 ≈ 0.116 G,节约了31倍的空间!

代码:

#define SIZEBIT 1000000000  #define SIZE SIZEBIT/32 + 1 

void cleanAll(unsigned int* bitmap)
{
for (int i = 0; i bitmap[i] = 0;
}

void set(unsigned int* bitmap, unsigned int index)
{
bitmap[index / 32] |= 1 <}

void clean(unsigned int* bitmap, unsigned int index)
{
bitmap[index / 32] &= ~(1 <}

int get(unsigned int* bitmap, unsigned int index)
{
return bitmap[index / 32] & (1 <}

void sort(vector &a) // 将元素存入bitmap数组中,元素其实自动排序,只要bit == 1,即说明有此元素。
{
unsigned int bitmap[SIZE];
cleanAll(bitmap);

for (int i = 0; i {
set(bitmap, a[i]);
}

for (int i = 0; i {
if (get(bitmap, i))
cout < }
}
int main()
{
vector a = { 1, 3, 2, 5, 2 };
sort(a); // 输出 1 2 3 5
system("pause");
return 0;
}


推荐阅读
author-avatar
小色米虫_524
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有