两个复杂度O((2n + 1)!)和O(n!)是否相等?

时间:2013-08-04 15:59:52

标签: algorithm complexity-theory big-o

这可能是一个天真的问题,但我对Big-O符号和复杂性的概念不熟悉,也找不到任何答案。我正在处理一个算法(2n + 1)的问题!时间检查一个条件。我可以说问题的复杂性是O(n!)还是复杂度是O((2n + 1)!)?

4 个答案:

答案 0 :(得分:6)

使用Stirling's approximation

n! ~ (n / e)^n * sqrt(2 * pi * n)

然后

(2n + 1)! ~ ((2n + 1) / e)^(2n + 1) * sqrt(2 * pi * (2n + 1))
          >= (2n / e)^(2n) * sqrt(2 * pi * 2n)
          = 2^2n * (n / e)^(2n) * sqrt(2) * sqrt(2 * pi * n)
          = sqrt(2) * (2^n)^2 * ((n / e)^n)^2 * sqrt(2 * pi * n)              

现在非常清楚为什么O((2n + 1)!)没有O(n!)的希望:指数因素更糟糕。这更像是O((2n + 1)!) O((n!)^2)

答案 1 :(得分:3)

设(N,c)是任何有序的正常数对。令n为任何整数,使得n> N且n> c。

然后(2n + 1)! > (2N + 1)* N! > CN!

因此,对于任何一对正常数(N,c),存在n> N,使得(2n + 1)! > cn!,所以(2n + 1)!不是O(n!)。

O((2n + 1)!)包含一个函数,(2n + 1)!,不在O(n!)中,所以O((2n + 1)!)和O(n!)是不一样。

(我同意想要LaTeX。)

答案 2 :(得分:2)

以下是定义:https://en.wikipedia.org/wiki/Big_O_notation。所以我们需要检查是否存在常数c和n0,以便:

(2n+1)! < cn! for n > n0

直观地,从观察如何(2n + 1)!和n!行为:

http://www.wolframalpha.com/input/?i=n!+%3E%282n+%2B1%29!

(2N + 1)!只是快了两倍,所以不管“c”它总是会达到n!。所以你不能简化到n!。

答案 3 :(得分:0)

  

(2N + 1)! = n!(n + 1)...(2n + 1)

     

O((2n + 1)!)= O(n!)O((n + 1)...(2n + 1))

==&GT;

  

O(1)= o((n + 1)...(2n + 1))

     

O(n!)= o((2n + 1)!)