我想弄清楚以下2种算法的大O符号,但我遇到了麻烦。计算这些算法的大O复杂度?
第一个是:
public static int fragment3 (int n){
int sum = 0;
for (int i = 1; i <= n*n; i *= 4)
for (int j = 0; j < i*i; j++)
sum++;
return sum;
} //end fragment 3
答案应该是O(n^4)
。当我尝试自己做这件事时,我得到: 我看着第一个循环,并认为它运行n^2
登录次。然后对于内循环,它运行n次+外循环的运行时间为n^3 logn
次。我知道这是错误的,但不明白。
对于下面的代码片段,答案是O(n^9)
。
public static int fragment6(int n) {
int sum = 0;
for(int i=0; i < n*n*n; i++) {
if(i%100 == 0) {
for(int j=0; j < i*i; j += 10)
sum++;
} // if
else {
for(int k=0; k <= i; k++)
sum++;
} // else
} // outer loop
return sum;
} // fragment 6
当我尝试它,我得到:n^3
对于外部for循环。对于if语句,我得到n
,对于第二个循环,我得到n +
另一个for循环和if语句,使其成为n^5
。最后,我得到n为最后的循环,一切都加起来O(n^6)
。
我在做什么错,什么是正确的方法来获得其复杂性?