我有这种情况:
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)
...
因此,T(n)=Θ(n lg n)
我的问题是:是吗?
答案 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=2
,b=2
,f(n) = n - 1 = O(n)
,因此c = log2(2) = 1
。这属于硕士定理的第一个案例,这意味着复杂性为O(n^c) = O(n)