计算代码的时间复杂度

时间:2017-09-24 16:50:51

标签: algorithm

有人可以帮助我分析下面给出的伪代码的运行时间

for i = 1 to n
     k[i] = 0

for i = 1 to n
   for j = i to n
           k[i] = k[i] +j

我猜它的时间复杂度是O(n ^ 2)。如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:0)

for循环由三个元素组成。赋值1.条件分支。和增量操作。如果可以量化每一行的执行时间,则可以计算执行的总时间。例如,调用k[i] = 0操作 a k[i] = k[i] +j。操作 b 。 for循环分配操作 c 。 for循环增量和条件分支操作 d

这会产生: (对于i = 1到n),求和(n - i)*(b + d)+(2 + n) c + n a。

我认为这会简化为 对于非常大的n值,〜(b + d)*(n ^ 2)/ 2。所以我同意它的复杂性是O(n ^ 2)。

答案 1 :(得分:0)

分析这些嵌套循环的复杂性的方法来自最深的循环。

for i = 1 to n
 k[i] = 0

for i = 1 to n
   for j = i to n
       k[i] = k[i] +j

对于第一个循环,很容易看到操作k [i] = 0将执行n次

所以它的顺序是O(N)

现在对于嵌套循环,j的循环从i开始,其中i从1循环到n并继续到n。

这是关键问题,询问循环执行的次数。

当i = 1时,它将执行N次 当i = 2时,它将执行N-1次 ... 当i = 1时,它将执行1次

所以如果你把它们全部相加就变成N + N-1 + ...... 1 = N(N-1)/ 2 = N ^ 2/2 - N / 2

所以嵌套循环的顺序是O(N ^ 2/2) - O(N / 2)= O(N ^ 2)

对于第一个循环,顺序是O(N)

所以总时间复杂度id O(N)+ O(N ^ 2)= O(N ^ 2)