第9章 复杂度及其分析
本章主要介绍下列内容(教材第一章)
1. 算法的复杂度
2. 算法分析
3. 复杂度分析
4. 展开法
5. 母函数法
6. 差分法
课时分配:第1、2节三个学时,第3、4节三个学时,第5、6节共三个学时
重点、难点:算法复杂度分析的步骤、递归算法分析及递归方程解法
第一节 算法的复杂度
一、算法
1. 介绍有关统计数据(曹书p1 引言)
2. 算法的通俗定义
(一个)算法是由有限个指令(规则)组成的有序集合(序列)。这些指令确定了解
决某一问题的一个运算序列。
3. 算法的五大特征
① 有穷性
② 确定性
③ 能行性
④ 输入
⑤ 输出
4.求最大公因数的文字算法和高级语言算法。Cp2
5.算法与过程、程序的区别。Cp2
(有穷于无穷,描述多样性与执行多样性)
6.问题、问题实例及与算法运行的关系。p1
二、算法设计和算法分析的步骤 cp3
1.问题的陈述
2.模型的选择或拟制
3.算法设计和正确性证明
4.算法的程序实现
5.算法分析
三、评价算法的标准(p1)(详见1.2算法分析)
1.正确(算法已隐含该条)
2.易理解、易编程(上机实现)、易修改、可扩展
3.高效(节省时间与空间)
2、3条的辩证关系,谁放在首位,视具体情况而定。( p1,p2)
四、算法复杂度定义
1.决定算法复杂度的两个因素
① 问题实例大小
② 实例的具体情况(数据出现的顺序及概率)
2.三种复杂度的定义
本课程重点讨论时间复杂度
3. 用三个表说明算法复杂度的重要性(p2-3)
4.○与?的定义
运算规则:○(f+g)=○(max{f,g}), ○(Kf)=○(f)
5.最佳算法的概念定义(cp6)
6.按算法复杂度对问题分类(cp6)
7.复杂度函数中的常量因子不可忽视(cp6)
第二节 算法分析
一、评价分析算法的指标(标准)见p5-7 略讲
二、复杂度的具体分析指标
1.基本运算次数
2.问题规模量化
3.平均工作量与最坏情况工作量
空间与此类似。
第三节 复杂度分析
一、如何具体确定一个完整算法的时间复杂度
1.问题实例大小的量化
2.基本运算的选择
3.分析构成算法各种成分执行时所需工作量
4.利用大○规则求总和
二、举例进一步剖析讲解
三、用一次课时间补充递推关系的差分解法,内容详见第六节(补充)。
第四节 展开法
一、如何由具体问题的算法得到形如下式的递归方程
二、介绍解递归方程 Tn=
??
??? >+ =1n)n(daT 1nc
b
n
的展开法
(举例见第五节)
例12 p18 T n =
??
?
>+
=
? 1n1T2
1n1
1n
用母函数法解(定义T0=0)
(教材代公式,此处直接推导)
令母函数为:G(x)=T0 + T1x+T 2 x 2 +…+T n x n +…
2x G(x)=2 T 0 x+2 T1x 2 +2 T 2 x3 +…
G(x)- 2x G(x)= T0 +( T1-2 T0 ) x+( T 2 -2 T1) x 2 +…
G(x)= xxxxx ???=?? 1 121 11*21 1 = nnnn xxx ∑∑∑ ?=? )12()2(
T n =2n-1
展开法:T n =2 1?nT +1=2(2 2?nT +1)+1
=2 2 2?nT +2+1
= 1221 )21(1 ?=?? n
n
待定系数法(差分):
??
?
>=?
=
? 112
1
1
1
nTT
nT
nn
特征方程: 202 ==>=? ll
齐次解: T1(n)=c*2 n
令 T 2(n)= p*1n =〉p-2p=1 =〉p=-1 =〉
特解:T 2(n)=-1
通解:Tn(n)= c*2 n -1 代入初始条件T1=1 =>1=c*2-1=>c=1
故T n =2n-1为所求解。
例13
??
?
>+?=
=
? )1(2*)1(2)(
0)1(
1 ncnunu
u
n 展开法见教材p11
G(x)=u1x+u 2 x 2 + …+ u n x n +…
2x G(x)=2 u1x 2 +2 u 2 x3 +…+2 u 1?n x n +2 u n x 1+n +…
G(x)- 2x G(x)= u1x+( u 2 - 2 u1) x 2 +( u3 -2 u 2 ) x3 +…+( u n -2 u 1?n ) x n +…
= u1x+c*2 x 2 +c*2 2 *x3 +…+c*2 1?n *x n +…
= u1x+x*c*[2x+ (2x) 2 +…+ (2x) 1?n +…]
= u1x+x*c* nx21 2?
= xcx212
2
?
? G(x)= 2
2
)21(
2
x
cx
? =cx* x
x
21
2
? * x21
1
? =cx 与p19相同
或 =c/2*( xx212? ) 2
公式法(待定系数):
u 1 (n)=c12n或c12n-1
特解:u 2 (n)=(p1n+ p 2 )2n
代入:(p
1n+ p 2 )2
n=2(p
1(n-1)+ p 2 )2
n-1+c*2n-1
2(p1n+ p 2 )=2p1(n-1)+2 p 2 +c
? p1=c/2 p 2为任意常数
? u 2 (n)=(c/2*n+p) 2n =cn2n-1 (取p=0)
? u (n)= c12n+cn2n-1
由u1=0?2 c1+c=0 ? c1=-c/2
? u (n)= -c/2*2n + cn2n-1=-c*2n-1+cn*2n-1=c(n-1) 2n-1 n全部变成N
也可以用展开法直接求解18页例13第一式,不进行变换。
例14 推导:
j
k
j
jk 2)(
1
0
∑?
=
? =k∑
?
=
1
2
k
oj
j -∑
?
=
1
2
k
oj
jj
因为k∑
?
=
1
2
k
oj
j =k
21
)21(20
?
? k =(2 k -1)k
∑
?
=
1
2
k
oj
jj =∑
?
=
1
1
2
k
j
jj
=21+
2 2 +2 2 +
23 +23 +23 +…
2 2?k +2 2?k +2 2?k +…+2 2?k +… (k-2项)
2 1?k +2 1?k +2 1?k +…2 1?k +2 1?k (k-1项)
= 21 )21(221 )21(2...21 )21(221 )21(2
11222211
?
?+
?
?++
?
?+
?
? ???? kkkk
=(2 k -21)+(2 k -2 2 )+…+(2 k -2 2?k )+(2 k -2 1?k )
=(k-1) 2 k -[21+2 2 +…2 1?k ]
=(k-1) 2 k - 21 )21(2
11
?
? ?k
=(k-1) 2 k +2-2 k
=2 k (k-2)+2
所以 j
k
j
jk 2)(
1
0
∑?
=
? =(2 k -1)k-2 k (k-2)-2=2 1+k -k-2
另1:令s=∑
=
?
h
1j
1j2j =1*20 +2*21+3*2 2 +…+h*2 1?h
=>2s=1*21+2*2 2 +3*23 +…+h*2 h
=>s-2s=20 +21+2 2 +…+2 1?h -h*2 h
= 21 )21(2
0
?
? h - h*2 h
=>s= h*2 h - 2 h +1 亦即∑
?
=
?
1h
1j
1j2j =(h-2) 2 1h? +1
两边乘2得: ∑
?
=
1h
1j
j2j =(h-2) 2h+2
另2:令s(x)= ∑
=
?
h
1j
1jjx 则
∫ =dx)x(s ∑∫
=
?
h
1j
1j dxjx =∑
=
+
h
1j
j )cx( = hc
x1
)x1(x h +
?
?
s(x)= [ x1 )x1(x
h
?
? ] ' =
2
1hh
)x1(
)xx)x1(x)1h(1(
?
?+?+? +
∑
=
?
h
1j
1j2j =s(2)
=(1-(h+1)2 h )(-1)+2-2 1h+
=(h+1) 2 h -1+2-2 1h+ =2 h (h+1-2)+1
=(h-1) 2 h +1
h代为k-1且两端同乘2得:∑
?
=
1k
0j
j2j =2 2)2k(k +?
例15.①母函数:
令G(x)= T1x+T 2 x 2 +…+T n x n +…
2x G(x)=2 T 0 x+2 T1x 2 +2 T 2 x3 +…+2 T 1?n x n +2 T n x 1+n +…
G(x)- 2x G(x)= 2T1x+( T 2 -2 T1) x 2 +(T3 -2 T 2 ) x3 +…+( T n -2 T 1?n ) x n +…
=x+2 x 2 +3 x3 +…+n x n +…=∑
∞
=1j
jjx
=x
x 2 + x 2 +
x3 + x3 + x3 +
M
x 1?n + x 1?n + x 1?n +…+ x 1?n + (n-1项)
x n + x n + x n +…+ x n + x n + (n项)
M
x n ->0(n->∞) = x1 x? + x1x
2
? +…+ x1
x 1n
?
?
+ x1x
n
? +…
= x1 ...x...xx
n2
?
++++ =
x1
x1
x
?
? = 2)x1(
x
?
G(x)= x21 1? * x1 x? * x1 1?
=[ x21 1? - x1 x? ][ x1 1? ]
=[(2x)0 + (2x)1+…+(2x) n +…]-[x0 +x1+…+x n +…]]* x?1 1
[(21-1)x1+…+(2 n -1)x n ]*[ x0 +x1+…+x n +…]
结果中,x n的系数为:
(21-1)+( 2 2 -1)+…+(2 1?n -1)+ (2 n -1)
=21+ 2 2 +…+2 n -n= 21 )21(2 ??
n
-n=2 `1n+ -2-n
此即 T(n)= 2 `1n+ -2-n
另:∑
∞
=1j
jjx =x∑
∞
=
?
1j
1jjx 令G
1(x)= ∑
∞
=
?
1j
1jjx 则
G1(x)= ∫ ′)dx)x(G( 1 = )dxjx(
1j
1j ′∑ ∫
∞
=
? =
2)x1(
1
?
=>∑
∞
=1j
jjx =x G
1(x)= 2)x1(
x
?
②展开法:
T(n)=2T(n-1)+n
=2(2T(n-2)+n-1)+n=2 2 T(n-2)+2(n-1)+n
=2 2 (2T(n-3)+n-2)+2(n-1)+n
=23 T(n-3)+ 2 2 (n-2)+2(n-1)+n
M
=2 1?n T(1)+ 2 2?n *2+2 3?n *3+…+20 *n
=2 1?n *1+2 2?n *2+…+20 *n
∑?
=
?
1
0
2)(
n
j
jjn =2 1n+ -2-n (利用前面例14结论)
③待定系数法:
T n =
??
?
>+
=
? 12
11
1 nnT
n
n
l =2
T1(n)=c*2 n
令T 2 (n)=p1n+ p 2 则p1n+ p 2 =2 p1(n-1)+ 2p 2 +n =>
-p1n+2p1- p 2 =n =>
??
?
?==
?=
22
1
12
1
pp
p => T
2 (n)=-n-2
=>T(n)=c*2 n -n-2 由T(1)=1有c*2-1-2=1 =>c=2
例16 T n =
??
?
>+
=
? 1
11
1 ncaT
n
n
n
①母函数法:
G(x)= T1x+T 2 x 2 +…+T n x n +…
ax G(x)=aT1x 2 +aT 2 x3 +…+2 T 1?n x n +aT n x 1+n +…
G(x)- ax G(x)= T1x+( T 2 -aT1) x 2 +(T3 -aT 2 ) x3 +…+( T 1+n -a T n ) x 1+n +…
=x+c 2 x 2 +c3 x3 +…+c n x n +…=x+ cx1 xc
22
?
G(x)= ax1 x? + )ax1)(cx1 xc
22
??
=x[ ax1 1? + acc?
2
*( ax1 1cx1 1 ??? )]
=x*
??
??
?+??
? ∑ ∑∑ ∞
=
∞
=
∞
=
])ax()cx([acc)ax(
0n 0n
nn
2
0n
n
=x* n
0n
n
2
n
2
n x)a*
ac
cc*
ac
ca(∑∞
= ?
??+
=>T n =a 1n
2
1n
2
1n a*
ac
cc*
ac
c ???
???+
=a 1n? +c 2 * ac ac
1n1n
?
? ??
②待定系数法:
a. c≠ a:
此时c不是特征根,而 a=l => T1(n)=c1a n
令T 2 (n)=pc n => pc n =a pc 1?n + c n =>p= ac c?
T(n)= c1a n + acc
n
?
+1
代入T(1)=1的 a)ac( ca1c
2
1 ??=
=>T(n)=a 1?n + ac ac
nn
?
? ?? 11 *c 2
b. c=a:
即c是原方程特征根 即 c=l => T1(n)= c1* c n
令T 2 (n)= (p1n+ p 2 ) c n代入原方程:
(p1n+ p 2 ) c n =c*[ p1(n-1)+ p 2 ] c 1?n + c n =>
p1n+ p 2 = p1n- p1+ p 2 +1 => p1=1, p 2任意,可取为0
即T 2 (n)=n c n
故T n = c1c n +n c n 代入T(1)= 1,得:
c1c+1*c=1 => c1= c c?1
故:T n = c c?1 * c n +n c n = c 1?n +(n-1) c n
③直接展开法见教材p21
④间接展开法(变换后用公式(5)),不可取,不自然,不直观,省略。
P15例10的直接展开:
T(n)=3T( 2n )+2*n 5.1
=3[3T( 22n )+2*( 2n ) 5.1 ]+2*n 5.1
=3 2 T( 22n )+(3*2*2 5.1? +2)n 5.1
=3 2 [3T( 32n )+2( 22n ) 5.1 ]+(3*2*2 5.1? +2)n 5.1
=33 T( 32n )+(3 32 2*2* ? +3*2*2 5.1? +2)n 5.1
= n 5.1 [3T( 42n )+2( 32n ) 5.1 ]+(3 32 2*2* ? +3*2*2 5.1? +2)n 5.1
=3 4 T( 42n )+[33 2*2 5.4? +3*2*2 5.1? +2] n 5.1
…
kn 2= 3 k T(1)+[3 5.1)*1(1 2* ??? kk +…+3*2 5.1? +30 *20 ]*2* n 5.1
=3 k + *2*2*31 )2*31(*1 5.1
5.1
?
?
?
? kk n 5.1
=3 k + *2*
123
12*3
5.1
5.1
?
?? kk n 5.1
=3 k + *2*06.0 1)2(*3
5.1 ??kk
n 5.1
=3log 2 n+ 5.1
5.1log
*2*06.0 1*3
2
nn
n ??
换底nlog 2 3+ 03.0
5.1log2 ?? nn n
≈34 nlog 2 3-33 n 5.1
=>T(n) =O( nlog 2 3)
注:3log 2 n =3 2log
log
3
3 n
=(3log 3 n) 2log
1
3 =n 2log
1
3 =n 2log
3log
3
3
= nlog 2 3
P15例11的直接展开:
T n =2T
2
n +nlog 2 n=2
2 T
22
n +2n*log 2 n-n
=23 T
32
n +n/2
2 *log
2 (n/2)]+2nlog 2 n-n
=23 T
32
n +3nlog 2 n-2n-n
=23 [2T 42n + 323 2log2 nn ]+3nlog 2 n-2n-n
=2 4 T 42n +4nlog 2 n-3n-2n-n
n2k = 2 k T
1+{klog 2 n+[(k-1)+(k-2)+…+3+2+1]}n
=n+{(log 2 n) 2 - 2 )1)(11( ??+ kk }n
= n[1+(log 2 n)2 - 2 )1( ?kk ]
=n[1+(log 2 n)2 -1/2(log 2 n)2 +1/2*log 2 n]
=[(log 2 n)2 +log 2 n+2]]/2*n
第六节 差分法(递推关系解法补充)
(取自[美]C.L.Liu著,刘振宏译《离散数学基础》, 邮电出版社,1982.2, P258)
一、有关定义及术语
1. 递推关系或差分方程:对于序列 a0,a1,...,ar,...,一个关系到 ar与几个 ai(i<r)的方程式
就称为刻划该序列的递推关系或差分方程。
2. 边界条件或初始条件:只要给定了一个序列在一个或几个时刻的值,按递推关系,
我们就可以逐步地由 ar-1,ar-2,...求出ar,再由 ar,ar-1,...求出 ar+1等等。这些给定的值即称为边
界条件或初始条件。
3. 具有常系数的线性递推关系:形如 c0ar+c1ar-1+c2ar-2+...+ckar-k=f(r) (1)
的递推关系称为k阶常系数的线性递推关系。其中,所有的 ci为常数,c0和 ck均不为
0。
二、解法
通解=齐次解(方程右边等于0时的解)+特解(方程右边有f(r)时的解)
(一)齐次解的求法
形如 c0 α k+c1 α k-1+c2 α k-2+...+ck=0 (2) 的方程称为差分方程(1)
的特征方程。若 1α 是其特征根,则 r1Aα 就是(1)的一个齐次解。
1. k阶特征方程有k个特征根,假定特征方程的根都不相同,那么,可以验证
r
kk
r
22
r
11r AAAa α++α+α= L (3) 也是差分方程的一个齐次解(通项)。
其 中 k21 ,,, ααα L 是 不同的特征根,A1,A2,...,AK是由边界条件所确定的常数。
例:回顾斐波那契数列,其递推关系是:ar=ar-1+ar-2,对应的特征方程为
012 =?α?α , r22r11r21 AAa2 51,2 51 α+α=??=α+=α? 是一个齐次解。
其中A1,A2可由边界条件a0=1,a1=1来确定。
2. 某些根是重根,不妨令 1α 是m重根(m=1时下式就是(3)式的第一项), 则与 1α 对应
的齐次解为: ar=(A1rm-1+A2rm-2+...+Am-1r1+Amr0) r1α (4)
整个方程的齐次解由形如(4)式的齐次解相加而成。
例:ar+6ar-1+12ar-2+8ar-3=0
特征方程:α 3+6 α 2+12 α+8=0 ? (α+2)3=0 α=-2 是三重根,
故ar=(A1r2+A2r+A3)(-2)r是给定方程的一个齐次解。
(二)特解的求法
寻求特解,没有一般的方法。然而,在一些简单的情况下,用观察的方法可以得到特
解,下面讨论两种常见形式。
1. 当差分方程的右端属于rt形式时,那么对应的特解属于下述形式:
1tt
1t
2
t
1r prprprpa +
? ++++= L
其中p1,p2,...,pt,pt+1是待定常数。
例:用此法可得ar+5ar-1+6ar-2=3r2的一个特解为 288115r2417r41a 2r ++=
2. 当差分方程的右端属于 rβ 形式时,若β不是差分方程的特征根,则对应的特解是 rpβ 形
式;若β是m重根(m>=1),则对应的特解是如下形式:
ar=(p0rm+p1rm-1+p2rm-2+...+pm) rβ
例:用此法可得ar+5ar-1+6ar-2=42× r4 的一个特解为 2rrr 4416a +=×=
(三)通解的求法
假定差分方程的特征根是不同的,那么通解的形式为
)r(pAAAa rkkr22r11r +α++α+α= L 其中p(r)是一特解, k21 A,,A,A L 为任意常数。
有m重根时的通解可类似写出,只是相应项的系数不是常数,而是关于r的一个m-1
次多项式。
(四)满足边界条件的特解的求法
将k个边界条件代入通解,得到关于待定系数 k21 A,,A,A L 的 k阶线性方程组,从
中解出待定常数,代回通解所得的特解即为原差分方程满足边界条件的解。
例: rr2r1r 416)3(A)2(Aa ×+?+?= 是方程 ar+5ar-1+6ar-2=42× r4 的通解,假定边界条
件为 962a,278a 32 == ,则解方程组
??
?
+??=
++=
1024A27A8962
256A9A4278
21
21 我们得到 A
1=1,A2=2,因此,
差分方程满足边界条件的特解是: rrrr 416)3(2)2(a ×+?+?=