我一直在寻找如何计算算法复杂度的时间..尽管有一些很好的解释,但我似乎并不确切地了解它是如何工作的..所以我想也许在这个例子中,有人可以为我澄清
void test(int n){
for ( int i = 1; i <= n; i++, n=n/2)
for(int j = 1; j <= n; j++)
..O(1)..
}
答案 0 :(得分:0)
第一次运行外部循环,内部循环将运行n次。
第二次外部循环运行时,内部循环将运行n / 2次。
第三次外循环运行,内循环将运行n / 4次。
外循环第四次运行,内循环将运行n / 8次。
。 。 。
外循环最后一次运行,内循环将运行1次。
对系列求和时得到
n + n / 2 + n / 4 + n / 8 + ... = 2n
内部循环的主体总共执行2n次,因此算法的复杂度为O(n)。