当我们说某个方法的时间复杂度为O(n^2)
时,它的含义与10^2 = 100
中的方法相同,或者意味着该方法的最大强度为 或最接近的符号?我对如何理解Big O感到非常困惑。我还记得一个叫做上限的东西,这在最大程度上意味着什么?
答案 0 :(得分:3)
If表示运行时间被N²限制在之上。
更准确地说,T(N) 例如,2N²+ 4N + 6 = O(N²),因为对于所有N> 5,2N²+ 4N + 6 <3N²。
答案 1 :(得分:1)
如果方法f
在O(g)
内,而g
是另一个函数,则意味着在某个点(存在某个n_0
,这样对于所有{{1 }})函数n > n_0
始终会为此点输出小于f
的值。但是,g
可以具有任意常数g
。因此,k
用于f(n) <= k * g(n)
之上的所有n
。因此,n_0
可以先变大,然后再变小并保持变小。
我们说 f
由f
渐近界定。 渐近表示我们不关心g
在开始时的行为。只有接近无限时它会做什么。因此,我们丢弃了f
以下的所有输入。
一个例子就是这样:
蓝色函数是n_0
,带有一些常数k * g
,红色函数是k
。我们看到f
首先较大,但是从f
开始,它将始终小于x_0
。因此k * g
。
从数学上讲,这可以表示为
是Big-O的通常定义。从上面的解释中,定义应该很清楚。它说从某个f in O(g)
开始,对于所有输入,函数n_0
必须小于f
。 k * g
可以是常数。
两个图像均来自Wikipedia。
这里有几个例子可以使定义熟悉:
k
在n
中(平常)O(n)
在n
中(平常)O(n^2)
位于5n
中(从O(n^2)
开始)n_0 = 5
位于25n^2
中(接受O(n^2)
或更高)k = 25
位于2n^2 + 4n + 6
中(从O(n^2)
开始,进入k = 3
)实际上,n_0 = 5
是数学意义上的集合。它包含具有上述属性(由O(g)
渐近限制)的所有函数。
因此,尽管有些作者写了g
,但这实际上是错误的,应该是f = O(g)
。
还有其他类似的集合,仅在绑定方向上有所不同:
f in O(g)
<=
<
>=