我目前正在为我的考试而学习,其中一个问题是从给定的算法中计算大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))
有人可以向我解释他们是如何得到这个解决方案的吗?
答案 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)
。