这个问题是修订的目的从过去的考卷 我只是想知道如果我在正确的轨道时间复杂度
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