我目前正在研究算法中的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循环思考,或者我做了什么。非常感谢帮助!
答案 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))表示:
我希望这个答案有点帮助...