关于时间复杂度算法和渐近增长

时间:2015-08-02 08:27:40

标签: algorithm big-o time-complexity asymptotic-complexity

我有关于时间复杂度算法和渐近增长的问题。 问题的伪代码是

1: function NAIVE(x,A)
2:  answer = 0
3:  n= length of A
4:  for I from - to n do
5:    aux = 1
6.    for j from 1 to I do
7:     aux = aux*x
8:    answer = answer + aux * A[I]
9.  return answer 

我必须找到带有O符号的上限和带有Ω符号的下限。 我得到时间复杂度f(n)= 5n ^ 2 + 4n + 8和g(n)= n ^ 2。 我的问题是我对第6到8行的运行时间不太确定。 对于第4行,我得到常数2和时间n + 1,对于第5行,我得到常数1和时间1。 在那之后我就坚持了下来。我尝试了它,我得到了常量2和时间n ^ 2 + 1的第6行,因为它在for循环中运行(for循环和for循环)所以我认为它的n ^ 2 + 1。那是对的吗? 对于第8行,它有3个常量,运行时间为n ^ 2。它是否正确?我对行号8不太确定。这就是我得到的f(n)= 5n ^ 2 + 4n + 8! 请帮我完成这个问题! 我想知道我的工作是否正确!

谢谢

1 个答案:

答案 0 :(得分:0)

让我们一步一步地完成这个过程。

第7行T7 = 1的复杂性。

周围for的复杂性将为T6(I) = I * T7 = I

第5行T5 = 1的复杂性。

第8行T8 = 1的复杂性。

周围for的复杂性(假设-代表0)是

T4(n) = Sum{I from 0 to n} (T5 + T6(I) + T8) 
      = Sum{I from 0 to n}(2 + I)
      = Sum{I from 0 to n}(2) + Sum{I from 0 to n}(I)
      = (n + 1) * 2 + (n+1)/2 * (0 + n)
      = 2n + 2 + n^2/2 + n/2
      = 1/2 n^2 + 5/2 n + 2

其余行的复杂性为T2 = T3 = T9 = 1

整个算法的复杂性是

T(n) = T2 + T3 + T4(n) + T9
     = 1 + 1 + 1/2 n^2 + 5/2 n + 2 + 1
     = 1/2 n^2 + 5/2 n + 5

此运行时属于复杂性类O(n^2)Ω(n^2)