用增长的阶表示算法运行的效率
五种阶函数
同阶
低阶
高阶
严格低阶
严格高阶
注:非所有函数都可比
和式估计:分析代码运行时间
调和级数
放缩法
利用前后项之比小于常数放缩
积分近似法
两个错误的证明
这里偷换了概念,注意在使用数学归纳法时,假设m=n时
∃
n
0
,
c
s
t
.
n
>
=
n
0
、
s
u
m
k
=
1
n
<
=
c
n
\exists n_0,c st . n >=n_0 、sum_{k=1}^{n}<=cn
∃n0,cst.n>=n0、sumk=1n<=cn证明当m=n+1时
∃
n
1
,
s
t
.
n
>
=
n
1
,
∑
k
=
1
n
+
1
k
<
=
c
n
\exists n_1 ,st . n>=n_1,\sum_{k=1}^{n+1} k<=cn
∃n1,st.n>=n1,∑k=1n+1k<=cn,而这里显然不满足,而是把c变成了c1,但c在n增长的时候是不能变的
下面同理
递归方程的三种解法
替换法
思路:先猜测一个解,然后用第二数学归纳法证明
扩展边界条件:指n=1,2…时直接算出T(n),n>k时用大O阶
*换元法:括号里面有根号
*放缩再换元再夹逼
T
(
n
)
=
T
(
n
/
2
+
√
n
)
+
√
6046
T(n)=T(n/2+√n)+√6046
T(n)=T(n/2+√n)+√6046
递归树法
实际上就是图形化的求和
主定理
注意主定理的使用条件:
主定理的证明(递归树法)
-
首先对于所有n利用递归树可以证明
-
其次对于n为b的幂有
-
最后通过扩展主递归式中使用向下取整和向上取整的情况
加了取整函数后的递归树
适用性更强的Akra-buzzi定理
用于
f
(
n
)
和
n
lg
b
a
f(n)和n^{\lg_b a}
f(n)和nlgba不能用n的多项式来比较的情况