【问题标题】:I want to know what the order of execution is for this code w.r.t algorithm for the following code: [closed]我想知道以下代码的代码w.r.t算法的执行顺序是什么:[关闭]
【发布时间】:2016-12-16 21:37:56
【问题描述】:

我需要知道以下代码的执行顺序:

For(j=1; j<n;j++)
   For(k=1; k<15;k++)
      For(l=5; l<n; l++)
      {
         Do_something_constant();
      }
      ...
      ...

选项是:

  1. O(n)
  2. O(n^3)
  3. O(n^2 log n)
  4. O(n^2 log n)
  5. O(n^2)

请同时提供正确选项的逻辑原因

【问题讨论】:

  • 你认为答案是什么?
  • 第一个选项,但从逻辑上讲它应该是第二个选项,这就是我在这里问的原因
  • SO 不是家庭作业完成网站。如果您无法完成作业,请向您的教师寻求更多帮助。
  • 不是作业“肯白”,只是对正确答案的好奇
  • 虽然应该是 5,但它是两个嵌套循环,大约需要 n 步(中间循环的步数恒定,可以忽略)。

标签: algorithm performance optimization


【解决方案1】:

“当有疑问时,由内而外地工作!”

你有这些循环:

For(j=1; j<n;j++) {
   For(k=1; k<15;k++) {
      For(l=5; l<n; l++) {
         Do_something_constant();
      }
   }
}

让我们从那个内部循环开始。每次迭代都做 O(1) 次工作,总共有 Θ(n) 次循环迭代。然后我们可以替换这个循环得到

For(j=1; j<n;j++) {
   For(k=1; k<15;k++) {
      Do Θ(n) work
   }
}

那个内部循环做了 Θ(n) 工作 14 次,这也是 Θ(n) 的总工作。请记住 - 大 Θ 符号会吃掉常数因子!所以现在我们有

For(j=1; j<n;j++) {
   Do Θ(n) work
}

这做了 Θ(n2) 总工作,因为它做了 Θ(n) 工作 Θ(n) 次。所以运行时间将是 Θ(n2)。

回答您最初的问题 - 因为运行时间是 Θ(n2),所以答案 2、3、4 和 5 都是正确的,因为这些都是运行时间的上限。 “最佳”答案是答案 5,O(n2),因为它最严格地限制了运行时。

【讨论】:

    【解决方案2】:

    所以你基本上有 3 个嵌套循环,它们在 O(1) 时间内执行操作。每个循环的成本为:第一个循环为 (N-1) 步,第二个循环为 14 步,第三个循环为 (N-5)。

    您的时间复杂度函数将如下所示:T(N) = O(N^2)。原因开始于您可以省略所有常量,因为它们不会对非常大的 N 产生影响。 (N-1)*(N-5)*15 => 省略常量,您会得到 N^2。

    这是第5个答案希望这会有所帮助..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 2011-10-10
      • 1970-01-01
      • 2022-09-27
      • 2023-03-29
      相关资源
      最近更新 更多