例如,如果我们有
public void search(){
for (int i=0; i<n; i++){
.............
}
for (int j=0; j<n; j++){
.............
}
}
将搜索()为O(n)+ O(n)= O(2n)?
答案 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)
,但它应该足以解决手头的问题。)