查看代码后:
for(i=n-1; i>=0; i-=2)
for(j=15; j<100; j+=3)
sum +=i+j
我要说的是,用Theta符号表示的运行时间为Θ(n ^ 2),因为有两个循环和const(i和j)。这是正确的吗?
答案 0 :(得分:0)
我将插入另一个插头,以适应
的那个旧渐近准则。“如有疑问,请由内而外!”
让我们再来看一下该代码:
for(i=n-1; i>=0; i-=2)
for(j=15; j<100; j+=3)
sum +=i+j;
让我们从最里面的语句开始,该语句添加到变量sum中。该语句的运行时与此处的任何其他变量无关,因此Θ(1)起作用。因此,让我们这样重写代码:
for(i=n-1; i>=0; i-=2)
for(j=15; j<100; j+=3)
do Theta(1) work
现在,让我们来看一下内部的for循环。请注意,无论其他变量的值如何,此循环始终运行完全相同的次数(大约30ish)。这意味着该循环运行固定的次数,并完成固定的工作量,因此该循环的最终效果是完成Θ(1)的工作。显示在这里:
for(i=n-1; i>=0; i-=2)
do Theta(1) work
所以现在我们离开了这个最后的循环。在这里,我们看到完成的工作直接且线性地取决于n。具体来说,此循环执行Θ(n)次迭代,并且每次迭代都进行Θ(1)工作,因此完成的总工作量为Θ(n)。
请注意,不是由for循环的 number 决定运行时,而是这些循环的作用。计算循环数是获取循环的好方法粗略估计运行时,但是我上面说明的从内到外工作的方法更加精确。