算法课件第一章1Introduction103.docVIP

  • 2
  • 0
  • 约3.42千字
  • 约 5页
  • 2017-09-02 发布于浙江
  • 举报
算法课件第一章1Introduction103

若不是常系数线性递归方程,则需要用生成函数法。 生成函数法应用举例: 先看一下A(x)*A(x)即A2(x)的展开式形状。 设A(x)=,则A2(x)=*= (a0+a1x+a2x2+a3x3+…+anxn+…)* (a0+a1x+a2x2+a3x3+…+anxn+…)= a02+(a0a1+a1a0)x+(a0a2+a1a1+a2a0)x2 +(a0a3+a1a2+a2a1+a3a0)x3+… + (a0an+a1an-1+…+an-1a1+ana0)xn+…。 求解下列非线性递归方程 已知an=a1an-1+a2an-2+ …+an-1a1 (n≥2) 且a1=1,a2=1,a3=2,a4=5,求an。令a0=0, 则上述方程可写为:an = a0an+a1an-1+ … +an-1a1+ana0 从2开始对等式两边分别求级数,则有 =(a0an+a1an-1+ … +an-1a1+ana0)*xn 设A(x)=是数列{a0, a1,a2,…,an,…}的 生成函数(幂函数形式),则有 A(x)-a1x-a0=(A(x))2-(a1a0+a0a1)x-a20 , 整理得(A(x))2-A(x)+x=0。令z=A(x),则有z2-z+x=0 求解此关于z的一元二次方程式,得A(x)= z=(1)/2 即A(x)应为1/2/2 ∵=, 即的幂级数展开式通项系数为bn=-,an=bn/2,而an为正数, ∴中符号取为负,于是有 A(x)=1/2-/2,an=(定义为1)。 此数称为Catalan数(有很多应用均涉及此数)。 算法分析中用到的其它一些常用数学方法: 1、求和转化为求积分: eg1:已知㏒n!=㏒n+㏒(n-1)+…+㏒2+㏒1= 求㏒n!的不含∑的表达式。 如下图,在区间[1,n+1]中, 曲线y=㏒x之下的面积为, 而㏒n!()则等于 曲线y=㏒ x之下n-1个小矩形的面积之和。 ∴㏒n!。另外不难看出, ㏒n!成立(n-1个小矩形均左移一个单位, 则可覆盖区间[1,n]上的曲线下的面积。) 于是求和就可转化为求积分。 用分部积分法,有=(xlnx-x)|= n㏑n – n + 1, 且㏒x=㏒e*㏑x (由x=elnx),∴ ㏒n!>=㏒e (n㏑n-n+1)=n㏒n-n㏒e+㏒e, ㏒n!<=(n+1)㏒(n+1)-(n+1)㏒e+㏒e, ∵n充分大时上述两项主部均为n㏒n, ∴㏒n!= ((n㏒n)。 e.g.2:类似的有:≤≤ ∴≤≤, ∴=(() eg3:=1+≤1+=1+㏑n, 另外≥=㏑(n+1),∴=((㏒n) eg4:著名的Stirling公式n!≈ 也是利用了上述的积分办法 (证明较复杂,省略。有兴趣可参看卢开澄书。) 2、代入法求解: e.g. T(n)=设n=2k(因此k=㏒n), 于是有:T(n) =2T(n/2) +cn*㏒n =2(2T(n/22)+c(n/2)*㏒(n/2))+cn*㏒n =22T(n/22)+cn*㏒(n/2)+cn*㏒n =…… =2kT(n/2k)+cn(㏒(n/2k-1)+㏒(n/2k-2)+……+㏒(n/20)) =dn+cn(㏒21+㏒22+……+㏒2k) =dn+cn=dn+cn=dn+cn+cn 若n(2k,则必有k,使得2k-1 n 2k,令n’=2k, 用上述方法可求得T(n’)。再由nn’,得T(n)T(n’)。 3、函数变形法求解: e.g. T(2k)= 令g(k)=T(2k), 则g(k) = 2g(k-1) + ck2k(k≥1)。 再令h(k)=g(k)/2k , 则有g(k)=2kh(k),且h(0)=g(0)=d。 于是得:2kh(k)=2(2k-1*h(k-1))+ck2k , 即有 h(k)=h(k-1)+ck,再用代入法,得 h(k)=h(k-1)+ck=h(k-2)+c(k-1)+ck=… =h(0)+c*=d+ck(k+1)/2,∴T(n)=T(2k)=g(k)=2kh(k)=2k(d+ck(k+1)/2) = dn+cn=dn+cn+cn 以上提供了一些求解递归方程的方法。但在实际应用中, 碰到最多得还是形如T(n)=a*T(n/b)+f(n)一类的递归方程, 式中a,b0且一般为正整数, 此类方程可(粗略地)按f(n)(()分为三种情况: (注意: 递归方程T(n)=a*T(n/b)的齐通解为c*, c为待定常数) 主定理: (参见Corman书P76) 若有ε 0, 使f(n)=O() (即f(n)的量级多项式地小于的量级), 则T(n)= ( ()。 若f(n)= (() (即f(n)的量级等于的量级), 则T(n) =(()。 若f(n)= ((), 则T

文档评论(0)

1亿VIP精品文档

相关文档