计算循环次数(Big O)

时间:2015-10-21 00:00:10

标签: java algorithm loops big-o pseudocode

我给出了一个pseodocode声明:

function testFunc(B)
  for j=1 to B.length-1
     for i=1 to B.length-j
       if(B[i-1] > B[i]
         swap B[i-1] and B[i]

我告诉我这个算法在Big o O(n^2) time运行。

所以我知道第一个for循环运行n次,因为我相信它是包容性的。我不确定其余的线路,第二个for循环会运行n-2次吗?任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

内循环次数减少。看一个具体的例子。如果B.length为10,则内循环的内容将执行10次,然后执行9次,依此类推,直至1次。

使用Gauss'方程式:

n(n + 1)/ 2

您可以看到内部代码在该示例中将执行55次。 (10(10 + 1)/ 2 = 55)

因此,经过n次,它将运行n(n + 1)/ 2次。这相当于:

1/2 n ^ 2 + 1/2 n

就Big-Oh而言,n的系数和较小的值被忽略,因此这相当于O(n ^ 2)。

答案 1 :(得分:1)

如果N = B.length,则外循环运行N-1次,内循环运行(N-1)+...+3+2+1次,总共(N-1) * (N/2) = N^2/2 - N/2次,这意味着O(n^2)

答案 2 :(得分:1)

让我们说<form action="Account/ResetPassword/###" ... > 是5次。因此外环将运行4次。在通过外循环的第一次迭代中,内循环将运行4次;在第二次迭代中,内循环将运行3次;第三次迭代2次;第四次是1次。

让我们以几何形式列出结果:

B.length

每个A表示进入嵌套循环内的条件/交换,并且您通常想知道有多少个A。 计算它们的一种简单方法是将三角形形状加倍以生成矩形:

AAAA
AAA
AA
A

你可以很快看到,对于边长为N的三角形,有AAAAB AAABB AABBB ABBBB A&#39; s因为它们是N*(N-1)/2矩形的一半,由A&#39;组成。秒。执行乘法,并忽略1/2的比例因子(因为大O不关心常数),我们看到有O(N ^ 2)A&#39; s。