【发布时间】:2016-02-13 11:41:15
【问题描述】:
我很难弄清楚如何计算某些代码的时间复杂度。我知道 Big O 的基础知识,虽然我不能完全理解一般的计算方法。
这是一个我无法解决的例子。希望你能:
void f(int n) {
int j, s;
for (j = 0, s = 1; s < n; j++, s*=2)
printf(“!”);
double values[j];
for (int k = 0; k < j; k++)
values[k] = 0;
while (j--)
for (int k = 1; k < j; k++)
values[k] += 1.0 / k;
}
运行时间是多少?我想要一个解释:)
【问题讨论】:
-
什么是运行时或大 O 复杂度?
-
@juanchopanza 哦,不知道这是两个不同的东西。比如,O(logn) 或 O(n^2) 以及这种计算,如果它对你有任何意义的话。很抱歉造成混乱。
-
一个好的开始可能是格式化代码,使其更具可读性。在 C 中,空格并不重要(在字符串和字符文字之外),所以缩进之类的东西对编译器来说并不重要。不过,这对人类非常很重要。
-
@JoachimPileborg 我的错 :) 已修复。
-
如果您不了解大复杂性和运行时之间的区别,我怀疑有人能给出对您有意义的答案。程序执行时间受很多因素影响,包括算法复杂度。所以我投票关闭线程。
标签: c runtime big-o time-complexity