Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 以下方法的Big-O复杂性是什么?_Algorithm_While Loop_Big O - Fatal编程技术网

Algorithm 以下方法的Big-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()

我在下面有一个方法,我想知道大O的复杂性

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?这很好地回答了这个问题。非常感谢。