什么是此算法的复杂性(BigO)?

时间:2016-01-28 01:36:28

标签: big-o time-complexity

enter image description here

我对Big-O的东西相当新,我想知道算法的复杂程度。

据我所知,每次添加,if语句和变量初始化都是O(1)。

根据我的理解,首先'i'循环将运行'n'次,第二'j'循环将运行'n ^ 2'次。现在,第三个'k'循环是我遇到问题的地方。

是否正在运行'(n ^ 3)/ 2'次,因为'j'的平均值将是'n'的一半?

这是否意味着Big-O是O((n ^ 3)/ 2)?

1 个答案:

答案 0 :(得分:1)

我们可以使用Sigma表示法计算您算法的最内层基本操作的迭代次数,我们将sum = sum + A[k]视为基本操作。

Sigma not.

现在,我们如何推断T(n)O(n^3)的最后一步中,你问?

让我们松散地定义Big-O表示法的含义:

  

f(n) = O(g(n))表示c · g(n)f(n)上的上限。从而   存在一些常量cf(n)总是≤ c · g(n),   适用于足够大的n (即某些常量n ≥ n0n0)。

即,我们希望找到一些(非唯一)正常量cn0的集合,以便以下成立

 |f(n)| ≤ c · |g(n)|, for some constant c>0                   (+)
                      for n sufficiently large (say, n>n0)
某个函数g(n)

,它会显示f(n)位于O(g(n))

现在,在我们的案例中,f(n) = T(n) = (n^3 - n^2) / 2,我们有:

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                                           (++)

现在(++)(+)完全相同c=1(并选择n0,例如1n>n0=1),因此,我们已经证明f(n) = T(n)位于O(n^3)

从上面的某种形式推导中可以明显看出,函数g(n)中的任何常量都可以被提取并包含在c中的常量(+)中,因此你&#39 ;永远(至少不应该)看到时间复杂性被描述为例如O((n^3)/2)。当使用Big-O表示法时,我们将描述算法的渐近行为的上界,因此只有主导词是有意义的(但不是如何用常数缩放)。