在 Gayle Laakman 的书《破解技术面试》的问题 11.5 中,
“假设你有一个 20GB 的文件,每行一个字符串。解释你将如何对文件进行排序”
我最初的反应正是她提出的解决方案——通过读取 X mb 的数据,对其进行排序,然后将其写入磁盘,将文件分成更小的块(兆字节)。最后,合并文件。
我决定不采用这种方法,因为最终合并将涉及保留主内存中的所有数据——我们假设这是不可能的。如果是这样的话,这个解决方案究竟是如何成立的?
我的另一种方法是假设我们有几乎无限的磁盘空间,或者至少足以容纳我们已有数据的 2 倍。我们可以读入 X mb 的数据,然后为它们生成哈希键——每个键对应于文件中的一行。我们将继续这样做,直到所有值都被散列。然后我们只需将该文件的值写入原始文件即可。
让我知道你的想法。