递归方程的求解

  • 递归方程的求解
    • 生成函数求解递归方程
      • 生成函数及其性质
      • 生成函数求递归方程
    • 用特征方程求解递归方程
    • 用递推法求解递归方程
      • 用递推法求解常系数递归方程
      • 用递推法求解变系数递归方程
    • 函数换名

递归方程的求解

@[递归方程, 生成函数, 递推法]

生成函数求解递归方程

生成函数及其性质。

定义 1 1 : a0 a 0 , a1 a 1 , a2 a 2 , 是一个实数序列,构造如下的函数:

G(z)=a0+a1z+a2z2+=k=0akzk G ( z ) = a 0 + a 1 z + a 2 z 2 + ⋯ = ∑ k = 0 ∞ a k z k

则称 G(z) G ( z ) 称为 a0 a 0 , a1 a 1 , a2 a 2 , 的生成函数。

生成函数的性质:
- 加法:设 G(z)=k=0akzk G ( z ) = ∑ k = 0 ∞ a k z k 是序列 a0 a 0 , a1 a 1 , a2 a 2 , 的生成函数, H(z)=k=0bkzk H ( z ) = ∑ k = 0 ∞ b k z k 是序列 b0 b 0 , b1 b 1 , b2 b 2 , 的生成函数,则:

αG(z)+βH(z)=αk=0akzk+βk=0bkzk=k=0(αak+βbk)zk α G ( z ) + β H ( z ) = α ∑ k = 0 ∞ a k z k + β ∑ k = 0 ∞ b k z k = ∑ k = 0 ∞ ( α a k + β b k ) z k

是序列 αa0+βb0 α a 0 + β b 0 , αa1+βb1 α a 1 + β b 1 , αa2+βb2 α a 2 + β b 2 , 的生成函数。

  • 移位:设 G(z)=k=0akzk G ( z ) = ∑ k = 0 ∞ a k z k 是序列 a0 a 0 , a1 a 1 , a2 a 2 , 的生成函数,则:

    zmG(z)=k=0akmzk z m G ( z ) = ∑ k = 0 ∞ a k − m z k

    是序列 a0 a 0 , a1 a 1 , a2 a 2 , 的生成函数。

  • 乘法:设 G(z)=k=0akzk G ( z ) = ∑ k = 0 ∞ a k z k 是序列 a0 a 0 , a1 a 1 , a2 a 2 , 的生成函数, H(z)=k=0bkzk H ( z ) = ∑ k = 0 ∞ b k z k 是序列 b0 b 0 , b1 b 1 , b2 b 2 , 的生成函数,则:

    G(z)H(z)=(a0+a1z+a2z2+)(b0+baz+b2z2+)=a0b0+(a0b1+a1b0)z+(a0b2+a1b1+a2b0)z2+=k=0ckzk G ( z ) H ( z ) = ( a 0 + a 1 z + a 2 z 2 + ⋯ ) ( b 0 + b a z + b 2 z 2 + ⋯ ) = a 0 b 0 + ( a 0 b 1 + a 1 b 0 ) z + ( a 0 b 2 + a 1 b 1 + a 2 b 0 ) z 2 + ⋯ = ∑ k = 0 ∞ c k z k

是序列 c0 c 0 , c1 c 1 , c2 c 2 , 的生成函数,其中 cn=k=0akbnk c n = ∑ k = 0 ∞ a k b n − k

  • z变换:设 G(z)=k=0akzk G ( z ) = ∑ k = 0 ∞ a k z k 是序列 a0 a 0 , a1 a 1 , a2 a 2 , 的生成函数,则:
    G(cz)=a0+a1(cz)+a2(cz)2+a3(cz)3+=a0+ca1z+c2a2z2+c3a3z3+ G ( c z ) = a 0 + a 1 ( c z ) + a 2 ( c z ) 2 + a 3 ( c z ) 3 + ⋯ = a 0 + c a 1 z + c 2 a 2 z 2 + c 3 a 3 z 3 + ⋯

是序列 a0 a 0 , ca1 c a 1 , ca2 c a 2 , 的生成函数,特别地

11cz=1+cz+c2z2+c3z3+ 1 1 − c z = 1 + c z + c 2 z 2 + c 3 z 3 + ⋯

是序列 1 1 , c c , c2 c 2 , c3 c 3 , 的生成函数。

生成函数求递归方程

递归关系式如下:

