有人能指出我对外部内存合并的好参考吗?我已经阅读了维基页面,但我很难理解它。动画可能会有所帮助,但我似乎无法找到它。
基本上,我知道你在磁盘上有一定数量的块,你可以在内存中安装一定数量的块。假设你在磁盘上有32个块,在内存中有4个块。在第一遍中,您一次读入4个块进入内存,在内存中对它们进行排序,并将它们写回磁盘。所以在这一点上你有8个排序的4个块。合并是如何工作的?因为我在内存中有4个块(假设我还有一个用于输出)我认为我应该能够一次合并这8个运行中的4个,然后合并接下来的4个运行。然后在最后一遍中我想合并整个事情。但是你不必每次都从磁盘读取每个块吗?那么这怎么不成为一个n ^ 2解决方案呢?
答案 0 :(得分:0)
我想我现在明白了。当您合并时,您仍然必须读取磁盘上的所有块(让我们称之为B),但您不必读取它们B次。你只能读B日B次。