循环迭代分析

时间:2012-06-20 02:42:29

标签: algorithm big-o analysis

请参阅下面的解决方案,我想提供一些建设性的反馈。

下面的O(n)中的运行时间是什么。

int a = 0;
int k = n*n*n; //n^3
while(k > 1) 
{
  for (int j=0; j<k; j++) //runs from 0->k
  { a--; }
k = k/2; //divides by 2 each iteration
}

每次for循环运行时,它给出一个常数x k。

= 0xn ^ 3 + 1x(n ^ 3/2)+ 2x(n ^ 3/4)+ ... + nx(n ^ 3/2 ^ n)
= n ^ 3(0 + 1/2 + 2/4 + ... + n / 2 ^ n)&lt; - 任何人都知道如何进一步简化这一点?

编辑:我假设我们会以某种方式使用算术系列....

2 个答案:

答案 0 :(得分:2)

让我们先用k

在第一个while循环中,for循环运行k次

在第二个while循环中,for循环运行k / 2次

在第三个while循环中,for循环运行k / 4次

...

所以它总共运行(k + k / 2 + k / 4 + k / 8 + ... + 1)次

提取k后,它是k *(1 + 1/2 + 1/4 + 1/8 + ... + 1 / k)

随着k增加,括号中的部分变为2,我们可以忽略

将k改为n ^ 3,结果为O(n ^ 3)

答案 1 :(得分:0)

我认为你可以通过下面的以下形式公式来提出增长复杂性的顺序:

enter image description here