Answers:
因此,让我澄清一些事情,您对big-O表示法感兴趣-这意味着上限。换句话说,可以计算比实际更多的步骤。特别是,您可以将算法修改为
...
for (j = 0; j < n; j++)
...
因此,您有两个嵌套循环,每个循环运行次,这为您提供了的上限
当然,您希望对上限有一个很好的估计。因此,为了完成,我们要确定一个下限。这意味着可以减少步骤数。所以考虑修改
for (i = n/2; i < n; i++)
for (j = 0; j < n/2; j++)
sum++;
在这里,我们仅执行一些循环迭代。同样,我们有两个嵌套循环,但是这次每个循环有次迭代,这表明我们至少有加法。在这种情况下,我们用表示此渐近下界。由于上下限是重合的,我们甚至可以说是一个紧密的渐近界,我们可以写。
如果您想了解更多,请在这里阅读。
sum = 0;
for (i = 0; i < n; i++)
for (j = 0; j < i; j++)
sum++;
让我们追溯一下:
0<0 == false
)。因此,此算法将增加sum
以下次数:
通过检查我们可以看到,总和是一个“三角数”。将分布到分子的其余部分,我们得出,其中增长最快的项是因此Bachman-Landau Big-Theta的复杂度是。n 2 − n Ñ2θ(Ñ2)≡Ô(Ñ2)一个ÑdΩ(Ñ2)
让我们看看我能否解释一下...
所以如果内循环是j
现在,对于第一次迭代,您将通过内部循环执行n-(n-1)次。第二次,您通过内循环执行n-(n-2)次。在第N次,您要进行n-(nn)次,即n次。
如果平均通过内循环的次数,则将为n / 2次。
所以你可以说这是O(n * n / 2)= O(n ^ 2/2)= O(n ^ 2)
那有意义吗?