这段代码的大O是什么?

时间:2012-10-05 14:25:40

标签: java big-o

return this.add(P2.multiply(-1));

加上O(n)且乘以O(n²)。为了计算大O我只是将O加倍?那么在最坏的情况下调用它会是O(n³)吗? thisP2是多项式项的ArrayList。

3 个答案:

答案 0 :(得分:5)

  

要计算大O我只是将O加倍?

不一定。假设multiply需要O( n 2 )时间,但总是最终返回3。那么add步是恒定时间,因为它是O( n ),即O(3),即O(1);因此整体复杂性为O( n 2 )。

另一方面,假设multiply需要O( n 2 )时间并返回 n 3 。那么add步是立方时间,因为它是O( n )( n 是它的参数),它是O( n 3 )( n multiply的参数);因此整体复杂性为O( n 3 )。

总体复杂性是multiply的复杂性,加上 add 对于任何值的复杂性 multiply 返回

答案 1 :(得分:2)

所以O(n)+ O(n²)只是O(n²)。

答案 2 :(得分:0)

单独查看一行时,确定Big O并不总是那么容易。 在这种情况下,两个步骤(加和多个)是顺序的,这意味着概念将是O(n)+ O(n 2 ))或只是O(n 2 < / SUP>)。

this.add(P2.multiply(-1))可以改写为
 mul = P2.multuple(-1)
 this.add(MUL)

如果'add'进程循环遍历多个步骤中的每个步骤(这实际上是一个新功能),那么你将多个Big O术语加倍