Algorithm 以下方法的Big-O复杂性是什么?
我在下面有一个方法,我想知道大O的复杂性Algorithm 以下方法的Big-O复杂性是什么?,algorithm,while-loop,big-o,Algorithm,While Loop,Big O,我在下面有一个方法,我想知道大O的复杂性 public FinalPrepDeque<E> listUnion(FinalPrepDeque<E> lst2) { FinalPrepDeque<E> lst3 = new FinalPrepDeque<E>(); Iterator<E> it1 = this.iterator(); while (it1.hasNext()
public FinalPrepDeque<E> listUnion(FinalPrepDeque<E> lst2) {
FinalPrepDeque<E> lst3 = new FinalPrepDeque<E>();
Iterator<E> it1 = this.iterator();
while (it1.hasNext()) { // O(n)
E val = it1.next();
if (val != null)
lst3.addLast(val);
}
Iterator<E> it2 = lst2.iterator();
boolean found;
while (it2.hasNext()) { // O(n)
E val2 = it2.next();
if (val2 != null) {
found = false;
it1 = this.iterator();
while (it1.hasNext()) { // O(n)
E val1 = it1.next();
if (val1 != null) {
if (val1.equals(val2)) {
found = true;
break;
}
}
}
if (!found)
lst3.addLast(val2);
}
} // end outer-while
return lst3;
}
public FinalPrepDeque列表联合(FinalPrepDeque lst2){
FinalPrepDeque lst3=新的FinalPrepDeque();
迭代器it1=this.Iterator();
while(it1.hasNext()){//O(n)
E val=it1.next();
如果(val!=null)
lst3.addLast(val);
}
迭代器it2=lst2.Iterator();
布尔发现;
while(it2.hasNext()){//O(n)
E val2=it2.next();
if(val2!=null){
发现=错误;
it1=this.iterator();
while(it1.hasNext()){//O(n)
E val1=it1.next();
if(val1!=null){
if(val1.等于(val2)){
发现=真;
打破
}
}
}
如果(!找到)
lst3.addLast(val2);
}
}//结束时
返回lst3;
}
我知道第一个while循环的复杂性为
O(n)
,第二个while循环的复杂性为O(n^2)
。在这种情况下,我们是否丢弃第一个O(n)
,保留第二个O(n^2)
,并说此方法的复杂性为O(n^2)
?或者我们保留它,并说它的复杂性为O(n+n^2)?你保留增长率最大的部分,因此O(n^2)。用大O表示法,你有:
n1 + n2 * n3 = n + n^2 = O(n + n^2) = O(n^2)
n1
是你的第一个而,n2
是你的第二个而n3
是第三个,而是第二个。所以我们在这种情况下只需将较小的n值去掉?Downvoter,为什么是Downvoter?这很好地回答了这个问题。非常感谢。