参考这个答案,什么是Theta(紧密界)?
Omega是下界,也就是算法可能花费的最短时间,我们都比较理解。而我们知道Big-O是上界,表示算法可能花费的最长时间。但是我对Theta一无所知。
Theta(紧密界)描述了算法的确切复杂度,即算法运行时间的上限和下限相同。与Big-O类似,Theta也提供了关于算法的渐进分析,但它更加严格。如要得到Theta,需要同时找到算法的上界和下界。Big O是上限,而Omega是下限。Theta需要同时满足Big O和Omega的条件,因此被称为紧密边界(它必须既是上界又是下界)。
例如,一个具有Omega(n log n)
复杂度的算法至少需要n log n
时间,但没有上限。 一个具有Theta(n log n)
复杂度的算法更好,因为它至少需要n log n
时间(Omega n log n),最多不超过n log n
时间(Big O n log n)。
Θ-符号(theta 符号)因比O-符号和Ω-符号更精确而被称为紧界符号。
如果我懒一点,那么我可以说对于已排序数组的二分查找复杂度为O(n2)、O(n3)和O(2n),而在每种情况下我都是准确的。这是因为O-符号只指定了一个上界,而二分搜索在高端受到所有这些函数的限制,但并不十分严格。这种懒惰的估计是无用的。
Θ-符号通过结合 O-符号 和 Ω-符号来解决这个问题。如果我说二分查找的复杂度是Θ(log n),那么这会给你更精确的信息。它告诉你该算法在两个方向上被给定函数所限制,因此它永远不会比所述的速度快或慢很多。
如果您有一个时间复杂度为 O(f(n)) 的东西,那意味着存在 k, g(n),使得 f(n) ≤ k g(n)。
如果您有一个时间复杂度为 Ω(f(n)) 的东西,那意味着存在 k, g(n),使得 f(n) ≥ k g(n)。
如果您有一个同时满足 O(f(n)) 和 Ω(f(n)) 的东西,那它的时间复杂度为 Θ(f(n))。
维基百科文章相当不错,虽然有点难懂。
g
代替f
,其余部分可以保持不变。第二行也是同样的情况:应该是“如果你有一个Ω(g(n))的东西”。你能再检查一下吗? - Fabio says Reinstate Monicaf(n) = O(g(n))
,那么存在一个 k
和 g(n)
,使得 f(n) ≤ k g(n)
”? - Prid精确的下界或 $\omega$ bfon f(n) 意味着渐近小于或等于 f(n) 的函数集合,即 U g(n)≤ cf(n),对于所有的 un≥n 和某些 c、n' $\in$ $\Bbb{N}$。
而上界或 $\mathit{O}$ 对于 f(n) 意味着渐近大于或等于 f(n) 的函数集合,数学上表示为:
g(n)≥cf(n),对于所有的 n≥n' 和某些 c、n' $\in$ $\Bbb{N}$。
现在 $\Theta$ 是上述两个的交集。
$\theta $
例如,如果一个算法像“恰好 $\Omega\left(f(n)\right)$”,那么最好说它是 $\Theta\left(f(n)\right)$。
或者,我们也可以说它给出了实际速度,其中 $\omega$ 给出了最低限制。
基本区别在于
块引用
渐近上界和渐近紧密性之间的区别。渐近上界意味着给定算法可以根据输入数量执行最长时间,例如,在排序算法中,如果所有数组(n)元素按降序排列,则将它们升序排列需要运行时间为O(n),这显示了上限复杂度,但如果它们已经排序,则只需ohm(1)即可。因此,我们通常使用“O”符号表示上限复杂度。
渐近紧密性界限显示例如(c1g(n)<= f(n)<= c2g(n))显示两个边界(上限和下限)之间的函数值,给出平均情况。