生成函数(常见幂级数、广义二项式定理、生成函数的应用)

课内课程笔记 同时被 2 个专栏收录
51 篇文章 2 订阅
5 篇文章 2 订阅

生成函数

引言

定义

实数序列 a 0 、 a 1 、 a 2 、 … … 、 a n a_0、a_1、a_2、……、a_n a0a1a2an生成函数,是无穷级数
G ( x ) = ∑ k = 0 ∞ a k ∗ x k = a 0 + a 1 ∗ x + a 2 ∗ x 2 + … … + a k ∗ x k + … … G(x)=\sum_{k=0}^{\infty} a_k*x^{k}=a_0+a_1*x+a_2*x^2+……+a_k*x^k+…… G(x)=k=0akxk=a0+a1x+a2x2++akxk+

上述的生成函数也被称为普通生成函数,因为还有其他类型的生成函数。
也就是说,我们将一个数的序列对应到一个函数,而这个函数的幂级数展开的各项系数就是这个序列。

有关幂级数的有用事实

形式幂级数

如果将级数的收敛问题忽略掉,也就是不关心幂级数的收敛域,这样的级数就称为形式幂级数。

幂级数的和、积

f ( x ) = ∑ k = 0 ∞ a k ∗ x k f(x)=\sum_{k=0}^{\infty} a_k*x^{k} f(x)=k=0akxk, g ( x ) = ∑ k = 0 ∞ b k ∗ x k g(x)=\sum_{k=0}^{\infty} b_k*x^{k} g(x)=k=0bkxk
则,


  • f ( x ) + g ( x ) = ∑ k = 0 ∞ ( a k + b k ) ∗ x k f(x)+g(x)=\sum_{k=0}^{\infty} (a_k+b_k)*x^{k} f(x)+g(x)=k=0(ak+bk)xk

  • f ( x ) g ( x ) = ∑ k = 0 ∞ ( ∑ j = 0 k a j ∗ b k − j ) ∗ x k f(x)g(x)=\sum_{k=0}^{\infty} (\sum_{j=0}^k a_j*b_{k-j})*x^{k} f(x)g(x)=k=0(j=0kajbkj)xk

