【发布时间】:2018-03-12 00:56:31
【问题描述】:
为什么这个函数的时间复杂度是 T(n) = O(n) 而不是 T(n) = O(n*log(n))?我认为这个问题的答案在于第一个循环。第一个循环的时间复杂度不是log(n)吗?
void f(int n) {
for( ; n>0; n/=2 ){
int i;
for (i=0; i<n; i++)
printf("Hey");
}
}
【问题讨论】:
-
错误在于天真地将两个循环的各个复杂性相乘——请注意,
n在每次执行外循环后都会发生变化。提示:几何系列. -
好吧,如果你把无穷级数 n + n/2 + n/4 + n/8 ... 相加,你会得到 2n。
标签: c for-loop time-complexity complexity-theory asymptotic-complexity