6

在 Gayle Laakman 的书《破解技术面试》的问题 11.5 中,

“假设你有一个 20GB 的文件,每行一个字符串。解释你将如何对文件进行排序”

我最初的反应正是她提出的解决方案——通过读取 X mb 的数据,对其进行排序,然后将其写入磁盘,将文件分成更小的块(兆字节)。最后,合并文件。

我决定不采用这种方法,因为最终合并将涉及保留主内存中的所有数据——我们假设这是不可能的。如果是这样的话,这个解决方案究竟是如何成立的?

我的另一种方法是假设我们有几乎无限的磁盘空间,或者至少足以容纳我们已有数据的 2 倍。我们可以读入 X mb 的数据,然后为它们生成哈希键——每个键对应于文件中的一行。我们将继续这样做,直到所有值都被散列。然后我们只需将该文件的值写入原始文件即可。

让我知道你的想法。

4

1 回答 1

3

http://en.wikipedia.org/wiki/External_sorting更详细地解释了外部排序的工作原理。它通过解释如何通过读取已排序块的块而不是同时读取所有已排序块来执行 N 个已排序块的最终合并,从而解决了您最终必须将整个 20gB 放入内存的担忧。

于 2013-07-21T08:17:14.697 回答