给磁盘文件排序(位图)
来源:互联网 发布:车轮互联 知乎 编辑:程序博客网 时间:2024/05/20 05:22
问题描述:
输入:是一个包含n个正整数的文件,每个数都小于n,n<10^7如果在输入文件中出现任何重复整数就是致命错误
输出:按升序排列的输入的整数列表
约束:最多有1MB 的内存可用,有充足的磁盘存储空间,运行时间最多几分钟,10秒即可不比优化
题解:
内存只有1MB,即最多能存1024*1024*8位二进制数,一个int型占32字节,每个字节是8位
采用位图存储集合,每个二进制位表示该位置所表示的数字存在与否,采用位运算提高程序运行速度。
位图结构
一个有限定义域内的稠密集合,其中没一个元素最多出现一次,并且没有其他数据与改元素相关联。
代码如下:
#include<iostream>#include<string.h>using namespace std;const int N=100;const int MAXN=0x1F; // =31const int SHIFT=5; int num[1+N/32];bool test(int i){return num[i>>SHIFT] & (1<<(i&MAXN));}int main(){memset(num,0,sizeof(num));int x;while(cin>>x){num[x>>SHIFT]|=(1<<(x&MAXN)); //等效于 num[x/32]|=(1<<(i%32)) }for(int i=0;i<=N;i++){if(test(i))cout<<i<<endl;}return 0;}
阅读全文
0 0
- 给磁盘文件排序(位图)
- 给磁盘文件排序
- 如何给磁盘文件排序
- 位图排序、多路归并排序-应对磁盘文件排序
- 怎样给一个磁盘文件排序?
- 经典算法之外部排序(给10^7个数据量的磁盘文件排序)
- 磁盘排序算法(多路归并、位图)
- 如何给10^7个数据量的磁盘文件排序
- 如何给10^7个数据量的磁盘文件排序
- 如何给10^7个数据量的磁盘文件排序
- 如何给10^7个数据量的磁盘文件排序
- 如何给10^7个数据量的磁盘文件排序
- 如何给10^7个数据量的磁盘文件排序
- 如何给大数据量的磁盘文件排序
- 如何给10^7个数据量的磁盘文件排序
- 【参考】给大数据量的磁盘文件排序
- 给10^7个数据量的磁盘文件排序
- 如何给10^7个数据量的磁盘文件排序
- java 静态初始化集合
- 第六周的学习
- Kotlin基础学习(1)
- CY3684 68013开发套件安装指南
- LintCode刷题--三角形技术
- 给磁盘文件排序(位图)
- Apache主配置文件httpd.conf 详解
- 【Spring】Spring+Struts2+Hibernate3知识点
- 支付工具类
- 编译安装LAMP部署Wordpress搭建个人博客
- Linux 的>和>>
- QSS样式表的使用
- 《大话设计模式》——学习笔记之"行为型模式"(观察者&模板方法&命令&状态&职责链&解释器&中介者&访问者&策略&备忘录&迭代器)
- Codeforces 239E World Eater Brothers【思维+树形Dp】