【发布时间】:2021-03-04 10:49:41
【问题描述】:
education.io 认为下面的代码具有复杂度 log2(n!) 因为var 每增加一个 n 值。
但是,我和我的同事认为,因为 var 始终是 < n,所以它不可能是 log2(n!),因为它永远不会比 while 循环刚刚跑掉 @987654324 花费更多的时间@。如果在 while 谓词中使用 n,则时间复杂度为 n*log2(n)。
public static void main(String[] args) {
int n = 10;
for (int var = 0; var < n; var++) {
int j = 1;
while(j < var) {
j *= 2;
}
}
}
【问题讨论】:
-
它是 log2(n!)。您是否忘记了日志部分,并且可能认为它被报告为 n!?