为什么我们在合并排序算法中将i作为log(n-1)插入

时间:2014-07-04 14:39:25

标签: algorithm mergesort

我对合并排序算法的数学证明有疑问。我只看到证据是数学,但问题与算法有关。

最坏情况下合并排序的时间复杂度T(n) = 2T(n/2) + n-1

=> T(n) = n-1 + 2T(n/2) //递归部分总是在结束时保持简单

通过插件&突然方法:

T(n) = n-1 + 2[n/2-1 + 2T(n/4) ]    //plug
     = n-1 + n-2 + 4T(n/4)          //chug
     = n-1 + n-2 + 4[n/4 -1 + 2T(n/8)]    //plug 
     = n-1 + n-2 + n-3 + ....... + n- 2^i-1 + 2^i T(n/2^i) //rounding off

现在我怀疑这一步为什么他把我当作日志(n-1)?这给了我们一个答案:

     =nlogn -n+1

1 个答案:

答案 0 :(得分:1)

随着问题n的大小减少,一次减半,n成为可以在恒定时间内解决的基本案例问题的大小。 在这种情况下,n=1是基本情况,因为T(1)已知为O(1)

在您的扩展中,数字in减半的次数。

现在的问题是:当递归停止时n变为1时,那时的值i是多少?

也就是说,n可以被分成2次,直到变为1?

答案是log_2(n)

所以'插头和突突'扩展停在价值i = log_2(n)