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
对于内部whilefoo
的每次迭代运行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