for(int i = 0; i < N; i++)
if(i < 2 || i > N - 3)
for(int j = 1; j <= 10N; j++)
a[i] = a[j - 1] / 2;
答案是N(1 + 10N(1)) = n + 10n^2
对吗?还是n
?
请解释一下。
答案 0 :(得分:4)
这看起来O(N)
给我。
if
语句适用于i = 0,1,N-1,N-2
,这是一个固定数量的案例。
答案 1 :(得分:4)
你的结论是错误的。虽然外部for
循环 N 次,但if
条件仅在4种情况下为真(0,1, N -2,ñ -1)。所以总的运行时间是 N + 4·10· N ,它位于O( n )中。
答案 2 :(得分:2)
如果你想要一个渐近上界... O(n ^ 2)。如果你想要比这更挑剔,我们需要为各个指令定义计算权重。
编辑:是的,这是O(n)。我第一次看错了。