for循环的大O恒定时间

时间:2019-01-14 10:45:10

标签: java algorithm time-complexity big-o

我知道这是常数(13)

for(int I = 0; I < 13; I++){
    do something
}

但是如果我改为这样做

int a = 13;
for(int I = 0; I < a; I++){
    do something
}

(我用一个int值替换了13) 我认为它仍然是常量,因为int值是常量,而不是O(n)。

2 个答案:

答案 0 :(得分:1)

如果您的do something代码的时间复杂度为 O(1)(恒定),则您的代码的时间复杂度为 O(a)(线性复杂度)(如果未指定值a)。如果已知 a 的值为13,则复杂度为 O(13) = O(1)


如果do something的复杂度为 g(n),则您的代码的复杂度为 O(ag(n))

答案 1 :(得分:0)

在两种情况下,您的代码都会执行13个循环。 因为您知道预编译时的两个循环数量,所以复杂度将为O(13)= O(1)。如果第二个示例中的a变量是动态生成的,则循环的复杂度为O(a)= O(n)。因为您不知道a有多大。