用大哦符号计算算法的时间复杂度
Calculating time complexity for an algorithm by big oh notation
假设算法的时间复杂度为O(n^2)
。
现在我知道
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
您应该阅读声明的方式是:
函数 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
不管n0
有多大,只要你能找到一个这样的条件成立就可以了。
假设算法的时间复杂度为O(n^2)
。
现在我知道
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
您应该阅读声明的方式是:
函数 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
不管n0
有多大,只要你能找到一个这样的条件成立就可以了。