假设算法的时间复杂度为f(n) = O(g(n)) , if c1*g(n)<=f(n)<=c2*g(n) for all n>=n0
Constants c1 and c2 are positive real numbers
n0 = non negative integer
f(n),g(n) = non negative functions of non negative arguments
。
现在我知道了
g(n) = n^2
此处f(n) = n(n-1)
并假设c1 = 0 and c2 = 1
。我会0*(n^2) <= n(n-1) <= 1(n^2)
。
所以n>=1
n>=0
但 n = 0
但我们通常没有 n>=0
那我该怎么写 n>=1
或 If (Target.Rows.Count > 1) Then Exit Sub
答案 0 :(得分:1)
您应该阅读该声明的方式是:
如果在某个点f(n)
之后,函数O(g(n))
为n0
,则f(n)的所有值都保持在g(n)附近的相对区间内,在c1 * g之间( n)和c2 * g(n)。
只要存在n0,c1和c2,你就可以说任何关系。出于这个原因,n = 0
并不重要。 n=1
也没有。重要的是,在某种程度上条件成立之后。您可以n0 = 42
显示条件成立,并得出结论f(n)= n(n-1)为O(n ^ 2)。
对于一些更复杂的函数f(n)
对于低值会表现得很奇怪,因此忽略它们并选择更高的值可能是有意义的。只要你能找到一个这样的条件就可以保持它没关系,无论n0
有多大。