证明或驳斥时间复杂性

时间:2019-08-13 11:59:16

标签: time-complexity complexity-theory

我很快就要考试了,而且很久没上大学了,因为我在医院里

证明或反驳以下陈述:

  1. log(n)= O( √ n)

  2. 3 ^(n-1)= O(2 ^ n)

  3. f(n)+ g(n)= O(f(g(n)))

  4. 2 ^(n + 1)= O(2 ^ n)

有人可以帮我解释一下吗?

1 个答案:

答案 0 :(得分:1)

(1)是正确的,因为log(n)的渐近增长比任何多项式都慢,包括sqrt(n)= n ^(1/2)。为了证明这一点,我们可以观察到log(n)和sqrt(n)都是n> 0的严格增加的函数,然后集中于易于评估的序列,例如2 ^(2k)。现在我们看到log(2 ^(2k))= 2k,但是sqrt(2 ^(2k))= 2 ^ k。对于k = 2,2k = 2 ^ k,对于k> 2,2k <2 ^ k。这掩盖了一些细节,但是这个想法是正确的。您可以通过在2 ^(2k)和2 ^(2(k + 1))之间争论两个函数的值大于1来完成此操作,因为k> = 2,因此可以通过将sqrt(n)乘以x来消除任何交叉一些常数。

(2)3 ^(n-1)是O(2 ^ n)是不正确的。假设这是真的。然后存在一个n0和c,使得对于n> n0,3 ^(n-1)<= c * 2 ^ n。首先,通过在前面加上(1/3)来消除-1;因此(1/3)* 3 ^ n <= c * 2 ^ n。接下来,除以2 ^ n:(1/3)*(3/2)^ n <= c。乘以3:(3/2)^ n <= 3c。最后,取底数为3/2的两边的对数:n <= log_3 / 2(3c)。 RHS是一个常数表达式,而n是一个变量;因此,n不能满足要求。这是一个矛盾,所以我们的假设是错误的。即3 ^(n-1)不是O(2 ^ n)。

(3)这是不正确的。 f(n)= 1和g(n)= n是一个简单的反例。在这种情况下,f(n)+ g(n)= 1 + n,但O(f(g(n))= O(f(n))= O(1)。

(4)这是正确的。将2 ^(n + 1)重写为2 * 2 ^ n,很明显,通过选择c> 2,对于n> = 1成立。