以下方法的Big-O复杂度是多少?

时间:2015-11-22 16:32:59

标签: 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(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;
        }

我知道第一个while循环是O(n)的复杂性,第二个while循环的复杂度为O(n^2)。在这种情况下,我们是否放弃第一个O(n)并保留第二个O(n^2)并说这个方法的复杂度为O(n^2)?或者我们保留它并说它的复杂性为O(n + n^2)

2 个答案:

答案 0 :(得分:2)

你保持部分的增长率最高,所以O(n ^ 2)。

答案 1 :(得分:1)

使用Big-O表示法,您有:

n1 + n2 * n3 = n + n^2 = O(n + n^2) = O(n^2)

n1是您的第一个whilen2是您的第二个whilen3是第二个while