我如何推断各种功能的大O?

时间:2015-05-06 13:01:03

标签: algorithm time-complexity complexity-theory

考虑以下功能:

f(n)   = 2^n
g(n)   = n!
h(n)   = n^logn

关于f(n),g(n)和h(n)的渐近行为的下列陈述中哪一项是正确的?

(A) f(n) = O(g(n)); g(n) = O(h(n))
(B) f(n) = \Omega(g(n)); g(n) = O(h(n))
(C) g(n) = O(f(n)); h(n) = O(f(n))
(D) h(n) = O(f(n)); g(n) = \Omega(f(n))

我已经知道了这个

  

根据生长顺序:h(n)< f(n)&lt; g(n)

     

(g(n)渐近大于f(n)且f(n)渐近大于h(n))

通过记录给定的3个函数

,我们可以很容易地看到上面的顺序
lognlogn < n < log(n!)  (logs of the given f(n), g(n) and h(n)).

请注意log(n!)= \ theta(nlogn)

但是如何找出正确的选项?

1 个答案:

答案 0 :(得分:1)

从微积分中很容易看出,如果

lim {n -> inf} a(n) / b(n) < inf

然后

a(n) = O(b(n))

另请注意,此处的所有功能都会转到无穷大,因此我们可以使用L'Hôpital's rule

最后,请注意,渐近地,Stirling's Approximation给出了

lim {n -> inf} n! / (sqrt(2 pi n) (n / e)^n) = 1

如果你将这三件事结合起来,你可以看到:

lim {n -> inf} 2^n / n! = lim {n -> inf} 2^n / (sqrt(2 pi n) (n / e)^n) = 0

lim {n -> inf} n^{log(n)} / 2^n = < inf

所以D是正确的。