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
ThenT(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>N,T(n) 的曲线将始终低于 的曲线k*n3, with k>0
。
- 1:没有
- 2:是的,正如 gkovacs90 所说,对于较小的值,
n
您可以进行 O(n) 时间计算,但对于足够大的输入,我会说否。符号 Theta 和 Big-O 只表示渐近的东西
- 3:是的
- 4:是的
数字 4 的示例(愚蠢但仍然正确):对于 Array 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))。
- 在计算复杂性理论中,有时会针对最佳、最差和平均情况计算复杂度。