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) = 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的对数,所以我省略了基数