我想知道以下代码的代码w.r.t算法的执行顺序是什么:

时间:2016-12-16 21:37:57

标签: algorithm performance optimization

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

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)
  6. 请提供正确选项的合理原因

2 个答案:

答案 0 :(得分:2)

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

您的时间复杂度函数将如下所示:T(N)= O(N ^ 2)。原因是你可以省略所有常数,因为它们不会对非常大的N产生影响。(N-1)*(N-5)* 15 =&gt;遗漏了争论,你得到N ^ 2.

这是第5个答案,希望这有助于......

答案 1 :(得分:2)

“如有疑问,请从内到外工作!”

你有这些循环:

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)的总工作。记住 - big-Θ符号吃恒定因子!所以我们现在有了

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

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

回答你原来的问题 - 由于运行时是Θ(n 2 ),答案2,3,4和5都是正确的,因为每个都是运行时的上限。 “最佳”答案是回答5,O(n 2 ),因为它最紧密地限制了运行时。