我给出了一个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
次吗?任何帮助将不胜感激。
答案 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。