计算代码的平均时间复杂度(Big-O)

时间:2013-02-26 18:09:30

标签: java big-o

你能不能帮我找到下面代码的Big-O:

    /**
 * This will: 
 * 1) Remove duplicates from the give List and sort.
 * 2) find N-th largest element in the modified list and return the element.
 * @param listWithDup
 * @param index index of the largest element
 * @return
 */
public static int findElementbyIndex(List<Integer> listWithDup, int index){

  int toRet = 0, num = 0;
  TreeSet<Integer> sortedSet = new TreeSet<Integer>(listWithDup); // remove duplicates    and   sorts

  //        System.out.println("printing the sorted List:");
  //        for(int i: sortedSet){
  //            System.out.println(i);
  //        }
  Iterator<Integer> it = sortedSet.descendingIterator();

while(it.hasNext()){
  toRet = it.next();
  num++;
  if(num == index)
    break;
  }
  return toRet;     
}
/**
 * @param args
 */
public static void main(String[] args) {

    ArrayList<Integer> a = new ArrayList<Integer>();
    a.add(1);
    a.add(9);
    a.add(5);
    a.add(7);
    a.add(2);
    a.add(5);

    System.out.println("Expecting 7, because 7 is 2nd largest element in the modified list="+findElementbyIndex(a, 2));

}

我从这段代码得到的输出如下:

printing the sorted List:
1
2
5
7
9
Expecting 7, because 7 is 2nd largest element in the modified list=7

我需要计算findElementbyIndex()方法的平均复杂度。 任何人都可以帮助我。

提前致谢

2 个答案:

答案 0 :(得分:1)

TreeSet在创建时会进行基于比较的排序,因此它将为O(n log n)。算法的其余部分是顺序搜索,因此是O(n),但由于O(n log n)的复杂度较高,因此算法为O(n log n)。

答案 1 :(得分:0)

最好的情况是,所需的项目在第一个索引中。单词case是所需项目在最后位置。这意味着在最坏的情况下,搜索将遍历每个项目一次。因此,对于N个输入,算法是O(N)。 :)