1 int sum=0;
2 long start = System.currentTimeMillis();
3 for (int i = 1; i <= N; i++) {
4 for (int j = 1; j <= N; j++) {
5 sum=sum+1;}}
6 long stop = System.currentTimeMillis();
7 long elapsed = (long)(stop - start);
我陷入了这个问题,我知道第1,2,5,6 and 7
行是它们在O(1)
恒定时间运行的原始操作。我对我认为是O(n^2
的循环感到怀疑,任何人都可以对此表示感谢。
答案 0 :(得分:4)
是的,一个for循环是O(n),因为它的运行时间与输入的大小成线性比例,而与第二个循环一起,它是O(n ^ 2),因为您重复了O( n)功能n次。
答案 1 :(得分:0)
这是Reddit的一条评论,其中提供了一些不同的O运行时示例。
在这种情况下,一位老师丢了笔,试图找出哪个学生拿了它。
O(n2):我问一个学生,问他们:“杰夫有笔吗?否? 鲍勃有笔吗?”依此类推,命名每个学生。如果我不明白, 第一个学生的答案,我继续下一个。在里面 最坏的情况下,我需要问n2个问题-向每个学生询问 彼此的学生。O(n):我问每个学生是否有笔。如果没有,我继续 下一个。在最坏的情况下,我需要问n个问题。
O(log n):我将班级一分为二,然后问:“在左边吗? 边还是教室的右边?”然后我带那个小组 将其一分为二,然后再次询问,依此类推。最坏的情况下我需要 询问登录问题。
我还应该补充一点,O(1)基本上是在问全班“谁有我的笔?”无论班上有多少人,问谁拥有笔都将花费相同的时间,使它不变。