组合数学笔记之四——“递推关系和生成函数”

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ArrowLLL/article/details/52460584

简单数列举例及应用

h1,h2,h3,,hn,

表示一个数列, hn 叫做序列的一般项或生成项。

算数数列

每一项都比前一项大一个常数 q 。 若给定初始项 h0 和常数 q 则序列唯一确定 :

h0,h0+q,h0+2q,,h0+nq,

有递推关系 hn=hn1+q , 一般项为 hn=h0+nq

并且可以知道算数数列的部分和(前n项和,n为任意非负整数)

Sn=(n+1)h0+qn(n+2)2

几何序列

每一项都是前一项的常数 q 倍。 若给定初始项 h0 和常数 q 则序列唯一确定 :

h0,qh0,q2h0,q3h0,,qnh0,

有递推关系 hn=qhn1 , 一般项为 hn=h0qn

也可以知道集合序列的部分和为

Sn=qn+11q1h0(n+1)h0(q1)(q=1)

斐波拉契(Fibonacci)序列

斐波拉契数列-百度百科

其递推关系为

fn=fn1+fn2

其部分和满足

Sn=fn+21

斐波拉契数满足公式

fn=15(1+52)n15(152)n

虽然斐波拉契数是整数,可是对这些显式公式却包含无理数 5 。而所有这些 5 又奇迹般地消失了。

线性齐次递推关系

h0,h1,h2,,hn,

是一个数列。如果存在量 a1,a2,,ak,ak0 和 量 bn (每一个量都有可能依赖于 n), 使得

hn=a1hn1+a2hn2++akhnk+bn(nk)

则称该序列满足k阶线性递推关系。

例如 错位排列 D0,D1,D2,,Dn, 满足递推关系

DnDn=(n1)Dn1+(n1)Dn2=nDn1+(1)n(n2)(n1)

第一个递推关系的阶为2,且 a1=n1,a2=n1bn=0 ,第二个关系的阶为 1, 且 a1=nbn=(1)n

由例子可知,量 a1,a2,,ak 可以是常数或依赖于 n 。 同样 量 bn 也可以是常数(可能为0)或依赖于 n

如果 bn 是常数0, 则线性递推关系成为齐次的,如果 a1,a2,,ak 是常数,则称递推关系具有常系数。这里只讨论求解常系数线性齐次递推关系, 即形如:

hn=a1hn1+a2hn2++akhnk(nk)

其中, a1,,ak 是常数且 ak0 的递推关系的一种特殊方法。所描述的方法成功与否依赖于能否找到与上式相关的某个个多项式方程的根。

递推关系可以重写为 :

hna1hn1a2hn2akhnk=0(nk)

一旦所谓的初始值即 h0,h1,h2,,hk1 的值能够给出,则满足上述递推关系的数列 h0,h1,h2,,hn, 就能够被唯一确定。

定理 q 为一非零数。则 hn=qn 是常系数线性齐次递推关系

hna1hn1a2hn2akhnk=0(ak0nk)
的解,当且仅当 q 是多项式方程
xka1xk1a2xk2ak=0
的一个根。如果多项式有 k 个不同的根 q1,q2,,qk ,则
hn=c1qn1+c2qn2++ckqnk
是下述意义下递推关系的一般解 : 无论给定 h9,h1,h2,,hk1 什么初始值,都存在常数 c1,c2,c3,,ck ,使得上述的 hn 的一般解是满足递推关系和初始条件的唯一的序列。

上述定理中关于x的多项式方程叫做该递推关系的特征方程,而它的k个根叫做特征根。由上述定理,如果特征根互异,那么 关于 hn 的一般式就是递推关系的一般解。

定理 q1,q2,,qt 是常系数线性递推关系

hna1hn1a2hn2akhnk=0(nk)
的特征方程的互异的根。 此时,如果 qi si 重根, 则该递推关系对 qi 的部分一般解为
H(i)n=(n1)Dn1+(n1)Dn2=(c1+c2n++csinsi1)qni

递推关系的一般解则是

hn=H(1)n+H(2)n++H(t)n

非齐次递推关系

非齐次递归关系,即在 hn 的递推关系式中, bn 项不为 0 时的递推关系。

例如

Hanoi塔问题中,将n个圆盘从一个针柱移动到另一个针柱上所必须的移动次数满足

hn=2hn1+1(n1)h0=0

这是一个1阶常系数线性递推关系,但却不是齐次的,因为出现了1这一项。 将 hn1 递归展开,可得 hn 的迭代式 :

hn=2n1++22+2+1

于是数 hn 是几何序列

1,2,22,,2n,

的部分和,即 hn 满足:

hn=2n121=2n1

常系数一阶线性递推关系的解法

现在我们来阐述求解常系数一阶线性递推关系,即形式为

hn=ahn1+bn(n1)

的递推解法。

类似于求解非齐次微分方程方法的离散模拟。可以总结如下:

  1. 求齐次关系的一般解;
  2. 求非齐次关系的一个特解。
  3. 将一般解和特殊解联合,确定一般解中出现的常数值,使得联合的解满足初始条件。

