Gayle Laakman的书“Cracking the Technical Interview”中的问题11.5,
“想象一下,你有一个20GB的文件,每行一个字符串。解释你如何对文件进行排序”
我最初的反应正是她提出的解决方案 - 通过读取X mb的数据,对文件进行排序,然后将其写入磁盘,将文件拆分为更小的块(兆字节)。最后,合并文件。
我决定不采用这种方法,因为最终合并将涉及保留主存储器中的所有数据 - 我们假设这是不可能的。如果是这样的话,这个解决方案究竟是如何实现的?
我的另一种方法基于这样的假设:我们拥有接近无限的磁盘空间,或者至少足以容纳我们已有数据的2倍。我们可以读入X mb的数据,然后为它们生成散列键 - 每个键对应一个文件中的一行。我们将继续这样做,直到所有值都经过哈希处理。然后我们只需要将该文件的值写入原始文件。
让我知道你的想法。
答案 0 :(得分:3)
http://en.wikipedia.org/wiki/External_sorting提供了有关外部排序如何工作的更详细说明。它通过解释如何通过读取排序块的块来执行N个排序块的最终合并,而不是同时读取所有排序块,来解决您最终必须将整个20gB带入内存的问题。 / p>