【发布时间】:2011-02-24 04:08:09
【问题描述】:
在此网页中:
http://web.eecs.utk.edu/~huangj/CS302S04/notes/external-sorting2.html
将生成的运行合并到 连续更大的运行,直到 文件已排序。
正如我所引用的,我们如何将结果运行合并在一起???我们没有那么多内存。
【问题讨论】:
在此网页中:
http://web.eecs.utk.edu/~huangj/CS302S04/notes/external-sorting2.html
将生成的运行合并到 连续更大的运行,直到 文件已排序。
正如我所引用的,我们如何将结果运行合并在一起???我们没有那么多内存。
【问题讨论】:
想象一下你有数字 1 - 9
9 7 2 6 3 4 8 5 1
让我们假设一次只有 3 个适合内存。
因此,您可以将它们分成 3 个块并对每个块进行排序,将每个结果存储在一个单独的文件中:
279
346
158
现在您将打开三个文件中的每一个作为流并从每个文件中读取第一个值:
2 3 1
输出最小值1,并从该流中获取下一个值,现在您有:
2 3 5
输出下一个最小值2,然后继续往下直到输出整个排序列表。
【讨论】:
如果您将两个运行 A 和 B 处理成更大的运行 C,您可以逐行执行此操作,生成逐渐更大的运行,但一次最多只能读取 2 行。因为该过程是迭代的,并且因为您正在处理数据流而不是完整的数据切割,所以您无需担心内存使用情况。另一方面,磁盘访问可能会使整个过程变慢——但它肯定胜过一开始就无法完成工作。
【讨论】: