计算方法的Big-O

时间:2016-09-26 17:02:49

标签: java analytics

我正在努力弄清楚这个算法的O(g(n))

int a = 1;
for (int i = 0; i< n*n; i++) {
    for (int j = 0; j <= i; j++) {
        if (a <= j) {
            a = i;
        }
    }
}

2 个答案:

答案 0 :(得分:3)

当你有这样的循环嵌套时,从内到外工作通常很有帮助。请注意,例如,最里面的循环运行Θ(i)次。所以,从某种意义上说,问题归结为确定这个循环所做的工作:

for (int i = 0; i < n * n; i++) {
    do Theta(i) units of work
}

这里完成的工作与

成正比
  

0 + 1 + 2 + ... + n 2 - 1

我们可以使用Gauss's sum

来简化此操作
  

0 + 1 + 2 + ... + n 2 - 1 = n 2 (n 2 - 1)/ 2 < / p>

这个最终表达式是Θ(n 4 ),因为它是两个二次项的乘积。因此,总的来说,完成的工作是Θ(n 4 )。

答案 1 :(得分:0)

int a = 1;
for (int i = 0; i< n*n; i++) { //Complexity n*n
    for (int j = 0; j <= i; j++) { //Complexty n*n 
        if (a <= j) {
            a = i;
        }
    }
}

O(n)=(n * n)*(n * n)= n ^ 4粗略