代码片段的复杂性
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
? 请解释一下。
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;
So the answer is N(1 + 10N(1)) = n + 10n^2
right? or is it n
?
Please explain.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在我看来,这看起来
O(N)
。if
语句对于i = 0,1,N-1,N-2
成立,这是常数个情况。This looks
O(N)
to me.The
if
statement is true fori = 0,1,N-1,N-2
, which is a constant number of cases.你的结论是错误的。尽管外部
for
循环 N 次,但if
条件仅在 4 种情况下为真(0、1、N >-2,N-1)。因此总运行时间为 N + 4·10·N,即 O(n)。Your conclusion is wrong. Although the outer
for
loops N times, theif
condition is only true in 4 cases (0, 1, N-2, N-1). So the total run time is rather N + 4·10·N that is in O(n).如果你想要一个渐近上限... O(n^2)。如果您想要比这更挑剔,我们需要为各个指令定义计算权重。
编辑:是的,它是 O(n)。我第一次读错了。
If you want an asymptotic upper bound... O(n^2). If you want to be pickier than that, we need to define computational weights for individual instructions.
Edit: Yeah, it's O(n). I read it wrong the first time.