时间复杂度和输入的大小

时间:2013-06-11 07:21:58

标签: algorithm time-complexity

我正在攻读考试,主要是关于时间的复杂性。我在解决这四个问题时遇到了问题。

1)如果我们证明算法的时间复杂度为θ(n ^ 2),那么它是否可能需要为 ALL 输入计算O(n)的时间?

2)如果我们证明一个算法的时间复杂度为θ(n ^ 2),那么它是否可能需要为某些输入计算O(n)的时间?

3)如果我们证明算法的时间复杂度为O(n ^ 2),是否可能需要为 SOME 输入计算O(n)的时间?< / p>

4)如果我们证明算法的时间复杂度为O(n ^ 2),那么它是否可能需要为 ALL 输入计算O(n)的时间? / p>

谁能告诉我如何回答这些问题。当他们要求“全部”或“某些”输入时,我很困惑。 感谢

2 个答案:

答案 0 :(得分:3)

gkovacs90回答提供了一个很好的链接:WIKI

  • T(n)= O(n3),表示T(n)渐近增长不快于n3。常量k>0存在且适用于所有n>N , T(n) < k*n3
  • T(n)=Θ(n3),表示T(n)与n3一样快地渐近。存在两个常量k1, k2 >0,适用于所有n>N , k1*n3 < T(n) < k2*n3

所以如果T(n) = n3 + 2*n + 3

然后T(n) = Θ(n3)T(n) = O(n3)更合适,因为我们有关于T(n)渐近行为的更多信息。

T(n) = Θ(n3)表示对于n> N ,T(n)的曲线将“接近”并且“保持接近”k*n3, with k>0的曲线。 T(n) = O(n3)表示对于n&gt; N ,T(n)的曲线将始终低于k*n3, with k>0的曲线。

  • 1:
  • 2:,正如gkovacs90所说,对于n的小值,您可以进行O(n)时间计算,但我会说足够的投入。符号Theta和Big-O只是渐近的意思
  • 3:
  • 4:

数字4的示例(dumm但仍然为真):对于数组A:Int []计算值的总和。你的算法当然是:

Given A an Int Array

sum=0 
for int a in A
    sum = sum + a
end for
return sum

如果n是数组A的长度:时间复杂度为T(n) = n。所以T(n) = O(n2)因为T(n)不会比n2增长得快。而且我们仍然为所有数组计算O(n)的时间。

如果您发现某种时间(或内存)复杂性的结果。然后你可以(当然你必须)改进函数的Big-O / Theta(这里显然我们有:Θ(n))

最后几点:

  • T(n)=Θ(g(n))意味着T(n)= O(g(n))。
  • 在计算复杂性理论中,有时会针对最佳,最差和平均情况计算复杂性。

答案 1 :(得分:1)

A&#34; barfoot&#34;说明:

Big O表示法用于设置上限。根据定义,总是有一个索引(或输入长度),符号是正确的。所以在这个指数之下,一切都会发生。

例如,使用一个元素对数组(O(n^2))进行排序所需的时间比将元素写入输出(O(n))要少。 (我们不排序,我们知道它的顺序是正确的,所以需要0次)。

所以答案:

  • 1:没有
  • 2:是
  • 3:是
  • 4:是

您可以在WIKI

找到详细的可理解说明

HERE您可以找到更简单的解释。