Algorithm 多路合并与双向合并

Algorithm 多路合并与双向合并,algorithm,mergesort,external-sorting,Algorithm,Mergesort,External Sorting,当我们创建一个大文件时,我们将其拆分为小文件,对它们进行排序,然后将它们合并回一个大的排序文件 合并时,我们可以执行多个双向合并过程,也可以执行一个多路合并过程 我想知道哪种方法更好?为什么呢?一次多路合并通常更好。考虑三个小文件: a1 a2 a3 及 最后 c1 c2 c3 如果您与a和b进行合并,我们就剩下(比如) 及 最终合并将创建排序列表,但请注意,在最终合并中,我们必须再次访问A和b项。这种重新合并在级联双向合并中是浪费的 你可以做的是一个单一的多路合并。然而,要小心你怎么做。具

当我们创建一个大文件时,我们将其拆分为小文件,对它们进行排序,然后将它们合并回一个大的排序文件

合并时,我们可以执行多个双向合并过程,也可以执行一个多路合并过程


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

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

a1
a2
a3

最后

c1
c2
c3
如果您与
a
b
进行合并,我们就剩下(比如)

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

你可以做的是一个单一的多路合并。然而,要小心你怎么做。具体来说,避免简单的双循环,即扫描每个游标以查看哪个游标的值最小。改为使用最小堆。这将使复杂性降低到
O(n log n)

c1
c2
c3
a1
b1
a2
b2
b3
a3
c1
c2
c3