具有Θ(n ^ 2 log n)复杂度的Mergesort算法

时间:2015-07-04 22:04:30

标签: algorithm sorting time-complexity complexity-theory mergesort

什么会导致mergesort算法具有cmake .复杂度?

1 个答案:

答案 0 :(得分:2)

使用Θ(n^2logn)来打破mergesort并不像直觉所说的那么简单,你要做的第一件事就是"打破"合并并使其在Θ(n^2)而不是Θ(n)中运行它可以通过将两个列表合并到一个新列表(一个链接列表)来完成,而不记住列表的结尾,因此每次插入是Θ(n) - 每个合并步骤在Θ(n^2)中运行的原因。

但这还不够

它将为我们提供递归复杂度公式:

T(n) = 2T(n/2) + n^2

But this formula is in Θ(n^2),所以还不够。

让我们进行逆向工程。

要获得Θ(n^2 logn),我们要使用master theorem case 2,我们已经c=2,我们需要log_b(a)=2

要使其工作",我们可以设置b=4,a=2

这意味着,合并排序将数组拆分为两半,但是"意外地"递归地在每一半上调用两次。

现在我们得到了复杂性函数

T(n) = 4T(n/2) + n^2

以上是Θ(n^2 logn),来自主定理案例2。

总结:

要在Θ(n^2 logn)中运行mergesort,您需要:

  1. "分段"合并以在Θ(n^2 )中运行(例如,通过合并到未经优化的链接列表中)
  2. 两次递减两次。