摘要: #define BITSPERWORD 32#define SHIFT 5#define MASK 0x1f#define N 1000000int a[1+N/BITSPERWORD];void set_i(int i){a[i>>SHIFT] |= (1<<(i&MASK)); //a[i>>SHIFT] 每1个int32位为一个桶,a[i>>SHIFT]相当于找那个32位, //1<<i(i&MASK),32位中中的那位为1}int test_i(int i){return a[i>>SHIFT] & 阅读全文
posted @ 2012-03-31 22:47 foreverlearn 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 问题描述:问题:一个最多包含n个正整数的文件,每个数都小于n,n = 100 00000。文件中的正整数没有重复的,请按升序排列这些整数。可用内存空间只有1MB左右,运行时间在10秒左右。选择方案:1:归并排序,32为整数,1M的内存空间,每次可以读入约250 000(25万)个数(注意估计方法,1M 10的6次方,1百万字节,1G,10的9次方,10亿字节)那就需要40次读入,第一次遍历文件,对0-249 999的树进行排序,第二次对250 000到499 999之间的数排序,瓶颈在于需要40次读入文件2:利用位图和位向量解决,该排序的特征为:数据没有重复,数据限制在较小的范围内,除了单一整 阅读全文
posted @ 2012-03-31 16:11 foreverlearn 阅读(298) 评论(0) 推荐(0) 编辑