【发布时间】:2021-06-09 10:18:28
【问题描述】:
以下循环的时间复杂度是多少?
for (int i = 2; i < n; i = i * i) {
++a;
}
在练习运行时复杂性时,我遇到了这段代码,但找不到答案。我以为这会是sqrt(n),虽然它看起来不正确,因为循环的序列是2, 4, 16, 256, ...。
【问题讨论】:
-
fwiw,你已经准备好测量循环的复杂性了。为
n选择不同的值,看看n和a的最终值是什么关系 -
a的值(i的值的数量)与n的值对估计复杂性很重要,而不是i的实际值。 -
(实际上这在任何传统架构上最多只能执行 5 次,所以一个明智的答案也是
O(1)。Big-O 仅在有合理意义的情况下才真正重要可以超过常数因子。)
标签: c++ algorithm performance runtime