是两个(非嵌套)" for循环"迭代相同大小的n = O(2n)数组

时间:2014-10-09 04:26:30

标签: big-o

例如,如果我们有

public void search(){
 for (int i=0; i<n; i++){
      .............
     }

 for (int j=0; j<n; j++){
        .............
    }
 }

将搜索()为O(n)+ O(n)= O(2n)?

3 个答案:

答案 0 :(得分:2)

是的,时间在n中是线性的,但由于常数因素在O符号中没有意义,你仍然可以写O(n)。即使你从1到n有10个连续的for循环,它仍然是O(n)。常数因素被删除。

编辑(回答您的评论):

如果i,n和k是独立的,是的,它将是O(k + (n-i))。 但是,如果您知道k = O(n),则可以简化它。 (例如k≈n/ 2)。然后您可以将其写为O(n - i)(因为在O(2n - i)中,2被删除了。)

如果i和k都线性地依赖于n,它甚至可能是O(n).

答案 1 :(得分:0)

是的,这是O(2n),相当于说它是O(n),系数无关紧要。

答案 2 :(得分:0)

Big-O表示法表示时间或空间复杂性。它不直接测量时间或空间,它测量元素数量的变化如何影响时间或空间。虽然两个循环肯定比一个循环慢,但它们都完全相同:与n成正比。这就是O(n)的含义。

(这里略有简化,例如,它没有考虑为什么O(n^2 + n) = O(n^2),但它应该足以解决手头的问题。)