我正在学习算法分析,但是我对O、Ω和Θ之间的区别感到困惑。
它们的定义如下:
f(n) = O(g(n))
表示函数g(n)
对函数f(n)
是一个上界。因此存在某个常数c
,使得当n ≥ n0
(其中n0
是某个常数)时,总有f(n) ≤ c · g(n)
。f(n) = Ω(g(n))
表示函数g(n)
对函数f(n)
是一个下界。因此存在某个常数c
,使得当n ≥ n0
时,总有f(n) ≥ c · g(n)
。f(n) = Θ(g(n))
表示函数g(n)
同时是函数f(n)
的上界和下界。也就是说,存在常数c1
和c2
,使得当n ≥ n0
时,总有c2 · g(n) ≤ f(n) ≤ c1 · g(n)
。这意味着g(n)
很好地刻画了f(n)
的复杂度。
我的理解是:
O(f(n))
给出了函数/算法的最坏时间复杂度。Ω(f(n))
给出了函数/算法的最好时间复杂度。Θ(f(n))
给出了函数/算法的平均时间复杂度。
- 如果我说的不正确,请纠正我。如果是这种情况,每个算法的时间复杂度必须用这三个符号中的所有符号来表示。但我观察到它只用O、Ω或Θ来表示;为什么不是全部三个符号呢?