我需要解决一些问题。我刚刚开始阅读有关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表示法给出以下代码行的复杂性:
所以对于第4-5行,我认为它应该只是O(1),因为它只是添加了2个元素。
我不确定其他两个。
对于3-5行,我认为应该是O(n),其中n是数字字段中的索引数。
最后对于第2-5行,我想说它是O(n ^ 2),因为我们现在必须循环?
答案 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。