如何在不使用磁盘,网络或虚拟内存的情况下对大文件进行排序?

时间:2016-07-26 18:20:48

标签: algorithm

昨天,我参加了网络安全职位的采访,并提出了这个问题:

假设你有一台1GB RAM的PC,这台计算机的磁盘上有一个包含随机数的10 GB文件。您将使用什么技术对文件进行排序并提出算法。您不能使用磁盘或网络或虚拟内存进行排序?

我尝试了许多不同的方法,提出了外部排序,但面试官说这不是正确的方法。在采访结束时,我礼貌地问他,他问我的问题的方式和算法是什么,但他拒绝说这是一个很大的秘密。

我的问题是如何处理这类问题,因为我不能停止思考它,但仍然没有明确的答案?

1 个答案:

答案 0 :(得分:-2)

要对文件进行排序,您需要在RAM中运行算法。由于文件比可用的RAM量大10倍,因此您需要将文件排序为10个(或更多)单独的块,并在最后重新组合它们。

您的算法需要包含..

  1. 阅读光盘上的列表,查找文件中的最大数字(并在阅读完列表后跟踪它)
  2. 在读完整个列表后,将这个数字放入RAM的列表中并重复此过程(每次查找小于最后一个的最大数字),直到所有或大部分RAM用完为止。
  3. 现在将该列表添加回光盘,其中索引表示其顺序,在本例中为1,并清理RAM以进行更多处理
  4. 每次在RAM上构建已排序数字列表时,重复步骤3 10次或更多次,直到所有数字都已添加到光盘上的单独列表中。
  5. 要完成,请检查每个列表开头的索引和(一次一个列表)将它们放入光盘上的正确顺序
  6. <强>更新 我添加了我的回答,以反映@JimMischel提出的一些观点

    RAM中的算法不仅可以跟踪最大数字,还可以保持单独的整数计数,该计数随着文件上每次出现的数字而增加。然后,该号码将被放置在RAM中的子列表中,但数量会出现多次。

    更新:关于提问者的问题

    OP发布的问题表明&#34;您不能将光盘用于排序&#34;。问题是没有任何意味着光盘不能用于存储。我相信大部分阅读这个问题都是错误的解释,因此,如果没有存储任何数据的地方,就认为分配的任务是不可能的。