生成函数(母函数)
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)=f1∗f2∗f3=(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=f1∗f2∗f3=(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
xi大于0以上是关于生成函数(母函数)的主要内容,如果未能解决你的问题,请参考以下文章
矩量母函数(Moment Generating Function,mgf,又称:动差生成函数)