大O表示法的定义
f(n) is O(g(n)) if there exist positive numbers c and N such that f (n) ≤cg(n) for all n ≥ N.
即如果存在常数
c
c
c和
N
N
N使得对所有的
n
>
=
N
n>=N
n>=N时,都有
f
(
n
)
<
=
c
g
(
n
)
f(n)<=cg(n)
f(n)<=cg(n),则
f
(
n
)
f(n)
f(n)等同于
O
(
g
(
n
)
)
O(g(n))
O(g(n))。
可以大概的理解为
g
(
n
)
g(n)
g(n)为限定条件下,算法的最坏情况或者f的增长不会超过
g
g
g。举例来说:
f
(
n
)
=
2
n
2
+
3
n
+
1
f(n)=2n^2+3n+1
f(n)=2n2+3n+1
根据定义首先需要确定
g
(
n
)
g(n)
g(n),
c
g
(
n
)
cg(n)
cg(n)要能够表示
f
(
n
)
f(n)
f(n)的增长上限,即
f
(
n
)
≤
c
g
(
n
)
f (n) ≤cg(n)
f(n)≤cg(n)。若
g
(
n
)
=
n
g(n)=n
g(n)=n,
g
(
n
)
g(n)
g(n)为线性函数不论选取多大的常数
c
c
c都会与二次函数
f
(
n
)
f(n)
f(n)有交点或小于
f
(
n
)
f(n)
f(n)。故
g
(
n
)
g(n)
g(n)应当选取
n
2
n^2
n2,但实际上,选取
n
3
,
n
4
n^3 , n^4
n3,n4同样符合定义,但是为了便于统一故选取最小的
g
(
n
)
g(n)
g(n)即
n
2
n^2
n2。另外根据定义,需要找到使
f
(
n
)
<
=
c
g
(
n
)
f(n)<=cg(n)
f(n)<=cg(n)这一不等式成立的c的取值,即
f
(
n
)
=
2
n
2
+
3
n
+
1
<
=
c
n
2
f(n)=2n^2+3n+1<=cn^2
f(n)=2n2+3n+1<=cn2。实际上根据N选择的不同c的结果也将不同。
c
g
(
n
)
cg(n)
cg(n)
f
(
n
)
f(n)
f(n)的对比
确定了c和N的存在后,即可将 f ( n ) = 2 n 2 + 3 n + 1 f(n)=2n^2+3n+1 f(n)=2n2+3n+1根据大O表示法等价为 O ( n 2 ) O(n^2) O(n2).