T(n)的时间复杂度= 2T(n / 2)+ O(1)是多少

时间:2018-11-09 13:19:40

标签: algorithm recursion time-complexity

我想知道递归方法的时间复杂度是什么:  T(n)= 2T(n / 2)+ O(1) 我看到了说是O(n)的结果,但我不知道为什么,我这样解决了这个问题:

T(n) = 2T(n/2) + 1
T(n-1) = 4T(n-1/4) + 3
 T(n-2) = 8T(n-2/8) + 7
......  …………..  ..
T(n) = 2^n+1 T (n/2^n+1) + (2^n+1 - 1) 

3 个答案:

答案 0 :(得分:0)

考虑使用n=2^m,它可以让您编写

T(2^m)=2T(2^(m-1))+O(1)

或表示为S(m):= T(2^m)

S(m)=2 S(m-1) + O(1),

2^m S(m)=2 2^(m-1)S(m-1) + 2^(m-1) O(1)

最后

R(m) = R(m-1) + 2^(m-1) O(1).

现在归纳起来,

R(m) = R(0) + (2^m-1) O(1),

T(n) = S(m) = 2^(1-m) T(2^m) + (2 - 2^(m-1)) O(1) = 2/n T(n) + (2 - n/2) O(1).

答案 1 :(得分:0)

我认为您对递归关系有错误的认识。您可以这样认为:

如果T(n)表示输入= n时函数T()的值,则该关系式表示输出是当前输入一半的值的两倍多。因此对于输入= n-1输出,即T(n-1)将是该输入一半值的两倍多,即T(n-1)= 2 * T((n-1)/ 2) +1

以上那种递归关系应该由伊夫·道乌斯特(Yves Daoust)回答。有关递归关系的更多示例,可以参考this

答案 2 :(得分:0)

您可能需要记住一些规则。如果您能记住这些简单的规则,那么Master定理就很容易求解递归方程。以下是需要记住的基本规则

a = 2, b = 2, f(n) = O(1)
n^(log b base a) = n = O(n)

现在,让我们使用以上方程式求解递归。

{{1}}

这是上述公式中的情况3)。因此,T(n)= n ^(log b base a)= O(n)。