我获得了一段代码并告诉他们进行分析。我感到很困惑。我需要计算foo
运行多少次并使用它来确定n
的函数。我知道foo
运行了多少次,但我无法确定正确的功能。这是代码:
j = 1;
while( j <= n/2 )
{
i = 1;
while( i <= j )
{
foo;
i++;
}
j++;
}
我知道foo
以一种模式运行,其中n
的一半被添加到运行中。例如,当n = 2
,foo
运行1
时,n = 4
时,foo
运行3
次,n = 6
时,foo
运行6
次,等等。
n = 2 runs -> j = 1 * 1 run
n = 4 runs -> j = 1 *
j = 2 * * 3 runs
n = 6 runs -> j = 1 *
j = 2 * *
j = 3 * * * 6 runs
n = 8 runs -> j = 1 *
j = 2 * *
j = 3 * * *
j = 4 * * * * 10 runs
也许我只是在考虑这个问题,但我一直在盯着我的笔记本几个小时试图按照这种行为只提出n
的某些功能。有人可以帮忙吗?
编辑我有另一个问题。我怎么知道这个函数是在Big-O还是Big-Theta?是否与使用while
循环而不是for
循环有关?
答案 0 :(得分:1)
一旦我们意识到大部分工作是由内部while循环完成的,我们可以计算运行时(对于给定的n)作为内部while循环运行的次数:
1+2+3+...n/2
= O(n 2 )。
答案 1 :(得分:1)
j 运行 n / 2 次。对于每次这样的迭代, i 运行 j 次。对于 i 的每次此类迭代,都会调用foo
。所以通话次数是
Σ j = 1 n / 2 [j] =(1 + n / 2)n / 4 =Θ(n 2 < / SUP>)
从1到 n / 2 只是arithmetic series。