什么会导致mergesort算法具有cmake .
复杂度?
答案 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,您需要:
Θ(n^2 )
中运行(例如,通过合并到未经优化的链接列表中)