从给定算法计算Big-O

时间:2016-07-05 11:34:01

标签: algorithm big-o

我目前正在为我的考试而学习,其中一个问题是从给定的算法中计算大o。去年的一个问题是:

T_compute(n) ∈ O(n)

算法:

void func2(const int n) {
   for (int i = 1; i <= n; i++)
      compute(i);
}

func2的时间复杂度是多少? T_func2(n)∈

现在解决方案说时间复杂度

T_func2(n) ∈ O(n/2(n-1))

有人可以向我解释他们是如何得到这个解决方案的吗?

1 个答案:

答案 0 :(得分:5)

由于我们知道compute(n)的复杂性为O(n),因此我们可以在不失一般性的情况下,在func2(n)的假设下分析compute(n) = n的复杂性,即

T_func2(n) ∝ sum_{i = 1 to n} compute(i) 
           = sum_{i = 1 to n} i
           = n(n+1)/2 

在最后一步中,我们使用了this summation rule

现在,我们可以说T_func2 ∈ O(n(n+1)/2)(我会假设n(n-1)代表您的拼写错误),但这只是O(n^2)