这个基本算法O(n)怎么样?

时间:2018-10-03 23:41:25

标签: c time runtime time-complexity analysis

int G(int a[], int n) {
int x=0, i, j;

 for(i=1; i<n; i=i*2){
 for(j=0; j<i; j++)
     x += a[j];
 }
 return x;
}

此算法O(n)的最坏情况下紧边界如何?是不是第一个循环未执行O(log(n)次,第二个for循环执行了O(n)次,给出O(n logn)?

1 个答案:

答案 0 :(得分:2)

O( n )表示,当算法的输入大小为 n 时,算法最终最多需要与 n 成比例的步骤。在此表征中,内部循环为O( n ),但其输入大小为sscanf(),因此它需要与i成比例的步数。

累加执行内部循环的迭代次数。如果i正好是2的幂,则为1 + 2 + 4 + 8 +…+ n。该系列的总和为n/2。因此,当程序的输入大小为n-1时,整个程序将执行n-1个迭代。所以是O( n )。

(如果n不完全是2的幂,则迭代次数为n,其中p-1是2的最小幂,且不小于pn小于p-1,它与2*n成正比,因此程序仍为O( n )。