它只检查for循环1 / 3n次,所以它仍然在技术上是线性的吗?但是我真的不明白为什么它不会是O(logn),因为很多时候运行时间为O(logn)的代码最终会检查1 / 3n左右。 O(logn)是否总是每次将选项除以2?
int a = 0;
for (int i = 0; i < n; i = i+3)
a = a+i;
答案 0 :(得分:2)
通过时间复杂度分析,恒定因素无关紧要。你可以在每个循环中执行1,000,000次操作,它仍然是O(n)。因为常数1/3并不重要,它仍然是O(n)。如果n
为1,000,000,则n
的1/3会比log n
大得多。
来自Wikipedia entry on Big-O notation:
设k为常数。然后:
O(kg) = O(g) if k is nonzero.
答案 1 :(得分:2)
您的代码具有复杂度O(n),O(n)/3 == a * O(n) == O(n)
答案 2 :(得分:1)
这是n O(n)
而不是O(logn)
的顺序。
这是因为运行时间随着n
有关详细信息,请查看此图表,希望您能理解为什么它不会登录 https://www.cs.auckland.ac.nz/software/AlgAnim/fig/log_graph.gif
答案 3 :(得分:1)
运行时间为O(n)
(以单位复杂度衡量)。