广义二项式定理

  • 广义二项式系数
    u u u是实数,且 k k k是非负整数。那么广义二项式系数
    ( u k ) = { u ( u − 1 ) ∗ … … ∗ ( u − k + 1 ) , k > 0 1 , k = 0 \binom{u}{k}= \begin{cases} u(u-1)*……*(u-k+1), k>0\\ 1,k= 0\\ \end{cases} (ku)={u(u1)(uk+1),k>01,k=0

  • 当u为负整数,广义二项式系数为
    ( − n r ) = C ( − n , r ) = ( − 1 ) r C ( n + r − 1 , r ) \binom{-n}{r}=C(-n,r)=(-1)^rC(n+r-1,r) (rn)=C(n,r)=(1)rC(n+r1,r)

  • 广义二项式定理
    ( 1 + x ) u = ∑ k = 0 ∞ ( u k ) x k (1+x)^u=\sum_{k=0}^{\infty}\binom{u}{k}x^k (1+x)u=k=0(ku)xk
    ps 当u是正整数是,就是普通的二项式定理,因为 C ( u , k ) , u > k C(u,k),u>k C(u,k),u>k时为0。

常见的生成函数

  • 微积分中经典的级数
G(x) a k a_k ak
l n ( 1 + x ) = x − x 2 / x + x 3 / 3 ln(1+x) =x-x^2/x+x^3/3 ln(1+x)=xx2/x+x3/3+…… ( − 1 ) k + 1 / k (-1)^{k+1}/k (1)k+1/k
e x = ∑ k = 0 ∞ x k / k ! = 1 + x + x 2 / 2 + x 3 / 3 ! + … … e^x=\sum_{k=0}^{\infty}x^k/k!=1+x+x^2/2+x^3/3!+…… ex=k=0xk/k!=1+x+x2/2+x3/3!+ 1 / k ! 1/k! 1/k!
  • 二项式定理相关
G(x) a k a_k ak
( 1 + x ) n = ∑ k = 0 ∞ C ( n , k ) x k (1+x)^n=\sum_{k=0}^{\infty}C(n,k)x^k (1+x)n=k=0C(n,k)xk C ( n , k ) C(n,k) C(n,k)
( 1 + a x ) n = ∑ k = 0 ∞ a k C ( n , k ) x k (1+ax)^n=\sum_{k=0}^{\infty}a^kC(n,k)x^k (1+ax)n=k=0akC(n,k)xk C ( n , k ) a k C(n,k)a^k C(n,k)ak
  • 广义二项式定理相关
G(x) a k a_k ak
1 / ( 1 − x ) = ∑ k = 0 ∞ x k 1/(1-x)=\sum_{k=0}^{\infty}x^k 1/(1x)=k=0xk1
1 / ( 1 − a x ) = ∑ k = 0 ∞ a k x k 1/(1-ax)=\sum_{k=0}^{\infty}a^kx^k 1/(1ax)=k=0akxk a k a^k ak
1 / ( 1 − x r ) = ∑ k = 0 ∞ x r k 1/(1-x^r)=\sum_{k=0}^{\infty}x^{rk} 1/(1xr)=k=0xrk
1 / ( 1 − x ) 2 = ∑ k = 0 ∞ ( k + 1 ) x k 1/(1-x)^2=\sum_{k=0}^{\infty}(k+1)x^k 1/(1x)2=k=0(k+1)xk k + 1 k+1 k+1
1 / ( 1 − x ) n = ∑ k = 0 ∞ C ( n + k − 1 , k ) x k 1/(1-x)^n=\sum_{k=0}^{\infty}C(n+k-1,k)x^k 1/(1x)n=k=0C(n+k1,k)xk C ( n + k − 1 , k ) C(n+k-1,k) C(n+k1,k)

使用生成函数解决计数问题

不定方程的解的个数

e 1 + e 2 + … … + e n = m e_1+e_2+……+e_n=m e1+e2++en=m
求非负整数解的方案数。
可以用隔板法求出得 C ( m + n − 1 , m ) C(m+n-1,m) C(m+n1,m)

利用生成函数的思想:
( 1 + x 1 + x 2 + … … x m ) ( 1 + x 1 + x 2 + … … + x m ) ( 1 + x 1 + x 2 + … … + x m ) ( 1 + x 1 + x 2 + … … + x m ) … … ( n 项 ) (1+x^1+x^2+……x^m)(1+x^1+x^2+……+x^m)(1+x^1+x^2+……+x^m)(1+x^1+x^2+……+x^m)……(n项) (1+x1+x2+xm)(1+x1+x2++xm)(1+x1+x2++xm)(1+x1+x2++xm)n
那么 x m x^m xm项的系数就是原问题的方案数。
这在 e 1 、 e 2 、 … … e_1、e_2、…… e1e2有约束限制的时候,更显优势。

比如
e 1 + e 2 + … … + e 3 = 17 e_1+e_2+……+e_3=17 e1+e2++e3=17,且 2 < = e 1 < = 5 、 3 < = e 2 < = 6 、 4 < = e 3 < = 7 2<=e1<=5、3<=e2<=6、4<=e3<=7 2<=e1<=53<=e2<=64<=e3<=7
那么上述解的个数是
( x 2 + x 3 + x 4 + x 5 ) ( x 3 + x 4 + x 5 + x 6 ) ( x 4 + x 5 + x 6 + x 7 ) (x^2+x^3+x^4+x^5)(x^3+x^4+x^5+x^6)(x^4+x^5+x^6+x^7) (x2+x3+x4+x5)(x3+x4+x5+x6)(x4+x5+x6+x7) x 17 x^{17} x17项的系数。

  • 有这样的一个例子:
    有一堆的1元、2元、5元硬币,数量不限,用它们组和成总和为 r r r元。
    有多少方案。

完全背包问题的方案数

  • 动态规划解法

这其实是一个完全背包问题求方案数的问题。
f [ i ] [ j ] = ∑ k = 0 m a x K f [ i − 1 ] [ j − k ∗ v ] f[i][j] = \sum_{k=0}^{maxK} f[i-1][j-k*v] f[i][j]=k=0maxKf[i1][jkv]
当然可以再使用递推关系式优化成
f [ i ] [ j ] f[i][j] f[i][j] = f [ i − 1 ] [ j ] + f [ i ] [ j − v ] f[i-1][j]+f[i][j-v] f[i1][j]+f[i][jv]

  • 生成函数解法
    仿照我们上面的解法,
    方案数就是
    ( 1 + x + x 2 + x 3 + … … ) ( 1 + x 2 + x 4 + x 6 + … … ) ( 1 + x 5 + x 10 + x 15 + … … ) (1+x+x^2+x^3+……)(1+x^2+x^4+x^6+……)(1+x^5+x^{10}+x^{15}+……) (1+x+x2+x3+)(1+x2+x4+x6+)(1+x5+x10+x15+)
    x r x^r xr的系数。
    第一项表示选择1元硬币,比如第一项中的 x 7 x^7 x7表示选了7个一元硬币,如此推知,每一项实际上对应着DP过程中考虑每一个物品。

有顺序的背包问题的方案数

  • 动态规划解法
    这种解法类似于跳楼梯问题,每次跳一级或者两级,跳到100级有多少中跳法。
    递推方程: f [ i ] = f [ i − 1 ] + f [ i − 2 ] + f [ i − 5 ] f[i]=f[i-1]+f[i-2]+f[i-5] f[i]=f[i1]+f[i2]+f[i5]

  • 生成函数解法
    考虑恰好一共选了 n n n个硬币产生 r r r元的方案数,因为考虑了顺序,
    所以此时的方案数为 ( x + x 2 + x 5 ) n (x+x^2+x^5)^n (x+x2+x5)n x r x^r xr的系数
    因为可以用任意多次硬币去形成 r r r元,所以按照加法原理。
    总方案数是
    1 + ( x + x 2 + x 5 ) + ( x + x 2 + x 5 ) 2 + ( x + x 2 + x 5 ) 3 + … … 1+(x+x^2+x^5)+(x+x^2+x^5)^2+(x+x^2+x^5)^3+…… 1+(x+x2+x5)+(x+x2+x5)2+(x+x2+x5)3+ x r x^r xr的系数。

使用生成函数求解递推关系

通过寻找生成函数的显式公式来求解满足递推关系和初始条件的解。
不过这种方案具有很大的局限性。
如果可以使用求解线性递推关系的那种方案,生成函数法并不是首选方案。

举一例说明:

a n = 8 ∗ a n − 1 + 1 0 n − 1 ① a_n=8*a_{n-1}+10^{n-1}① an=8an1+10n1
两边同乘 x n x^n xn:
a n ∗ x n = 8 ∗ a n − 1 x n + 1 0 n − 1 ② a_n*x^n=8*a_{n-1}x^n+10^{n-1}② anxn=8an1xn+10n1
两边从 n = 1 n=1 n=1开始求和:
G ( x ) − 1 = ∑ n = 1 ∞ a n ∗ x n = ∑ n = 1 ∞ ( 8 ∗ a n − 1 ∗ x n + 1 0 n − 1 ∗ x n ) = 8 x ∑ n = 1 ∞ ( a n − 1 ∗ x n − 1 ) + x ∗ ∑ n = 1 ∞ 1 0 n − 1 x n − 1 = 8 x G ( x ) + x / ( 1 − 10 x ) G(x)-1 = \sum_{n=1}^{\infty}a_n*x_n\\ =\sum_{n=1}^{\infty}(8*a_{n-1}*x^n+10^{n-1}*x^n)\\ =8x\sum_{n=1}^{\infty}(a_{n-1}*x^{n-1})+x*\sum_{n=1}^{\infty}10^{n-1}x^{n-1}\\ =8xG(x)+x/(1-10x) G(x)1=n=1anxn=n=1(8an1xn+10n1xn)=8xn=1(an1xn1)+xn=110n1xn1=8xG(x)+x/(110x)
求出
G ( x ) = ( 1 − 9 x ) / ( ( 1 − 8 x ) ( 1 − 10 x ) ) = 1 / 2 ( 1 / ( 1 − 8 x ) + 1 / ( 1 − 10 x ) ) = 1 / 2 ( ∑ 0 ∞ 8 n + ∑ 0 ∞ 1 0 n ) x n G(x)=(1-9x)/((1-8x)(1-10x))\\ = 1/2(1/(1-8x)+1/(1-10x))\\ = 1/2(\sum_{0}^{\infty}8^n+\sum_{0}^{\infty}10^{n})x^n\\ G(x)=(19x)/((18x)(110x))=1/2(1/(18x)+1/(110x))=1/2(08n+010n)xn

所以,
a n = 1 / 2 ( 8 n + 1 0 n ) a_n=1/2(8^n+10^n) an=1/2(8n+10n)

使用生成函数证明恒等式(略)

  • 5
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值