我想知道递归方法的时间复杂度是什么: 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)
答案 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)。