答案 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)
O(n)
而不是n
)中定义x
:
f(n) = O(n)
当且仅当存在常量c
,n0
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
让我们看看我们是否能够找到合适的常数值n0
和c
以及上述情况,或者我们是否可以证明它不符合证据:
双面登录:
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
,上述情况都没有n0
,n >= n0
,因此O(2^n^2) = O(n^2)
不是有效的假设。