Loops 如何为这些复杂的for循环找到big-O?
我想确认我是否为一些涉及for循环的代码片段获得了正确的big-OLoops 如何为这些复杂的for循环找到big-O?,loops,for-loop,runtime,big-o,nested-loops,Loops,For Loop,Runtime,Big O,Nested Loops,我想确认我是否为一些涉及for循环的代码片段获得了正确的big-O for ( int a = 0; a < n; a ++) for ( int b = a; b < 16 ; b ++) sum += 1; for(int a=0;a
for ( int a = 0; a < n; a ++)
for ( int b = a; b < 16 ; b ++)
sum += 1;
for(int a=0;a
我认为这个是O(16N)=>O(N),但在第二个for循环中,b从a开始,而不是从0开始,这一事实让我很反感
int b = 0;
for ( int a = 0; a < n ; a ++)
sum += a * n;
for ( ; b < n ; b ++)
sum++;
intb=0;
对于(int a=0;a
我想说O(N^2),因为有嵌套的for循环,其中两个循环都指向N。但是,第二个循环中的b使用外部范围的初始化,我不确定这是否会影响运行时
for (int a = 0; a < (n * n); a ++)
sum++;
if (a % 2 == 1)
for (; a < (n * n * n); a ++)
sum++;
for(int a=0;a<(n*n);a++)
sum++;
如果(a%2==1)
对于(;a<(n*n*n);a++)
sum++;
我得到第一个for循环是O(N^2),if语句下的一个是O(N^3),但我不知道如何解释if语句。第一个是O(N*min(N,16))
,因为假设N>16,16 for循环计数为O(1)
。如果n<16
那么它就是O(n^2)
第二个是O(n)
,因为在第一次迭代之后b
已经是n
第三个是O(n^3)
,因为在最多2次迭代之后,您到达if语句,然后a
递增,直到n^3
,这意味着在下一次外部for循环迭代中,第一个答案应该是O(n)。@MoB。那么,可以肯定的是,我的第一个推理正确吗?还是我遗漏了什么?是的,没错。很容易看出,在内部循环中用0代替a不能降低时间复杂度。所以内部循环是O(1)。Herr Flick的其余答案是正确的,顺便说一句。