【发布时间】:2015-04-07 14:52:57
【问题描述】:
现在问题很简单。您有 1000 MB,您必须对其进行排序。现在的问题是您只有 100 MB 的空间来对数据进行排序。 (假设 1000 MB 存储在磁盘中,而您只有 100 MB 的 RAM 来对数据进行排序。-任何时候,您的 RAM 中只能有 100 MB 的数据。)
现在我想出了这个解决方案:
- 将数据分成 10 部分 - 每部分 100 MB,然后使用快速排序对其进行排序。
- 然后将所有数据块写入硬盘。
- 现在从每个块中选择前 10 MB,然后合并。现在你有 100 MB。现在将这 100 MB 分开。
- 现在做同样的事情。从每个块中选择接下来的 10 MB 并合并。
- 继续这样做,然后连接数据。
现在我面临的问题是,每次连接时我们都会单独合并 100 MB,我们会出错。 (这 100 MB 也应该合并在一起。)
我该如何解决这个问题?
【问题讨论】:
-
您不必从头开始设计该算法,它称为外部排序,特别是您可能需要合并排序
-
我知道归并排序,但它是如何工作的?因为在合并排序中,您需要 1000 MB 的空间来将所有数据重新合并在一起。另外我不知道什么是外部排序?
-
将子块视为一种排序流。您同时打开了所有
n子流,并从任何n子流中选择最小的元素。外部归并排序与内部归并排序略有不同。不要混淆。
标签: sorting