【问题标题】:About the time complexity algorithm and asymptotic growth关于时间复杂度算法和渐近增长
【发布时间】:2015-08-02 08:27:40
【问题描述】:

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

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。 在那之后我被困住了。我试了一下,第 6 行得到了常数 2 和时间 n^2 + 1,因为它在 for 循环(for 循环和 for 循环)中运行,所以我认为它是 n^2+1。那是对的吗? 对于第 8 行,它有 3 个常量,运行时间为 n^2。它是否正确?我不太确定第 8 行。这就是我得到 f(n) = 5n^2 + 4n + 8 的方式! 请帮我完成这个问题! 我想知道我的工作是否正确!

谢谢

【问题讨论】:

  • for I from - to n do ? - 的位置是什么?

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


【解决方案1】:

让我们一步一步来。

第 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)

【讨论】:

  • 感谢您的帮助。我只是对 T4(n) 有点困惑。为什么不给 T4(n) 加 T7???
  • 如果你构建一个表达式树,第 7 行不会直接包含在第 4 行的 for 语句下面。而是包含另一个 for 语句(第 6 行),然后包含第 7 行。你是总是只关心直系子女。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 2020-02-02
相关资源
最近更新 更多