第01章.算法与算法复杂性
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
T(n) = nlogm k +
logm n1 j =0
k j f (n / mj ) ∑
二、算法复杂性
第 01 章 算 法 与 算 法 复 杂 性
递推方程的求解
生成函数法
对序列(a0, a1, ..),定义函数: g(z)=a0+a1z+a2z2+..+anzn+.. 称为序列(a0, a1, ..)的生成函数。 利用递推公式建立关于生成函数的定解方程 解定解方程得到生成函数的级数形式,其系数 即为序列的解。
b n ≤1 Tk(n) = pk Tk (n) (n T(k) +T(n 1 k) + cn n >1 k =0
∑
T (n) = ∑ pk Tk (n)
k =0
n 1
1 n 1 = ∑ Tk (n) n k =0
1 n 1 = ∑ [T (k ) + T (n 1 k ) + cn] n k =0
T ( n) =
第 01 章 算 法 与 算 法 复 杂 性
n +1 (n + 1)[2(n 1) 1] 2n 1 = T ( n 2) + c +c n 1 (n 1)n n
n +1 n 2(n 1) 1 2n 1 T (n 2) + c +c n n 1 n 1 n
n =1 1 Tn = 2Tn 1 + 1 n > 1
定义 g ( z ) = ∑ Tn z n
n =0
∞
g ( z ) = T1 z + T2 z 2 + T3 z 3 + Tn z n + 2T1 z 2 + 2T2 z 3 + 2Tn 1 z n + 第2 z g ( z) = 01 2 3 n 章(1 2 z ) g ( z ) = z + z + z + z +
由 lim g ( z ) = 1得 : g ( z ) =
z →0
1± 1 4z 解方程得 : g ( z ) = 2z
1 1 4z 2z
1 1 4z g ( z) = 2z
f ( x) = ∑
n =0
1 2
∞
f ( n ) (0) n x n!
令 f ( z ) = (1 4 z ) 1 1 1 2 f ' ( z ) = (4) (1 4 z ) 第 2
《算法设计与分析》
第01章 算法与算法复杂性
一、算法
第 01 章 算 法 与 算 法 复 杂 性
算法的概念 算法的性质 算法的描述
二、算法复杂性
第 01 章 算 法 与 算 法 复 杂 性
算法复杂性的概念
C = F(N, I, A) T(N, I) = ∑tiei(N, I) Tmax(N), Tmin(N), Tavg(N)
算 n 1 i 法 lim 由 (ax) = ax < 1 n →∞ 1 ax i =0 与 算 ∞ z n 法 : (1 2 z ) g ( z ) = z z = 得 复 1 z n =0 杂 性 z
∑
∑
∴ g ( z) =
(1 z )(1 2 z )
z g ( z) = (1 z )(1 2 z )
n =0
1 2
∞
∏ (2k 1) 2
k =0
n 1
n
n!
∑
∞
z
n
= 1+ ∑
n =1
∞
(2k 1) 2 n ∏
k =0
n 1
n!
zn
算 1 (1 4 z ) n! g ( z) = = n =1 法 2z 2z 与 n 1 算 (2k 1) 2 n 1 ∞ 法 k =0 = z n 1 = 复 n! n =1 杂 n 性 (2k 1) 2 n
1 3 (2n 1) 2 n n! 1 3 ( 2n 1) 2 4 2n 第 = = ( n + 1)! n! 01 (n + 1)!n!
章 算 (2n)! 1 n C2 n = 法 = n +1 (n + 1)!n! 与 算 法 复 1 杂 即由 n 个结点可构成 C 2nn 种不同形态的二叉树 n +1 性
n +1 n 1 2( n 2) 1 (n + 1)[2( n 1) 1] 2n 1 = T ( n 3) + c +c +c n 1 n 2 n2 (n 1) n n
n +1 ( n + 1)[2(n 2) 1] (n + 1)[2(n 1) 1] 2n 1 = T ( n 3) + c +c +c n2 (n 2)(n 1) ( n 1)n n ... = n +1 (n + 1)(2 1 1) (n + 1)(2 2 1) (n + 1)(2n 1) T (1) + c +c ++ c 2 1 2 23 n(n + 1)
k =0
n
∴ g ( z ) = ∑ Tn +1 z n
2 n =0 =0 ∞
∞
算 法 ∞ 与 z g 2 ( z) = Tn +1 z n +1 = n =0 算 法 复 g ( z) z g 2 ( z) = T = 1 0 杂 性
∑
∑T
n =1
n
zn
整理得 : z g 2 ( z ) g ( z ) + 1 = 0
第 01 章 算 法 与 算 法 复 杂 性
n +1 1 1 1 = b + 2c (n + 1) ( + + ) 2 2 3 n +1 n +1 < b + 2c (n + 1) ln(n + 1) 2
二、算法复杂性
第 01 章 算 法 与 算 法 复 杂 性
递推方程的求解
公式法
O(1) n =1 T(n) = kT(n / m) + f (n) n >1
1 2
(2k 1) 2 n ∏
k =0
n 1
zn
∑
∏
∑
n =0
∞
∏ (2k 1) 2 n
k =0
n
(n + 1)!
zn
∴ T ( n) =
∏
k =0
(n + 1)!
T (n) =
∏ (2k 1) 2 n
k =0
n
(n + 1)!
(1) 1 3 (2n 1) 2 n = ( n + 1)!
∏
∏
= ∏ (2k 1) 2 (1 4 z ) 2
n k =0
∴f
(0) = ∏ (2k 1) 2 n
k =0
n 1
由 f ( z) = ∑
n =0
∞
n 1 f ( n ) ( 0) n z 且 f ( n ) (0) = ∏ (2k 1) 2 n n! k =0
第 01 章
(1 4 z ) = ∑
n n +1 2k 1 = b + c (n + 1) ∑ 2 k =1 k ( k + 1)
n n +1 2k 1 T ( n) = b + c (n + 1) ∑ 2 k =1 k ( k + 1) n n +1 2k < b + c (n + 1) ∑ 2 k =1 k ( k + 1) n n +1 1 = b + 2c (n + 1) ∑ 2 k =1 k + 1
递归型算法的复杂性分析
int Hanoi( int n, int a, int b, int c ) { if (n<=0) return 0; Hanoi( n-1, a, c, b ); Move( n, a, c ); Hanoi( n-1, b, a, c ); return 1; }
c' n≤0 T(n) = 2T(n 1) + c n >1
二、算法复杂性
第 01 章 算 法 与 算 法 复 杂 性
递推方程的求解
代入法:对结果式进行预测,并用数学归纳 法进行证明。
0 n≤0 T(n) = 2T(n 1) +1 n >1
二、算法复杂性
第 01 章 算 法 与 算 法 复 杂 性
递推方程的求解
迭代法:将递推式展开,进行级数求和。
int QSort( List &L, int s, int t ) { if (s>=t) return 1; int k = Partition( L, s, t ); QSort( L, s, k-1 ); QSort( L, k+1, t ); return 1; } n1
二、算法复杂性
第 01 章 算 法 与 算 法 复 杂 性
Байду номын сангаас
递归型算法的复杂性分析
long FN( long n ) { if (n<=1) return 1; return n * FN(n-1); }
c' n ≤1 T(n) = T(n 1) + c n >1
二、算法复杂性
第 01 章 算 法 与 算 法 复 杂 性
法 与 n n 1 n2 (n 1) 2 T (n 1) = T (n 1) + c c 算 T ( n) 2 2 2 2 法 复 杂 n +1 2n 1 T ( n) = T (n 1) + c 性 n n
n +1 2n 1 T ( n) = T (n 1) + c n n
二、算法复杂性
第 01 章 算 法 与 算 法 复 杂 性
复杂性的度量
渐近性态 上界 f(N)=O(g(N)) 下界 f(N)= (g(N)) 阶 f(N)=θ(g(N))
二、算法复杂性
第 01 章 算 法 与 算 法 复 杂 性
算法复杂性的分析
size = M; for (int i=0; i<N; i++) S; for for (int j=0; j<N; j++) (int i=0;j=i; i++) i<N; if { (size>0) { S; } // 用O(1)的时间选择一个 的时间选择一个1~size范围内的值 的时间选择一个 范围内的值 t = select(size); size -= t; for (int j=0; j<t; j++) S; }
2 A B = 1
解得 : A = 1, B = 1
(2 z ) ∑ z = ∑ (2 n 1) z n ∑
n n n =0 n =0 n =0
∞
∞
∞
即:Tn=2n-1
二叉树计数问题: 由n个结点可以构成多少种不同形态的二叉树?
第 01 章 算 法 与 算 法 复 杂 性
k
n-1-k
1 n1 T(n) = ∑T(k) T(n 1 k) k=0
n = 0,1 n >1
1 Tn = n 1 TT ∑ k n 1 k k =0
2 ∞
n = 0,1 n >1
∞
定义 g ( z ) = ∑ Tn z n
n =0
∞
第 01 章X = n
g ( z ) = (∑ Tn z ) = ∑ X n z n
n 2 n =0 n=0
∑ Tk Tnk = Tn+1
1 2 1 1 2 2 f ' ' ( z ) = ( 1) (4) (1 4 z ) 2 2
01 1 章 f ( 3) ( z ) = 1 ( 1 1)( 1 2) (4) 3 (1 4 z ) 2 3
……
2 2
2
算 1 n 1 n 1 (n) n 2 法 f ( z) = ( k ) (4) (1 4 z ) 与 k =0 2 n 1 算 (2k 1) 法 1 n n n 2n k =0 2 复 = (1) (1) 2 (1 4 z ) n 2 杂 1 n 1 性 n (n)
A B A(1 2 z ) + B(1 z ) ( A + B) (2 A + B) z 设 g ( z) = + = = (1 z ) 1 2 z (1 z )(1 2 z ) (1 z )(1 2 z )
第 01 A+ B = 0 章 则
算 法 1 1 ∴ = 与 g ( z) = 1 2z 1 z 算 法 复 杂 性
T ( n) =
第 01 章 n
2 ∑ T (k ) + cn n k =0
n 1
n 1
2 n2 T (n 1) = ∑ T (k ) + c(n 1) n 1 k =0
n2 n 1 (n 1) 2 T (n 1) = ∑ T (k ) + c 2 2 k =0
n2 T ( n) = ∑ T ( k ) + c 2 2 k =0 算