如何在没有代码的情况下计算时间复杂度

时间:2018-04-18 10:11:41

标签: algorithm time-complexity

我必须证明(^正在加强权力):

  1. n^2 = O(2^n)
  2. n^2 = Θ(2^n)
  3. 8^n = O(4^n)
  4. 8^n = Ω(4^n)
  5. 是否有理论方法始终可以知道它是 true 还是 false ,并进行演示?

2 个答案:

答案 0 :(得分:0)

这些是限制计算问题:

f(n) = O(g(n))   if and only if      lim (f(n)/g(n)) = 0
                                       n -> +inf

f(n) = Θ(g(n))   if and only if      lim (f(n)/g(n)) = some positive finite number
                                       n -> +inf 

f(n) = Ω(g(n))   if and only if      lim (f(n)/g(n)) = +inifinity
                                       n -> +inf 

或者,将其颠倒过来

Let x = lim(f(n)/g(n))
          n -> +inf

x = 0 ?                          then f(n) = O(g(n))
x = some postive finite number ? then f(n) = Θ(g(n)) 
x = +infinity ?                  then f(n) = Ω(g(n))

因此,我们必须计算限制,例如在第一种情况下:

 lim(n^2/2^n) = 0 (apply l'Hospital's rule twice)
   n -> +inf 

这就是为什么n^2 = O(2^n)等:

 n^2 = O(2^n)  - true
 n^2 = Θ(2^n)  - false, in fact O(2^n)
 8^n = O(4^n)  - false, in fact Ω(2^n) 
 8^n = Ω(4^n)  - true

答案 1 :(得分:0)

您需要查看the definition of each of the terms并从中进行操作。

我们需要1.我们需要 k n 0 ,以便

| 名词 2 | ≤ k ·2 n n &gt; 名词 <子> 0

例如,在这种情况下, k = 1且 n 0 = 3。对于 n = 4,我们将得到16≤16,这很好。现在我们可以通过归纳来推理。假设它适用于 n ,看看它是否适用于 n + 1.我们会有

|( n + 1) 2 | ≤ k ·2 n + 1)

我们知道一切都是积极的,所以我们可以删除绝对值,我们可以这样操作:

n 2 + 2·n +1≤ k ·2 n + 1 ) n 2 / 2 + n + 1 /2≤ k ·2 n

现在我们知道 k ·2 n n 2 (归纳假设),因此足以证明

n 2 / 2 + n + 1 /2≤ n 2 →1/2 + 1 / n + 1 /(2·n 2 )≤1

您可以进行更多操作:

n 2 - 2·n - 1≥0→(n - 1) 2 - 2≥0

对于 n &gt;而言,这是微不足道的。 n 0 = 3

我们现在以3为负面的例子。这个是假的,8 n O (4 n )。假设这个存在有效的 k n 0 值。然后后面的步骤,你应该

| 8 n 0 + i | ≤ k ·4 n 0 + i

所以

k ·4 n 0 + i / | 8 n 0 + i | ≥1

由于 n 0 i 为正,您可以重写为:

k ·(4/8) n 0 + i ≥ 1

但显然 i →∞的不等式左边的极限是0所以 k n 0 不能是有效值。

你应该能够为其他人做出类似的理由。对于2.,Theta涉及两个不等式,你必须证明两者或反驳一个;在这种情况下它是假的,2 n 不是 n 2 的下限。对于4.,应该沿着1.(这一​​个是真的),但扭转了不平等的标志。