找出递归公式的时间复杂度

时间:2016-09-11 17:16:55

标签: recursion time-complexity big-o

我试图找出递归公式的时间复杂度(大O)。

我试图找到解决方案,您可以在下面看到公式和我的解决方案:

formula

2 个答案:

答案 0 :(得分:0)

您用问号指定的最后一个假设是假的!不要做出这样的假设。

您提供的其他操作似乎是正确的。但实际上它们无处可带。

您应该在草稿中间完成此练习:

T(n) = O(T(1)^(3^log2(n)))

就是这样。这是解决方案!

你实际上可以声称

3^log2(n) == n^log2(3) ==~ n^1.585

然后你得到:

T(n) = O(T(1)^(n^1.585))

这有点类似于你在草案第二部分中所做的操作。 所以你也可以这样离开。但你不能搞砸指数。更改指数的值会更改big-O分类。

答案 1 :(得分:0)

像布伦纳说的那样,你最后的假设是假的。原因如下:让我们从Wikipedia page(使用O(n)而不是n)中定义x

  

f(n) = O(n)当且仅当存在常量cn0 s.t. |f(n)| <= c |g(n)|,适用于所有n >= n0

我们想检查一下O(2^n^2) = O(2^n)。显然,2^n^2位于O(2^n^2),所以我们选择f(n) = 2^n^2并检查它是否在O(2^n)中。把它放到上面的公式中:

exists c, n0: 2^n^2 <= c * 2^n for all n >= n0

让我们看看我们是否能够找到合适的常数值n0c以及上述情况,或者我们是否可以证明它不符合证据:

双面登录:

log(2^n^2) <= log(c * 2 ^ n)

简化:

2 ^n log(2) <= log(c) + n * log(2)

除以log(2)

n^2 <= log(c)/log(2) * n

很容易看出,对于所有c,上述情况都没有n0n >= n0,因此O(2^n^2) = O(n^2)不是有效的假设。