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))