算法分析的基础知识
算法的定义
算法是为了求解一个问题需要循环的、被清楚指定的简单指令的集合。对于一个问题,一旦某种算法给定并且被确定是正确的,那么重要的一步就是确定该算法将需要多少诸如时间或空间等资源量的问题
估计算法资源消耗的数学基础
定义一:如果存在正常数c和
n
0
n_0
n0使得当
N
>
=
n
0
N>=n_0
N>=n0 时
T
(
N
)
<
=
c
f
(
N
)
T(N)<=cf(N)
T(N)<=cf(N),则记为
T
(
N
)
=
O
(
f
(
N
)
)
T(N)=O(f(N))
T(N)=O(f(N))。
O
O
O的定义是:T(N)的增长速度小于等于f(N) 例如
N
2
=
O
(
N
3
)
N^2=O(N^3)
N2=O(N3)
定义二:如果存在正常数c和
n
0
n_0
n0使得当
N
>
=
n
0
N>=n_0
N>=n0 时
T
(
N
)
>
=
c
f
(
N
)
T(N)>=cf(N)
T(N)>=cf(N), 则记为
T
(
N
)
=
Ω
(
f
(
N
)
)
T(N)= \Omega(f(N))
T(N)=Ω(f(N))
Ω
\Omega
Ω的定义是T(N)的增长速度大于等于f(N) 例如
N
3
=
Ω
(
N
2
)
N^3=\Omega(N^2)
N3=Ω(N2)
定义三:
T
(
N
)
=
Θ
(
h
(
N
)
)
T(N)=\Theta(h(N))
T(N)=Θ(h(N))当且仅当
T
(
N
)
=
O
(
h
(
N
)
)
T(N)=O(h(N))
T(N)=O(h(N))和
T
(
N
)
=
Ω
(
h
(
N
)
)
T(N)=\Omega(h(N))
T(N)=Ω(h(N))
Θ
\Theta
Θ的定义是T(N)的增长速度与h(N)相同 例如
N
2
=
Θ
(
2
N
2
)
N^2=\Theta(2N^2)
N2=Θ(2N2)
计算时间复杂度的一般法则
法则一:for循环
一个for循环的运行时间至多是该for循环内部那些语句(包括测试)的运行时间乘以迭代的次数。
法则二:嵌套for循环
从里向外分析这些循环。在一组嵌套循环的内部的一条语句总的运行时间为该语句的运行时间乘以该组所有for循环的大小的乘积。
法则三:将各个语句的运行时间求和即可(其中的最大值就是语句的运行时间)
法则四:if/else语句的运行时间不会超过判断的运行时间再加上S1和S2中运行时间长者的总的运行时间