模拟大数据处理之——bitset
来源:互联网 发布:詹姆斯 身体数据 编辑:程序博客网 时间:2024/06/05 10:31
模拟类似的题目:在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。
解决方法:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。
注:下面的代码中使用两个bitset代表相邻的两个bit。第一个bitset中对应bit位为1表示这个位置对应的数存在,第二个bitset中对应的位为1表示这个位置对应的数重复出现。
c++代码如下:
#include<iostream>#include<bitset>void create_original_data() //产生原始大数据文件{ int rand_number; unsigned int number=20; srand(0); FILE* original_file_pointer=fopen("./original_data","w"); for(int i=0;i<2e4;i++) //此处声称20000个数而不是2.5亿个数,因为只是模拟 { number=(unsigned int)rand()+(unsigned int)rand(); fprintf(original_file_pointer,"%u\n",number); } fclose(original_file_pointer);}int main(){ create_original_data(); std::bitset<0xffffffff>* bits_1=new std::bitset<0xffffffff>; std::bitset<0xffffffff>* bits_2=new std::bitset<0xffffffff>; unsigned int bit_index; (*bits_1).reset(); (*bits_2).reset(); FILE* original_file_pointer=fopen("./original_data","r"); FILE* output_file_pointer=fopen("./output_data","w"); for(int i=0;i<2e4;i++) { fscanf(original_file_pointer,"%u",&bit_index); if(!(*bits_1).test(bit_index)) (*bits_1).set(bit_index); else (*bits_2).set(bit_index); } fseek(original_file_pointer,0L,SEEK_SET); for(unsigned int i=0;i<2e4;i++) { fscanf(original_file_pointer,"%u",&bit_index); if((*bits_1).test(bit_index)) { if(!(*bits_2).test(bit_index)) fprintf(output_file_pointer,"%u\n",bit_index); } } delete bits_1; delete bits_2; fclose(original_file_pointer); fclose(output_file_pointer); return 0;}
- 模拟大数据处理之——bitset
- 大数据处理--BitSet
- 大数据处理之——简明Spark介绍
- 大数据处理之bitmap
- 大数据处理之二
- 模拟大数据处理、linux下hash_map()使用
- 大数据处理利器——基础概念
- 小项目——大数据处理
- 大数据处理算法—Bloom Filter
- 大数据处理方案之比较
- 大数据处理之Trie树
- 找工作面试之大数据处理
- 2051——Bitset
- STL——bitset
- 文本数据处理—结合mysql模拟实现消息队列
- STL常用函数复习之————bitset
- 大数据数据处理之排序问题
- 大数据处理例之STL实战练习
- 转:在线订电影 票,格瓦拉:一个打动陈天桥的奇葩网站
- Android ListView用法(一)
- 42. 让构建保持干净
- 面向对象 封装、继承、多态
- cxGrid的checkbox效果
- 模拟大数据处理之——bitset
- 模拟点击网页按钮
- 使用dom4j创建和解析xml
- table_name' is marked as crashed and last (automatic?) repair failed
- K-means算法实现
- Java虚拟机(JVM)参数配置说明
- 浮点数使用注意
- W3C词汇和术语表
- 反转整数