【发布时间】:2010-12-29 22:42:50
【问题描述】:
我正在学习算法分析。我无法理解 O、Ω 和 Θ 之间的区别。
它们的定义方式如下:
f(n) = O(g(n))表示c · g(n)是一个f(n)的上限。因此存在 一些常数c使得f(n)是 总是≤c · g(n),对于足够大的n(例如,n ≥ n0表示某些常量n0)。f(n) = Ω(g(n))表示c · g(n)是一个f(n)的下限。因此存在 一些常量c使得f(n)是 对于所有n ≥ n0,始终≥c · g(n)。f(n) = Θ(g(n))表示c1 · g(n)是f(n)的上限,c2 · g(n)是f(n)的下限,适用于所有n ≥ n0。 因此存在常量c1和c2这样f(n) ≤ c1 ·g(n)和f(n) ≥ c2 ·g(n)。这意味着g(n)在f(n)上提供了一个很好的、紧密的界限。
我的理解是这样的:
-
O(f(n))给出给定函数/算法的最坏情况复杂性。 -
Ω(f(n))给出给定函数/算法的最佳案例复杂度。 -
Θ(f(n))给出给定函数/算法的平均案例复杂度。
如果我错了,请纠正我。如果是这种情况,每个算法的时间复杂度必须用所有三种符号表示。但我观察到它表示为 O、Ω 或 Θ;为什么不是全部三个?
【问题讨论】:
-
那么,这些答案对您有帮助还是让您更加困惑?这里有一些很好的信息,但我认为当你问这个问题时你有一个特定的目的。如果你能弄清楚你在做什么,那么应该有人可以提供进一步的帮助。
-
实际上我正在阅读算法书。在示例中,算法的分析时间复杂度为 O、Ω 和 Θ。所以我只是想确保在继续之前我理解了它。现在它似乎更清楚了......谢谢
标签: algorithm big-o time-complexity