我被告知要弄清楚语句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
运行的次数,它会是j
次n/2
,不是吗?那么foo
运行j * (n / 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 )