Algorithm 根据给定的算法计算Big-O

Algorithm 根据给定的算法计算Big-O,algorithm,big-o,Algorithm,Big O,我目前正在准备考试,其中一个问题是根据给定的算法计算big-o。去年的一个问题是: 算法: void func2(const int n) { for (int i = 1; i <= n; i++) compute(i); } 谁能向我解释一下他们是如何得到这个解决方案的?既然我们知道compute(n)的复杂性是O(n),我们就可以在不丧失一般性的前提下,在假设compute(n)=n的前提下分析func2(n)的复杂性,即 T_func2(n) ∝ sum_{i

我目前正在准备考试,其中一个问题是根据给定的算法计算big-o。去年的一个问题是:


算法:

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

谁能向我解释一下他们是如何得到这个解决方案的?

既然我们知道
compute(n)
的复杂性是
O(n)
,我们就可以在不丧失一般性的前提下,在假设
compute(n)=n的前提下分析
func2(n)
的复杂性,即

T_func2(n) ∝ sum_{i = 1 to n} compute(i) 
           = sum_{i = 1 to n} i
           = n(n+1)/2 
我们在最后一步中使用的位置


现在,我们可以说
T\u func2∈ O(n(n+1)/2)
(我将假定
n(n-1)
代表您是一个打字错误),但这只是
O(n^2)
,我不知道它们是如何得出确切的表达式的,但显然行为是
O(n^2)
,较小的术语并不重要。谢谢您的解释!这真的帮助了我。但我没有在解决方案上打错字。也许是我的教授干的it@whileFalse很乐意帮忙。上述总和的精确值对我们来说并不具有任何实际价值,因为我们正在分析复杂性并在一个假设(
compute(n)=n
)下工作,该假设只适用于
func2
(而不是
func2
的实际迭代计数)的w.r.t.复杂性分析(还请注意,如果循环中使用严格不等式,
i
,则上述总和将等于
n(n-1)/2
,这可能解释了差异)
T_func2(n) ∈ O(n/2(n-1))
T_func2(n) ∝ sum_{i = 1 to n} compute(i) 
           = sum_{i = 1 to n} i
           = n(n+1)/2