{h(n)h(1)=2h(n1)+1=1 { h ( n ) = 2 h ( n − 1 ) + 1 h ( 1 ) = 1

h(n) h ( n ) 作为系数,构造生成函数:

G(x)=h(1)x+h(2)x2+h(3)x3+=k=1h(k)xk G ( x ) = h ( 1 ) x + h ( 2 ) x 2 + h ( 3 ) x 3 + ⋯ = ∑ k = 1 ∞ h ( k ) x k

为了求解 h(n) h ( n ) 的值需要对 G(x) G ( x ) 进行演算:

G(x)2xG(x)=h(1)x+h(2)x2+h(3)x3+2h(1)x22h(2)x3=h(1)x+(h(2)2h(1))x2+(h(3)2h(2))x3+=x+x2+x3+=x1x G ( x ) − 2 x G ( x ) = h ( 1 ) x + h ( 2 ) x 2 + h ( 3 ) x 3 + ⋯ − 2 h ( 1 ) x 2 − 2 h ( 2 ) x 3 − ⋯ = h ( 1 ) x + ( h ( 2 ) − 2 h ( 1 ) ) x 2 + ( h ( 3 ) − 2 h ( 2 ) ) x 3 + ⋯ = x + x 2 + x 3 + ⋯ = x 1 − x

所以

G(x)=x(1x)(12x)=112x11x=(1+2x+22x2+23x3+)(1+x+x2+x3+)=(21)x+(221)x2+(231)x3+=k=1(2k1)xk G ( x ) = x ( 1 − x ) ( 1 − 2 x ) = 1 1 − 2 x − 1 1 − x = ( 1 + 2 x + 2 2 x 2 + 2 3 x 3 + ⋯ ) − ( 1 + x + x 2 + x 3 + ⋯ ) = ( 2 − 1 ) x + ( 2 2 − 1 ) x 2 + ( 2 3 − 1 ) x 3 + ⋯ = ∑ k = 1 ∞ ( 2 k − 1 ) x k

h(n)=2n1 h ( n ) = 2 n − 1

用特征方程求解递归方程

递归方程的形式如下:

{f(n)f(i)=a1f(n1)+a2f(n2)++akf(nk)=bi { f ( n ) = a 1 f ( n − 1 ) + a 2 f ( n − 2 ) + ⋯ + a k f ( n − k ) f ( i ) = b i

这种递归方程称为 k k 阶常系数线性非齐次递归方程。其通解形式为:
f(n)=f(n)+f(n) f ( n ) = f ( n ) + f ∗ ( n )

- 如果g(n)是n的m次多项式,即
g(n)=b0nm+b1nm1++bm1n+bm g ( n ) = b 0 n m + b 1 n m − 1 + ⋯ + b m − 1 n + b m
其中 bi b i 是常数,特解 f(n) f ∗ ( n ) 也是n的m次多项式:
f(n)=A0nm+A1nm1++Am1n+Am f ∗ ( n ) = A 0 n m + A 1 n m − 1 + ⋯ + A m − 1 n + A m
,其中 Ai A i 为待定系数。
- 如果 g(n) g ( n ) 具有以下指数形式:
g(n)=(b0nm+b1nm1++bm1n+bm)an(2.1) (2.1) g ( n ) = ( b 0 n m + b 1 n m − 1 + ⋯ + b m − 1 n + b m ) a n

其中 a,bi a , b i 为常数,如果 a a 不是特征方程的重根,特解 f(n) f ∗ ( n ) 为:
f(n)=(A0nm+A1nm1++Am1n+Am)an f ∗ ( n ) = ( A 0 n m + A 1 n m − 1 + ⋯ + A m − 1 n + A m ) a n

,其中 Ai A i 为待定系数。如果 a a 是特征方程的r重根,特解 f(n) f ∗ ( n ) 为:
f(n)=(A0nm+A1nm1++Am1n+Am)nran f ∗ ( n ) = ( A 0 n m + A 1 n m − 1 + ⋯ + A m − 1 n + A m ) n r a n

,其中 Ai A i 为待定系数。

用递推法求解递归方程

用递推法求解常系数递归方程

{f(n)f(0)=bf(n1)+g(n)=c { f ( n ) = b f ( n − 1 ) + g ( n ) f ( 0 ) = c
其中 b,c b , c 是常数, g(n) g ( n ) 是n的函数。
f(n)=b(bf(n2)+g(n1))+g(n)==cbn+i=1nbnig(i) f ( n ) = b ( b f ( n − 2 ) + g ( n − 1 ) ) + g ( n ) = ⋯ = c b n + ∑ i = 1 n b n − i g ( i )

用递推法求解变系数递归方程

{f(n)f(0)=g(n)f(n1)+h(n)=c { f ( n ) = g ( n ) f ( n − 1 ) + h ( n ) f ( 0 ) = c
其中 g(n),h(n) g ( n ) , h ( n ) 是n的函数。
f(n)=g(n)(g(n)f(n2)+h(n1))+h(n)==g(n)g(n1)g(1)(f(0)+i=1nh(i)g(i)g(i1)g(1)) f ( n ) = g ( n ) ( g ( n ) f ( n − 2 ) + h ( n − 1 ) ) + h ( n ) = ⋯ = g ( n ) g ( n − 1 ) ⋯ g ( 1 ) ( f ( 0 ) + ∑ i = 1 n h ( i ) g ( i ) g ( i − 1 ) ⋯ g ( 1 ) )

函数换名

对于分治法,函数 f(n) f ( n ) 是以 f(nm) f ( n m ) 表示递归的,因此,可以考虑令:

g(k)=f(mk)=f(n) g ( k ) = f ( m k ) = f ( n )
,然后就可以使用上述方法计算递归方程的解。

你可能感兴趣的:(软件,算法)