时间复杂性(攻读考试)

时间:2016-10-20 13:32:07

标签: time-complexity

我目前正在研究算法中的examen,我正在尝试解决有关java时间复杂度的问题,但无法真正弄清楚如何去做。我想要计算预期的时间复杂度。 N是正整数。

for (int i=0; i < N; i++)
    for (int j=i+1; j < N; i++) {
    int x=j+1; int h=N-1; int k;
        while(x<h) {
        k=(x+h)/2;
           if (a[i]+a[j]+a[k] == 0) { cnt++; break;}
           if (a[i]+a[j]+a[k]  < 0) x=k+1;
           else h=k-1;
}}

第一个for循环应运行N次,第二个应运行N-1。由于x是j + 1,我猜测x = N-2。我不知道如何用while循环思考,或者我做了什么。非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

在部分中创建时间复杂度功能。

for (int i=0; i < N; i++) //Takes linear O(n)
  for (int j=i+1; j < N; i++) { //Takes linear O(n) and in computer science we can safely assume -1 is irrelevant at N-1 in big O notation 
    int x=j+1; int h=N-1; int k; // 3 x O(1)
    while( x < h ) { // Worst case is when j equals i + 1 where i = 0 so x is at lowest 2 and h equals to N-1 so h depends on N. So again loop takes linear O(n) time.
      k=(x+h)/2; // Takes O(1) time
       if (a[i]+a[j]+a[k] == 0) { // Takes O(1) time and if this gives true we do break from the while loop
         cnt++; // Takes O(1) time
         break; // Takes O(1) time
       }
       if ( a[i]+a[j]+a[k]  < 0 ) { // Takes O(1) time
         x=k+1; // Takes O(1) time
       } else {
         h=k-1; // Takes O(1) time
       }
    }
  }
}

总之,T(N)等于O(N ^ 3)和Ω(N ^ 2) 更具体的T(N)= N * N-1 * N-2 + 10并且这最后一个while循环需要O(N / 2)时间,但仍然在计算机科学中它与O(N)相同。

我们只对最糟糕和最好的情况感兴趣。

实际上混淆了更大的O符号 T(N)= O(g(N))表示:

T(N)=O(g(N))

我希望这个答案有点帮助...