什么是循环的任何循环的实际时间复杂度?

时间:2013-06-02 08:03:10

标签: algorithm time-complexity

当我们必须计算循环的复杂性时说FOR循环(表示需要运行n次),我们是否还要在FOR循环条件失败并且它中断时计算迭代次数?

以下是一个例子:

in是正整数

for(i=0;i<n;i++)
{
   //some code. All are constant expressions and there are no break statements.
}

现在内部代码将运行0到n-1次,这是n次。当i = n时,循环中断,但只有在检查for循环条件后才会发生这种情况。这个最后的检查应该计算时间复杂度,因为如果它被计算,那么FOR循环实际上将运行n + 1次?我不确定我在这里是否有意义。我想应该算一算。我仍然需要一些明确的答案。请提出建议!

4 个答案:

答案 0 :(得分:3)

如果你真的需要确切,请介绍一些常量。让a成为检查循环条件一次和b时间来运行循环中所有命令的时间。循环将在以下总时间内运行:

a(n+1) + bn = (a+b)n + a

由于其他答案所解释的原因,你很少需要这么精确。当na大得多时,a一次与大局无关。这就是为什么我们放弃所有低阶项和常量并说:

(a+b)n + a ∈ Θ(n)

答案 1 :(得分:1)

计算函数计算复杂性的要点是确定该函数是否会随着 n 的增加而扩展,而不是为的特定值运行多少次ñ。例如,当 n 为1时,你的循环可以非常快地运行,但是如果n突然是1000,它会在(大约)1000x原始时间内运行,还是你看起来要高得多? / p>

你给的那个for循环总会运行 - 最坏的情况 - n 次。无论 n 是100还是10 ^ 30,循环都将涉及 n 次迭代。考虑到更大的图景,对该循环的额外比较是无关紧要的;如果你正在处理10 ^ 30次迭代,那么一次额外的迭代就不会有任何区别。

答案 2 :(得分:1)

如前所述,时间复杂度是渐近的 - 这意味着如果你有一个从1到n的循环 你在循环中做了多少操作并不重要 - 只要它们是最终的,复杂性将是O(n),因为O(10000n) = O(n)

答案 3 :(得分:0)

考虑到常数,不测量时间复杂度。正如MZF所说的那样...... O(an + c)= O(n)其中'a'和'c'是常数。但是如果for循环中还有一个循环,那么时间复杂度将是O(a(n ^ 2)+ c)等等......