Recursion 如何找到递归关系的运行时间?

Recursion 如何找到递归关系的运行时间?,recursion,big-o,complexity-theory,Recursion,Big O,Complexity Theory,此重复关系的运行时间为O(nlogn)。既然我是算法新手,我该如何从数学上证明这一点 T(n) = 2⋅T(n/2) + O(n) T(n) = 2 ( 2⋅T(n/4) + O(n) ) + O(n) // since T(n/2) = 2⋅T(n/4) + O(n) 到目前为止,我可以看到,如果我假设n是2的幂,比如n=2m,那么我可能可以证明这一点,但我没有弄清楚。有人能帮我吗?如果你使用主定理,你会得到你期望的结果 如果你想“用手”证明这一点,你可以通过假设n=2m是2的幂(正如你已

此重复关系的运行时间为
O(nlogn)
。既然我是算法新手,我该如何从数学上证明这一点

T(n) = 2⋅T(n/2) + O(n)
T(n) = 2 ( 2⋅T(n/4) + O(n) ) + O(n)  // since T(n/2) = 2⋅T(n/4) + O(n)

到目前为止,我可以看到,如果我假设
n
是2的幂,比如
n=2m
,那么我可能可以证明这一点,但我没有弄清楚。有人能帮我吗?

如果你使用主定理,你会得到你期望的结果

如果你想“用手”证明这一点,你可以通过假设
n=2m
是2的幂(正如你已经说过的)。这会导致你

T(n) = 2⋅T(n/2) + O(n) = 2⋅(2⋅T(n/4) + O(n/2)) + O(n) = 4⋅T(n/4) + 2⋅O(n/2) + O(n) = 4⋅(2⋅T(n/8) + O(n/4)) + 2⋅O(n/2) + O(n) = Σk=1,...,m 2k⋅O(n/2k) = Σk=1,...,m O(n) = m⋅O(n) 其中,
c
是介于
1
2
之间的常数

您可以使用小于
n
的最大2次方执行相同操作。这将引导您进入
T(n)≥ T(n'')
我们知道
T(n'')

O(n''⋅log(n'')) = O(c⋅n⋅log(c⋅n)) = O(n⋅log(n))
其中,
c
是介于
1/2
1
之间的常数


总的来说,T(n)的复杂度是以
T(n')
T(n')
的复杂度为界的,两者都是
O(n⋅log(n))
因此
T(n)
也在
O(n)中⋅log(n))
,即使不是2的幂。

谢谢,现在我能理解了。
O(n''⋅log(n'')) = O(c⋅n⋅log(c⋅n)) = O(n⋅log(n))