递归T(n)= 2T(n / 2)+(n-1)

时间:2011-11-29 19:11:29

标签: 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 /(2 h )) - 1 =1⇒h= lg n - 1 = lg n - lg 2
  • 最后一级的成本:2 h = 2 lg n - lg 2 =(1/2)n
  • 直到等级h-1的所有等级的成本:Σ i = 0,...,lg(2n) n - (2 i -1),这是一个几何级数,等于(1/2)((1/2)n-1)

因此,T(n)=Θ(n lg n)

我的问题是:是吗?

2 个答案:

答案 0 :(得分:3)

不,不是。你最后一个级别的成本是错误的,所以你从中得到的也是错误的。

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

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

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

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
     = ...

这通常会导致你可以通过归纳证明一个封闭的公式(如果你有足够的经验,你不需要进行证明,那么你正确性而不写下证据)

Spoiler:您可以查看几乎所有处理 Master Theorem 的资源的复杂性。

答案 1 :(得分:0)

这可以通过Masters theorem轻松解决。

您有a=2b=2f(n) = n - 1 = O(n),因此c = log2(2) = 1。这属于硕士定理的第一个案例,这意味着复杂性为O(n^c) = O(n)