生成函数(母函数)

Posted Jozky86

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成函数(母函数)相关的知识,希望对你有一定的参考价值。

参考文章:
生成函数(母函数)——目前最全的讲解
《小学生都能看懂的生成函数从入门到升天教程》《生成函数全家桶》
Acwing 进阶课程–生成函数

引入

任意给定一个无限长的序列 a 0 , a 1 . . . . a n . . . . a_{0},a_{1}....a_{n}.... a0,a1....an....
定义函数 g ( x ) = a 0 x 0 + a 1 x 1 + a 2 x 2 + . . . + a n x n + . . . g(x)=a_{0}x^{0}+a_{1}x^{1}+a_{2}x^{2}+...+a_{n}x^{n}+... g(x)=a0x0+a1x1+a2x2+...+anxn+...
这是一个无穷级数,一般设x的取值范围为:-1<x<1。显然这个无穷级数收敛,我们可以在x取向正无穷时得到该无穷级数的值
我们称这个函数g(x)为序列的生成函数
我们不难看出
这么讲太抽象了,看一些例题就知道了

例题:

例题1 :砝码问题:

有三个砝码,分别是1g,2g,3g,求用这三个砝码一共能凑出多少个不同重量,并求每个重量的组成方案

用生成函数来解决这个问题:
我们将这个问题拆分成几个独立的子问题,然后利用乘法原理计算。在本题中,利用乘法原理来考虑每个砝码的选择方式。
在生成函数中,乘法原理可以映射到多项式乘法
对于每个砝码有选和不选两个方式
1个1g砝码可以看作是 f 1 = x 0 + x 1 f1=x^0+x^1 f1=x0+x1, x 0 x^0 x0表示不取(重量为0), x 1 x^1 x1表示只取一个
1个2g砝码可以看作是 f 2 = x 0 + x 2 f2=x^0+x^2 f2=x0+x2, x 0 x^0 x0表示不取, x 2 x^2 x2表示只取两个
1个3g砝码可以看作是 f 3 = x 0 + x 3 f3=x^0+x^3 f3=x0+x3, x 0 x^0 x0表示不取, x 3 x^3 x3表示只取三个
那么生成函数就是每个方案数的乘积 :
g ( x ) = f 1 ∗ f 2 ∗ f 3 = ( 1 + x 1 ) ∗ ( 1 + x 2 ) ∗ ( 1 + x 3 ) = 1 + x + x 2 + 2 x 3 + x 4 + x 5 + x 6 g(x)=f1*f2*f3=(1+x^1)*(1+x^2)*(1+x^3)=1+x+x^2+2x^3+x^4+x^5+x^6 g(x)=f1f2f3=(1+x1)(1+x2)(1+x3)=1+x+x2+2x3+x4+x5+x6
最终算式中的 1 + x + x 2 + 2 x 3 + x 4 + x 5 + x 6 1+x+x^2+2x^3+x^4+x^5+x^6 1+x+x2+2x3+x4+x5+x6就说明了0g的方案是1,3g的方案是2, s s s克的方案数就是 a x s ax^s axs的系数a,指数表示重量,系数表示方案数

例题2:砝码升级版

有三个砝码,分别是1g(共两个),2g(无数个),3g(共一个),求凑出4g重量的组成方案数
生成函数:
f 1 = ( 1 + x + x 2 ) f1=(1+x+x^2) f1=(1+x+x2)
f 2 = ( 1 + x 2 + x 4 + x 6 + . . . . . . ) f2=(1+x^2+x^4+x^6+......) f2=(1+x2+x4+x6+......)
f 3 = ( 1 + x 3 ) f3=(1+x^3) f3=(1+x3)
f = f 1 ∗ f 2 ∗ f 3 = ( 1 + x + x 2 ) ∗ ( 1 + x 2 + x 4 + x 6 + . . . . . . ) ∗ ( 1 + x 3 ) f=f1*f2*f3=(1+x+x^2)*(1+x^2+x^4+x^6+......)*(1+x^3) f=f1f2f3=(1+x+x2)(1+x2+x4+x6+......)(1+x3)
凑出4g重量的组成方案数有:
1 , x 4 , 1 1 ,x^4,1 1,x4,1
x , 1 , x 3 x,1,x^3 x,1,x3
x 2 , x 2 , 1 x^2,x^2,1 x2,x2,1
一共有三个方案, x 4 x^4 x4的系数是3

例题3:苹果选择

现在有n种苹果,每种苹果无限个,问选k个苹果的方案数

方法一(隔板法):

我们先不用生成函数,用组合数来做:
我们设第i种苹果选了xi个,那么有 ∑ i = 1 n x i = k , x i > = 0 \\sum_{i=1}^{n}x_{i}=k,x_{i}>=0 i=1nxi=k,xi>=0
我们用隔板法来做,需要 x i 大 于 0 x_{i}大于0 xi0以上是关于生成函数(母函数)的主要内容,如果未能解决你的问题,请参考以下文章

生成函数(母函数)

矩量母函数(Moment Generating Function,mgf,又称:动差生成函数)

母函数及其应用+模板

ACM数论之旅13---母函数(又叫生成函数)(痛并快乐着(╭ ̄3 ̄)╭)

浅析母函数

HDU 2082 母函数模板题