【发布时间】:2018-12-12 05:34:42
【问题描述】:
我只是没明白,为什么时间复杂度是 O(n^2) 而不是 O(n*logn)? 第二个循环每次递增 2 所以不是 O(logn) 吗?
void f3(int n){
int i,j,s=100;
int* ar = (int*)malloc(s*sizeof(int));
for(i=0; i<n; i++){
s=0;
for(j=0; j<n; j+=2){
s+=j;
printf("%d\n", s);
}
free(ar);
}
【问题讨论】:
-
如果您在每次迭代中乘以 2,则为 O(n log n)。也许这就是你混淆它的原因?
-
@PatrickRoberts 不,我知道区别
-
O-notation 忽略常数乘数。 N*N/2 仍然是 O(N*N)。 N*N/1000 仍然是 O(N*N)。如果内部循环只运行 (log(N)) 次,你只会得到 N*log(N) ;例如,如果它在 N 为 100 时运行两次,在 N 为 1000 时运行 3 次,依此类推。
标签: c loops time-complexity big-o complexity-theory