What is the Complexity (BigO) of this Algorithm?
我对Big-O知识还很陌生,我想知道算法的复杂性是什么。
我了解,如果语句和变量初始化为O(1),则每次添加。
根据我的理解,第一个" i"循环将运行" n"次,第二个" j"循环将运行" n ^ 2"次。 现在,第三个" k"循环是我遇到问题的地方。
因为'j'的平均值是'n'的一半,它运行'(n ^ 3)/ 2'次吗?
这是否意味着Big-O为O((n ^ 3)/ 2)?
我们可以使用Sigma表示法来计算算法最内层基本操作的迭代次数,其中我们将
现在,您问如何在最后一步中推断
让我们宽松地定义Big-O表示法的含义:
f(n) = O(g(n)) meansc · g(n) is an upper bound onf(n) . Thus
there exists some constantc such thatf(n) is always≤ c · g(n) ,
for sufficiently largen (i.e. ,n ≥ n0 for some constantn0 ).
即,我们想找到一些(非唯一的)正常数
1 2 | |f(n)| ≤ c · |g(n)|, for some constant c>0 (+) for n sufficiently large (say, n>n0) |
对于某些功能
现在,在我们的例子中,
1 2 3 4 5 | f(n) = 0.5·n^3 - 0.5·n^2 { n > 0 } => f(n) = 0.5·n^3 - 0.5·n^2 ≤ 0.5·n^3 ≤ n^3 => f(n) ≤ 1·n^3 (++) |
现在
从上面的形式化推导中可以明显看出,函数