Math 查找语句的运行次数

Math 查找语句的运行次数,math,analysis,Math,Analysis,我被告知要计算语句foo在以下程序中运行的次数。我们假设n是一个偶数 j = 1; while( j <= n/2 ) { i = 1; while( i <= j ) { foo; i++; } j++; } j=1; 而(j外循环运行N/2次(j从1增加到N/2)是正确的。内循环运行j次,因此foo运行的次数随着j的每次增量值的变化而变化。如果计算运行次数,则每个“行”作为一个外部lopo跑,最终结果看起来像一个三角形(或保龄球销,如果中

我被告知要计算语句
foo
在以下程序中运行的次数。我们假设
n
是一个偶数

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

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

下一步是将结果写为
N

的函数,因为我们可以看到j的增量为1到N/2,而对于每次迭代,while内部循环运行j次,i的增量为1到1-j

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

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

对于第二个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)=Θ(n2)

好了,
j
已经设置好了,所以你的结果应该是
n
的函数。对不同的n值进行处理(从2开始)提示:你打过保龄球吗?好的,我试着从2开始遍历它。当
n=2
时,这意味着语句
j让我试试偶数
4
。因此
n=4
,然后循环检查
j仍然是
true
foo
wil第三次运行。在此之后,两个循环都将终止。同样的模式是
foo
运行的次数是
n-1
?因此如果
n=8
,那么j将等于
1、2、3和4
,这意味着
foo
将运行
10次。对于
n=10
foo
将运行
15次,等等。我想我看到了一个模式。
foo
将运行多少次,不管它运行了多少次,加上
n
的一半。因此,例如,
n=8
。foo之前的运行量是
n=6
这是
6次运行
所以
6次运行
+8次运行的一半是
4
这是什么总计
10
。对于
n=10
,有
10
以前的运行,而当前
n
的一半是
5
,所以
foo
运行了15次。我只是很难将其作为
n
的函数来编写。因此,每次我们添加
n/2
,也就是说,当
n=2
添加时
1
run,当
n=4
我们添加
2
运行时,当
n=6
我们添加
3
运行时,等等。我完全被难住了。我已经看了好几个小时,无法想出一些关于
n
的东西。你能给我解释一下吗?
N=2

 j
---
 1  .   = one run

N=4

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

N=6

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