生成函数(母函数)
法国数学家拉普拉斯(对!就是那个拉普拉斯变换的发明者)在他的著作中提出了生成函数的概念
一、普通生成函数解决组合问题
我认为生成函数解决组合问题就是把问题转换成二项式或递推关系问题的方法
问题
用1元、5元、10元三种纸币能拼出多少种100元的方案?
这其实是一个组合问题,用三种纸币组合成100元
这种题用生成函数来做就很方便
下面我们来分析这道题
-
分析1元硬币的使用情况(五元十元可类比)
一元硬币在最终的方案中可能用到0次、1次、2次.......
好,接下来,我们尝试将这个问题转换成二项式问题
我们将0次写为x0x^0x0,1次写为x1x^1x1,2次写成x2x^2x2
则,针对1元硬币的所有情况就可以表示为A=x0+x1+x2...A=x^0+x^1+x^2...A=x0+x1+x2...
类比到其他两种硬币:
五元硬币:B=x0+x5+x10...B=x^0+x^5+x^{10}...B=x0+x5+x10...
十元硬币:C=x0+x10+x20...C=x^0+x^{10}+x^{20}...C=x0+x10+x20...
所以硬币组合的所有情况就是将以上三个多项式相乘
AllCount=(x0+x1+x2...)∗(x0+x5+x10...)∗(x0+x10+x20...)AllCount=(x^0+x^1+x^2...)*(x^0+x^5+x^{10}...)*(x^0+x^{10}+x^{20}...)AllCount=(x0+x1+x2...)∗(x0+x5+x10...)∗(x0+x10+x20.