Loops 如何为这些复杂的for循环找到big-O?

Loops 如何为这些复杂的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循环的代码片段获得了正确的big-O

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的其余答案是正确的,顺便说一句。