使用big-O表示法分析伪代码的复杂度/运行时间

时间:2019-04-09 09:28:34

标签: big-o pseudocode

我需要解决一些问题。我刚刚开始阅读有关O表示法的文章,但是在分析代码时我还是很陌生。

所以这是问题所在:

给出以下伪代码,其中A是一个数字字段,可以访问索引1到length(A)的元素

1: procedure Adder(A)
2:      for i <- 1 to length(A)
3:          for j <- length(A) to 1 do 
4:              if i ≠ j then
5:                 A[i] <- A[i] + A[j]

使用big-O表示法给出以下代码行的复杂性:

  1. 第4-5行
  2. 3-5行
  3. 第2-5行

所以对于第4-5行,我认为它应该只是O(1),因为它只是添加了2个元素。

我不确定其他两个。

对于3-5行,我认为应该是O(n),其中n是数字字段中的索引数。

最后对于第2-5行,我想说它是O(n ^ 2),因为我们现在必须循环?

1 个答案:

答案 0 :(得分:0)

对我来说,这似乎是正确的,尽管您可能希望重新表述您拥有的某些理由

  

第4-5行,我认为应该只是O(1),因为它只是   添加2个元素。

它是O(1),因为无论输入什么,该算法最终都会执行1条或2条指令。永远不会超过1或2

  

最后对于第2-5行,我会说它是O(n ^ 2),因为我们现在必须   循环吗?

它是O(n ^ 2),因为嵌套循环在您作为输入的序列上进行迭代。无论发生什么情况,如果输入的长度为N,则必须进行N个循环,并且在内部循环N个循环。因此,您最终得到了N * N,正如您所建议的那样,它是N ^ 2。