位图排序

摘自《编程珠玑》,作为自己的读书笔记

问题描述:

输入:一个最多包含n个正整数的文件,每个数都小于n,其中n = 10^7。这n个数没有重复。

输出:按升序排列的输入整数列表

约束:最多有1MB的内存空间可以使用,有充足的磁盘存储空间可用。运行时间最多几分钟。

 

问题解答:

此问题可以使用磁盘的归并算法和快速排序,但是都会经历多次的磁盘读写操作。此处直接讲使用位图算法的过程。

  1. 使用位图表示集合。例如,可以用以下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, 就输出相应的整数

posted on 2012-03-20 11:25  aho  阅读(133)  评论(0编辑  收藏  举报

导航