计算算法的T(n)时间复杂度

时间:2011-10-28 17:02:18

标签: performance algorithm time complexity-theory

我正在寻找一些澄清算法的时间效率,特别是T(n)。下面的算法并不尽可能高效,尽管这是我相信的一个很好的例子。我希望逐行确认代码中的操作总和:

伪代码

 1.  Input: array X of size n
 2.  Let A = an empty array of size n
 3.  For i = 0 to n-1
 4.      Let s = x[0]
 5.      For j = 0 to i
 6.          Let sum = sum + x[j]
 7.      End For
 8.      Let A[i] = sum / (i+1)
 9.  End For
 10. Output: Array A

我尝试计算T(n)

 1.  1
 2.  n
 3.  n
 4.  n(2)
 5.  n(n-1)
 6.  n(5n)
 7.  -
 8.  n(6)
 9.  -
 10. 1

 T(n) = 1 + n + n + 2n + n^2 - n + 5n^2 + 6n + 1
      = 6n^2 + 9n + 2 

所以, T(n)= 6n ^ 2 + 9n + 2 是我得到的,由此我得出O(n ^ 2)的Big-O。 如果我在计算中做了什么错误......

编辑:...计算基本操作以导出T(n)?

2 个答案:

答案 0 :(得分:2)

您的结果O(n ^ 2)是正确的,由两个嵌套循环给出。我更喜欢像

这样的派生
0 + 1 + 2 +  + (n-1) = (n-1)n/2 = O(n^2)

从观察嵌套循环开始。

答案 1 :(得分:0)

我不太确定你的方法,但是O(n ^ 2)看起来确实是正确的。在第一个循环的每次迭代中,您都会执行前一个元素的子循环。因此,你第一次看到2,然后是第二次,然后是3 ......然后是最后一次。这相当于从1到n的总和,它给出了n ^ 2的复杂性。