多向合并与双向合并

时间:2012-08-04 06:23:00

标签: algorithm mergesort external-sorting

当我们externally merge sort一个大文件时,我们将它分成小文件,对它们进行排序,然后将它们合并回一个大的文件。

合并时,我们可以执行许多双向合并传递,也可以执行一次多路合并。

我想知道哪种方法更好?为什么?

1 个答案:

答案 0 :(得分:6)

一个多向合并通常更好。考虑三个小文件:

a1
a2
a3

b1
b2
b3

最后

c1
c2
c3

如果您与ab进行合并,我们会留下(比方说)

a1
b1
a2
b2
b3
a3

c1
c2
c3

最终合并会创建排序列表,但请注意在最终合并中我们必须再次访问ab项目。正是这种重新合并在级联双向合并中浪费了。

您可以做的是单个多向合并。但是,要小心你是怎么做的。具体来说,避免扫描每个光标的天真双循环以查看哪个具有最小值。请改用最小堆。这会将复杂性降低到O(n log n)