渐进记号
渐进记号用来表示算法的运行时长,实际上是使用算法运行时间的函数的上界和下界来表示算法的运行时间。常用的渐进记号有5个,分别如下:
Θ
(
n
)
,
O
(
n
)
,
Ω
(
n
)
,
o
(
n
)
,
ω
(
n
)
,
\Theta(n),O(n),\Omega(n),o(n),\omega(n),
Θ(n),O(n),Ω(n),o(n),ω(n),
依次是渐进紧确界,渐近紧确上界,渐近紧确下界,渐近上界,渐近下界。我认为应该依次对应于数学分析中的函数的确界,上确界,下确界,上界,下界。不过在使用渐近符号后可以表示和原函数相等。
这里给出确界的数学定义:
对
于
f
(
n
)
,
Θ
(
g
(
n
)
)
,
若
存
在
大
于
零
的
常
数
c
1
,
c
2
使
得
不
等
式
在
n
>
n
0
时
对于f(n),\Theta(g(n)),若存在大于零的常数c_1,c_2使得不等式在n>n_0时
对于f(n),Θ(g(n)),若存在大于零的常数c1,c2使得不等式在n>n0时
0 ≤ c 1 ∗ g ( n 0 ) ≤ f ( n 0 ) ≤ c 2 ∗ g ( n 0 ) 0\leq c_1*g(n_0)\leq f(n_0)\leq c_2*g(n_0) 0≤c1∗g(n0)≤f(n0)≤c2∗g(n0)
恒 成 立 , 则 称 Θ ( g ( n ) ) 是 f ( n ) 的 渐 近 紧 确 界 , f ( n ) = Θ ( g ( n ) ) . 恒成立,则称\Theta(g(n))是f(n)的渐近紧确界,f(n)=\Theta(g(n)). 恒成立,则称Θ(g(n))是f(n)的渐近紧确界,f(n)=Θ(g(n)).
图示:
其余的单侧紧确界,单侧非紧确界定义类似,不多做解释。其余图示:
渐近符号性质
标准记号和常用函数
1.单调性
若m<=n蕴涵f(m)<=f(n),则函数f(n)是单调递增的的。类似的>=定义单调递减,<,>定义严格递增和严格递减。
2.向上取整和向上取整(注意符号的写法)
3.模运算
对任意整数a和任意正整数n,a mod n 的值就是商a/n的余数
a
m
o
d
n
=
a
−
n
[
a
/
n
]
a \quad modn=a-n[a/n]
amodn=a−n[a/n]
结果有
0
≤
a
m
o
d
n
<
n
0 \leq a \quad modn <n
0≤amodn<n
4.指数函数
5.对数函数
6.阶乘
7.多重函数
8.多重对数指数
l
g
∗
n
=
m
i
n
(
i
≥
:
l
g
i
n
≤
1
)
lg*n=min(i \geq:lg^in\leq1)
lg∗n=min(i≥:lgin≤1)
9.斐波那契数列
递归定义斐波那契数列如下:
每个斐波那契数列都是前面的两个数之和。