我相信这个问题的时间复杂度是O(n)(但也可能不是),但是如何使用替换法来解决它呢?
如果你假设T(n) <= c * n,那么归纳步骤是什么?
我相信这个问题的时间复杂度是O(n)(但也可能不是),但是如何使用替换法来解决它呢?
如果你假设T(n) <= c * n,那么归纳步骤是什么?
首先,我想明确假设Θ(1)=k,其中k是某个常数。
接下来,使用替换法进行推导,我们得到
T(n)=2T(n/2)+Θ(1)
=2T(n/2)+k
=2{2T(n/4)+k)+k
=4T(n/4)+3k
=...
=n.T(1)+(n-1)k
=n.k+(n-1)k
=2nk-k
=O(n).
如果你将它假设为 T(n) <= c * n
,你应该从T(1)开始,并且假设T(n)是正确的,然后通过使用T(n)的假设来证明它对于T(n+1)也是正确的。
顺便说一下,你的假设是正确的!
2^m T(n/2^m) + (2^m - 1)k
。现在为了计算 T(1)
,我们让 2^m = n
,这给出了第六行。 - Muntashir Akonc <= a + b
2b + c = c
这里有一个可能可行的选择,即a=2c,b=-c,从而得到T(n) <= 2cn - c = O(n)。
希望这可以帮到你!
主定理是解决这个问题的好方法:
将给定的方程
T(n) = 2T(n/2) + c
与公式
T(n) = aT(n / b) + (nk logp n)
其中 a >= 1,b > 1,k >= 0,p 是实数
进行比较,我们可以说它满足条件 a > bk,因为 a = 2,b = 2,k = 0
所以,T(n) = θ(nlog b a) = θ(n)