我需要知道以下代码的执行顺序:
For(j=1; j<n;j++)
For(k=1; k<15;k++)
For(l=5; l<n; l++)
{
Do_something_constant();
}
...
...
选项包括:
请提供正确选项的合理原因
答案 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 ),因为它最紧密地限制了运行时。