我正在努力弄清楚这个算法的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;
}
}
}
答案 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粗略