在执行n的循环中执行O(n)的大分析!时

时间:2013-12-05 03:35:41

标签: algorithm loops big-o time-complexity

我正在尝试确定以下时间的复杂性:

while loop that executes n! times {

     perform an operation that is O(n)

  }

大分析仍然是O(n!)吗?我看不出它会是怎样的O(n^n)。任何见解将不胜感激。

编辑:是的,我知道这是非常低效的

5 个答案:

答案 0 :(得分:3)

如果你真的想要一个等价物,那么你的解决方案就是:

O(n^(n+3/2) / e^n)

这来自Stirling's approximation,其中指出n! = O(n^(n+1/2)/e^n)

答案 1 :(得分:1)

以代数方式思考,如何乘以n * n!永远都会给你n ^ n,它不会.. n!做n工作的迭代只是n * n!

答案 2 :(得分:0)

你正在为n工作!倍。它只是O(n * n!)。

答案 3 :(得分:0)

不是O(n^n)。它的复杂性是O(n*n!)

您可以通过计算n

的不同值来轻松跟踪此情况
  

当n = 1时,内部操作执行1次
  当n = 2时,内部操作执行2次   当n = 3时,内部操作执行6次   当n = 4时,内部操作执行24次

答案 4 :(得分:0)

我认为您必须了解big-O符号的含义:

f(x) = O(g(x))如果存在整数Nc,则为n >= Nf(x) <= c g(x)

您不能说您的代码是O(n!),因为对于任何n*n!而言,n对于c n!来说总是大于c

证明:假设存在整数c, N,这样n >= N, d*n*n! < c*n! => d*n < c for n >= N就是一个矛盾。