位图排序
摘自《编程珠玑》,作为自己的读书笔记
问题描述:
输入:一个最多包含n个正整数的文件,每个数都小于n,其中n = 10^7。这n个数没有重复。
输出:按升序排列的输入整数列表
约束:最多有1MB的内存空间可以使用,有充足的磁盘存储空间可用。运行时间最多几分钟。
问题解答:
此问题可以使用磁盘的归并算法和快速排序,但是都会经历多次的磁盘读写操作。此处直接讲使用位图算法的过程。
- 使用位图表示集合。例如,可以用以下8位字符串来表示集合{1, 2, 3, 5, 7}
0 1 1 1 0 1 0 1 0
代表集合中有数值的位置1, 没有的置0
2. 给定一个10^7位的字符串来做位图的数据结构,此问题可以分三个阶段来解
1)将所有位置0
2)通过读入文件中的整数来建立集合,将相应整数对应位置置1
3)检查每一位,如果该位为1, 就输出相应的整数