这个代码是O(n)还是O(logn)?

时间:2014-03-19 15:22:44

标签: java big-o

它只检查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;

4 个答案:

答案 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)(以单位复杂度衡量)。