计算以下函数的时间复杂度

时间:2015-07-08 08:45:33

标签: time-complexity big-o

如何计算以下函数的时间复杂度?

int Compute (int n)
{
   int j = 0;
   int i = 0;
   while (i<=n)
   {
       i = 2*j + i + 1;
       j++;
   }
   return j-1;
}

现在,我知道循环具有O(n)时间复杂度,但在这种情况下i以更快的速度增长。通过迭代进行迭代,我发现,对于每个第m次迭代i = m^2。但我仍然对如何计算Big-O感到困惑。

1 个答案:

答案 0 :(得分:3)

如果你看几次迭代的i和j的值:

i=1
j=1

i=4
j=2

i=9
j=3

i=16
j=4

等等。通过数学归纳,我们可以证明我取方形值:( 2*n + n^2 + 1 = (n+1)^2 )

因为我们只在i&lt; = n时循环,并且因为我接受了数值1,2 ^ 2,3 ^ 2,...,k ^ 2&lt; = n,这意味着我们在i = k时停止超过sqrt(n)。因此,复杂性似乎是O(k),这意味着O(sqrt(n))。