【发布时间】:2018-07-03 22:35:26
【问题描述】:
为什么这里的时间复杂度不是 O(n^2) 而是 O(n)?
不是第一个循环是n次吗,&第二个也是一样的,所以变成了O(n*n),这是怎么回事?
void f(int n){
for( ; n>0; n/=2){
int i;
for(i=0; i<n; i++){
printf("hey");
}
}
}
【问题讨论】:
-
因为 1/2 + 1/4 + 1/8 + ... = 1
-
或者,更准确地说,因为 N + N/2 + N/4 + N/8 + … = 2N。
标签: c loops time-complexity big-o complexity-theory