【发布时间】:2011-05-23 07:04:32
【问题描述】:
本题用于复习过去的试卷 我只想知道我是否走在正确的轨道上
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
【问题讨论】:
-
@Neil:你为什么这么认为? (当然,这可能不是试卷的全部内容。)
-
@ShreevatsaR:可能是因为 big-O 既不是数量(“多少次是……?”)也不是持续时间(“……的运行时间是多少?”)。更好的是更准确的“......的时间复杂度是多少?”。
-
@paxdiablo:说“语句 4 的执行次数是 O(n)”是完全准确的。也就是说,数量/函数 10n 是 O(n)。 (一个完全不同的问题是,也许论文应该要求 Theta,或者要求最小的正确 O(.),但根据课程的水平,这是可以原谅的。)
-
@Neil:我不同意。教程序员认识到他们编写的东西的复杂性很重要,尽管这有点微不足道。
-
@ShreevatsaR:嗯,它隐含地要求最小正确 big-O;任何更大的,虽然形式上是正确的,答案都不会被接受。在这种情况下,它可能会要求 Theta,但对于更复杂的情况,它通常没有定义(对于平均情况 big-O 与最坏情况 big-O 不同的任何情况,它都没有定义)。
标签: c++ data-structures time-complexity