使用大 O 表示法理解时间复杂度的子集

Understanding subsets of time-complexity using Big-O notation

我是算法的初学者,试图了解时间复杂度并在线阅读任何时间复杂度为 O(n) 的算法都是上限,这意味着所花费的时间是不可能的通过该特定算法可以在 O(n) 以上表示。

但理解 O(n) 算法也可以称为 O(n^2)(如果是这样,那我们为什么称“O(n) 为上界”而且我们说大-O 给出上限 ?)。技术上怎么可能?有人可以为初学者解释一下吗?

注意:请不要标记为重复,我们无法从数学关系和其他可用示例中理解。

提前致谢。

如果一个算法被描述为“在 O(n) 时间内”,那么它在时间上永远不会超过其大小的倍数,运行。

O(n) 的每个算法也是 O(n^2)、O(n^3) 和 O(2^n) - 同样,每个小于 3 的数字也是小于 5、7 和 1,000。

也许通过图片更好地解释。但是,您将不得不尝试理解 Big O 的数学定义。

一个函数f是另一个函数g的大O,或者f(x) = O(g (x)),如果我们能在 x-axis 上找到一个点,那么在那个点之后,g(x) 的一些“拉伸版本”(像 3g(x)5g(x)) 总是大于 f(x)

所以 g(x) 就像一个“测量函数”,它试图让您感受 f 增长的速度。这对图片意味着什么?

假设f是函数2x+3sin(x) + 10。然后,在下图中,我们看到 g(x) = x 的拉伸版本(具体来说,4g(x))在上面f 在 x = 3.933 之后:

因此,我们可以说我们选择的函数 fO(x).

现在让我们添加另一个函数 k(x) = x2 到组合中。让我们使用它的拉伸版本 0.2x2 并绘制它:

这里,我们不仅看到0.2x2大于4x后在某种程度上,它也大于 f(x)(事实上更早)。所以我们可以说 4x = O(x2),而且 f(x) = O(x2).

您可以在这里玩转图表:https://www.desmos.com/calculator/okeagehzbh