主要的困难在于找出步骤2的特解。在常系数一阶线性递推关系中的非齐次部分 bn , 存在某些尝试的特解类型。下面只叙述两种:

  1. 如果 bn 是n的k次多项式,那么寻找也是n的k次多项式的特解 hn 。因此尝试
    1. hn=r()bn=d()
    2. hn=rn+sbn=dn+e
    3. hn=rn2+sn+tbn=fn2+dn+e
  2. 如果 bn 是指数形式,那么寻找的特解也是指数形式。因此尝试
    hn=pdnbn=dn

求解

hn=2hn1+3n(n1)h0=2

由于齐次关系 hn=2hn1 只有一个特征根即 q=2 , 因此它的一般解为

hn=c2n(n1)

为求 hn=2hn1+3n(n1) 的一个特解,我们尝试

hn=p3n

要想 hn 是解, p 必须满足方程

p3n=2p3n1+3n

消元后,该方程化为

3p=2p+3p=3

因此
hn=c2n+3n+1

对常数的每一个选择都是一个解。现在要确定 c , 使得初始条件 h0=2 满足:

(n=0)c20+3=0

这就给出 c=1 , 问题的解是

hn=2n+3n+1(n0)

解答完毕。

要注意,用上述方法求解递推关系

hn=ahn1+bn(n1)
a=1 的情况下是行不通的。这时递归关系变成
hn=hn1+bn(n1)
而迭代产生
hn=h0+b1+b2++bn
因此在 a=1 时的解式与级数
b1+b2++bn
的求和相同。

生成函数

h0,h1,h2,,hn,

为一无穷序列。它的生成函数定义为无穷级数

g(x)=h0+h1x+h2x2+h3x3++hnxn+

g(x) 中, xn 的系数是无穷序列的第n项 hn , 从而 xn 作为 hn 的 “位置持有者”。 有限序列

h0,h1,h2,,hm

可以看成无穷序列

h0,h1,h2,,hm,0,0,

在这个序列中,除去有限项外所有其余的项都等于0。因此,每个有限序列都有一个生成函数

g(x)=h0+h1x+h2x2++hmxm

它是一个多项式。

m 是一正整数 。 关于二项式系数

C(m,0),C(m,1),C(m,2),,C(m,m)

的生成函数是

gm(x)=C(m,0)+C(m,1)x+C(m,2)x2++C(m,m)xm

根据二项式定理可知

gm(x)=(1+x)m

它以紧凑形式显示出关于二项式系数的序列信息。

常用生成函数:

  1. hn=1 的生成函数为 g(x)=1+x+x2+x3++xn+ 。其值为
    g(x)=11x
  2. α 是一个实数。由牛顿二项式定理, 二项式系数 C(α,0),C(α,1),C(α,2),,C(α,n), 的无穷序列的生成函数是
    g(x)==C(α,0)+C(α,1)x+C(α,2)x2++C(α,n)xn+(1+x)2
  3. k 是一个整数,并令序列 h0,h1,h2,,hn, 使 hn 等于 e1+e2++ek=n 的非负整数个数。从多重集的组合 知道 hn=C(n+k1,n) , 其生成函数为
    g(x)==n=0C(n+k1,n)xn1(1x)k

递归和生成函数

这一节介绍如何用生成函数求解常系数线性齐次递推关系。

定理

h0,h1,h2,,hn,
为满足线性齐次递推关系
h0+c1hn1++ckhnk=0,ck0,(nk)
的数列。则它的生成函数 g(x) 形如
g(x)=p(x)q(x)
其中, q(x) 为具有非零常数项的 k 次多项式, p(x) 是小于 k 次的多项式。反之,给定这样的 p(x) q(x) ,则存在序列 h0,h1,h2,,hn, , 满足形如递推关系公式的 k 阶常系数线性齐次递推关系,其生成函数由 p(x)q(x) 给出。

且在上述定理中, q(x) 满足

q(x)=1+c1x+c2x2++ckxk

p(x) 满足

p(x)=h0+(h1+c1h0)x+(h2+c1h1+c2h0)x2++(hk1+c1hk2++ck1h0)xk1

指数生成函数

对于其项可计数的序列,可以考虑关于单项式

1,x,x22!,,xnn!,

的生成函数更有用。这些单项式出现在 ex 的泰勒级数

ex=n=0xnn!=1+x+x22!++xnn!+

中。关于上述单项式序列的生成函数就做指数生成函数

定理 S 为多重集 n1a1,n2a2,,nkak ,其中 n1,n2,,,nk 均为非负整数。令 hn S 的 n-排列数。则序列 h0,h1,h2,,hn, 的指数生成函数 g(e)(x)

g(e)(x)=fn1(x)fn2(x)fnk(x)
给定,其中,对于 i=1,2,,k ,
fni(x)=h0+h1x+h2x22!++hnxnini!

确定用红色,白色和蓝色对一行n列棋盘的方格涂色的方法数 hn , 其中红方格的个数是偶数并且至少有一个蓝方格。

指数生成函数 g(e)(x)

g(e)(x)====(1+x22!+x44!+)(1+x1!+x22!+)(x1!+x22!+)ex+ex2ex(ex1)e3xe2x+ex1212n=03n2n+12xnn!

因此

hn=3n2n+12(n=1,2,)

以上です。

猜你喜欢

转载自blog.csdn.net/ArrowLLL/article/details/52460584
今日推荐