Big o 递推T(n)=2T(n/2)和#x2B;(n-1)

Big o 递推T(n)=2T(n/2)和#x2B;(n-1),big-o,recurrence,asymptotic-complexity,Big O,Recurrence,Asymptotic Complexity,我有这样的反复: T(n)= 2T(n/2) + (n-1) 我的尝试如下: 这棵树是这样的: T(n) = 2T(n/2) + (n-1) T(n/2) = 2T(n/4) + ((n/2)-1) T(n/4) = 2T(n/8) + ((n/4)-1) ... 树的高度:(n/(2h))-1=1⇒ h=lg n-1=lg n-lg 2 最后一级的成本:2h=2lg n-lg 2=(1/2)n h-1级之前所有级别的成本:∑i=0,…,lg(2n)n-(2i-1),这是一个几何级数,等

我有这样的反复:

T(n)= 2T(n/2) + (n-1)
我的尝试如下:

这棵树是这样的:

T(n) = 2T(n/2) + (n-1)
T(n/2) = 2T(n/4) + ((n/2)-1)
T(n/4) = 2T(n/8) + ((n/4)-1) 
...
  • 树的高度:(n/(2h))-1=1⇒ h=lg n-1=lg n-lg 2
  • 最后一级的成本:2h=2lg n-lg 2=(1/2)n
  • h-1级之前所有级别的成本:∑i=0,…,lg(2n)n-(2i-1),这是一个几何级数,等于(1/2)((1/2)n-1)
所以,T(n)=Θ(n lg n)


我的问题是:对吗

不,不是。你把最后一级的成本计算错了,所以你从中得出的结论也是错误的

(我假设你想自己找到复杂性,所以除非你问,否则不要再提示了。)

编辑:根据要求提供一些提示

为了找到复杂性,一种通常有用的方法是递归地应用方程,并将结果插入第一个

T(n) = 2*T(n/2) + (n-1)
     = 2*(2*T(n/4) + (n/2-1)) + (n-1)
     = 4*T(n/4) + (n-2) + (n-1)
     = 4*T(n/4) + 2*n - 3
     = 4*(2*T(n/8) + (n/4-1)) + 2*n - 3
     = ...
这通常会导致一个封闭的公式,你可以通过归纳法证明(如果你有足够的经验,你不需要进行证明,那么你不需要写下证明就可以看到正确性)


剧透者:你可以在几乎所有关于主定理的资源中查找复杂性。

这可以用简单的方法解决


你有
a=2
b=2
f(n)=n-1=O(n)
,因此
c=log2(2)=1
。这属于Master定理的第一种情况,这意味着复杂度是
O(n^c)=O(n)

最后一级的成本=#节点*T(1)=2^h,其中h=lg2n。。我不知道哪里错了:不好意思,什么2^(lg n)?:$@因此,对于对数,您编写了
lg2n
,我更喜欢用空格分隔函数和参数。因为我们这里只处理基数为2的对数,所以我省略了基数