查找语句运行的次数

时间:2016-02-01 21:45:16

标签: math analysis

我被告知要弄清楚语句foo在以下程序中运行的次数。我们假设n是偶数。

j = 1;
while( j <= n/2 ) 
{
  i = 1;
  while( i <= j ) 
  {
    foo;
    i++;
  }
  j++;
}

我认为最好的方法是从内循环开始,然后向外工作。我们知道i = 1并且在内循环内部我们有i <= j。这意味着这个内循环运行j次。 (这是我开始感到困惑的地方)在外部循环中,我们看到语句j <= n/2,这意味着这个外部循环运行n/2次,对吧?要计算foo运行的次数,它会是jn/2,不是吗?那么foo运行j * (n / 2)次?这是对的吗?

2 个答案:

答案 0 :(得分:0)

外部循环运行N/2次(j从1增加到n / 2)是正确的。 内部循环运行j次,因此foo运行的次数随每个增量值j而变化。如果计算运行次数,每个&#34;行&#34;作为一个外部的lopo跑,最终结果看起来像一个三角形(如果中心对齐,则为保龄球):

N=2

 j
---
 1  .   = one run

N=4

 j
---
 1  .   
 2  ..  = three runs

N=6

 j
---
 1 .
 2 ..
 3 ...  = 6 runs

下一步是将结果写为N的函数。

答案 1 :(得分:0)

我们可以看到 j 递增1到n / 2,而对于每次迭代,当循环运行 j 次时,递增 i 1到1 j

对于内部的每次迭代,foo运行1次。

对于第一次迭代,第一次迭代 j = 1,foo运行一次..

对于第二个 j = 2,foo运行2次...... 对于n / 2次迭代 j = n / 2,foo运行n / 2次..

所以foo总共运行了

1 + 2 + 3 + ... + n / 2 次,即n / 2 *((n / 2 +1))/ 2 = n / 4 *(n / 2 +1)=Θ(n 2