代码片段的复杂性

发布于 2024-11-25 09:01:06 字数 231 浏览 1 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

み青杉依旧 2024-12-02 09:01:06

在我看来,这看起来O(N)

if 语句对于 i = 0,1,N-1,N-2 成立,这是常数个情况。

This looks O(N) to me.

The if statement is true for i = 0,1,N-1,N-2, which is a constant number of cases.

掩饰不了的爱 2024-12-02 09:01:06

你的结论是错误的。尽管外部 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, the if 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).

仅此而已 2024-12-02 09:01:06

如果你想要一个渐近上限... 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文