這個問題是修訂的目的從過去的考卷 我只是想知道如果我在正確的軌道時間複雜度
1. int i=1;
2. while (i <= n) {
3. for (int j=1; j<10; j++)
4. sum++;
5. i++;
6. }
7. for(int j = 1; j <= n; j++)
8. for(int k = 1; k <= n; k=k*2)
9. sum++;
1)的聲明4執行多少次?
A.爲O(n)
B.爲O(n^2)
C. O(log n)的
D.爲O(n log n)的
E.沒有 的上述
在這裏,我選擇A
2.)語句9執行多少次?
A.爲O(n)
B.爲O(n^2)
C. O(log n)的
D.爲O(n log n)的
E.以上皆非
因爲線的8(k = k * 2)我選擇C
3.)整個代碼片段的運行時間是多少?
A. 爲O(n)
B.爲O(n^2)
C. O(log n)的
D.爲O(n log n)的
由於爲O(n)+ O(LOGN )= O(n)所以我選擇了A
@尼爾:你爲什麼這麼認爲? (當然,這不是完整的考卷。) – ShreevatsaR 2011-05-23 07:22:47
@ShreevatsaR:可能是因爲大O既不是數量(「多少次......」),也不是持續時間(「什麼是運行時間......「)。更好的是更準確的「什麼是...的時間複雜度?」。 – paxdiablo 2011-05-23 07:24:48
@paxdiablo:說「語句4被執行的次數是O(n)」是完全準確的。即,量/函數10n是O(n)。 (一個完全不同的問題是,紙可能要求Theta,或要求最小的正確的O(。),但這是可以原諒的,取決於課程的級別。) – ShreevatsaR 2011-05-23 07:27:00