生成函数(Generating Function)/母函数

本文主要根据lcy@hdu老师的演示文稿改写而成,并加入了自己的一些注解。


观察以下等式:


可以看出:

x^2项的系数a[1]a[2]+a[2]a[3]+...+a[n-1]a[n]中所有的项等价于从{a1, a2, ..., an}取两个组合的全体;同理x^3项的系数中所有的项等价于从{a1, a2, .., an}取三个组合的全体...

若令a1=a2=...=a(n-1)=an=1,则每一种组合方式贡献一个计数,x^n项的系数An就是有多少种方式可以产生x^n。

用等式进一步描述就是:



生成函数(Generating Function)/母函数

对于序列a[0], a[1], a[2], ...,构造一函数G(x) = a[0] + a[1]x + a[2]x^2 + ...,则称G(x)是序列a[0], a[1], a[2], ...的生成函数。

例如(1+x)^n是序列C(n, 0), C(n, 1), C(n, 2)... C(n, n)的生成函数。

已知序列,可构造生成函数;已知生成函数,可得序列。


一个例子

若有1克,2克,3克,4克的砝码各一个,能称出哪几种重量?各有多少种可能的方案?

用1+x表示1个1克的砝码
用1+x^2表示1个2克的砝码
用1+x^3表示1个3克的砝码
用1+x^4表示1个4克的砝码

由于(1+x)(1+x^2)(1+x^3)(1+x^4)=1+x+x^2+2x^3+2x^4+2x^5+2x^6+2x^7+x^8+x^9+x^10,所以可以称出1~10克10种重量, 重量m的方案数就是x^m的系数。这里我要进一步说明两点:
  1. 严格说来,能称出的重量是0~10克共11种;其中0克呢,就是4个砝码一个都不选。理解这一点,对于我们理解(1+x)(1+x^2)(1+x^3)(1+x^4)这个式子有帮助:(1+x^k)这一项中的1,表示不选重量为k的砝码;x^k自然表示选重量为k的砝码。4个砝码一个都不选,那就是1*1*1*1=1,也就是最后结果的第一项啦。
  2. 这里利用了乘法中幂次相加的特性

又一个例子

求用1分,2分,3分邮票贴出不同数值的方案数。

这一例与上一例的差异在哪里呢?上一例不同重量的砝码各 只有一个,但这一例中不同面值的邮票却 有任意张

好的,我们照猫画虎,假设1分,2分,3分的邮票各有r, s, t张,那么只要把(1+x)^r * (1+x^2)^s * (1+x^3)^t这个式子展开即可得出结果啦~对吗?

错!为什么?我们来观察一个简单的例子:
若1分的邮票有两张,按照上面的写法(1+x)^2=1+2x+x^2...纳尼,凑出1分钱的额度居然有两种方法?哦...选第一张不选第二张、选第二张不选第一张,但是第一张1分钱邮票和第二张1分钱邮票是完全相同的,选谁都一样!上一个例子为何能乘在一起?因为1克的砝码和2克的砝码是完全不同的两种东东!

既然选谁都一样,那这一例的生成函数就应该这样写:

不选1分邮票、1分邮票选1张、1分邮票选2张、1分邮票选3张...不选2分邮票、2分邮票选1张、2分邮票选2张、2分邮票选3张...


你可能感兴趣的:(生成函数,母函数)