随笔分类 - 编程珠玑
摘要:问题A题目:给定一个包含40亿个随机排列的顺序文件,找到一个不在文件中的32位整数,在有足够内存的情况下应该如何解决该问题?如果有几个外部的临时文件可用,但是仅有几百字节的内存,又该如何解决?(1)对于有足够内存的情况,完全可以采用位图存储的方法,详细内容看《编程珠玑》第一章。(2)Ed Reingold 给出了另外一种解法。 问题的关键是只要找到一个数字,那么我们把问题简化一下,给定一个文件,里头最多包含16个4bit的整数,找到一个不在文件中的4bit整数。假设这十个数是1 2 3 4 5 7 6 9 8 10。 取出一个数字,如果是最高位为1,放到一个文件中,否则放到另外一个文件中。..
阅读全文
摘要:整个程序的思想就是: 1.每个整数有32位,那么它就可以表示32个数,分别对应每bit位为1. 2.然后把10000000个数分为1+N/BITSPERWORD组(相当于有这么多个桶),每组包含接近32个数。上面的解释可能仍不到位,那我们来看具体的函数:对于set函数,我们可以这样理解, arr[i>>SHIFT] |= (1#define BITPERWORD#define MASK 0x1F#define N 10000000#define SHIFT 5int a[N/BITPERWORD + 1];void clr_bit(int i){a[i>>SHIFT]
阅读全文

浙公网安备 33010602011771号