我正在攻读考试,主要是关于时间的复杂性。我在解决这四个问题时遇到了问题。
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>
谁能告诉我如何回答这些问题。当他们要求“全部”或“某些”输入时,我很困惑。 感谢
答案 0 :(得分:3)
gkovacs90回答提供了一个很好的链接:WIKI
k>0
存在且适用于所有n>N , T(n) < k*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
的曲线。
n
的小值,您可以进行O(n)时间计算,但我会说否足够的投入。符号Theta和Big-O只是渐近的意思数字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))
最后几点:
答案 1 :(得分:1)