对于母函数刚开始的时候笔者也觉得这实在是太难啊,但是在我静下心来的时候开始看的时候才发现原来是这么简单啊;
对于母函数一般可分为普通型母函数和指数型母函数这两种类型;
普通型母函数形式: f(x) = a0 + a1x + a2x^2 + ....+ anx^n;
指数型母函数形式: f(x) = a0 + a1(x)/1! + a2(x^2)/2! + ....+an(x^n)/n!;
母函数的定义:
在数学中,某个序列的母函数是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息;
也就是说母函数是针对某个序列的,它的外在表现形式是一种形式幂级数,比如说有这样一个序列a0,a1,....,an,构造一个函数
f(x) = a0+a1x+a2x^2+.....+anx^n;
则f(x)是序列a0,a1,a2,......,an的母函数。比如说最常见的(1+x)^n,它是序列C(n,1),C(n,2),C(n,3),.....C(n,n)的母函数;
普通母函数解决的问题:
1.口袋中有白球2个,红球3个,黄球1个,从袋中摸出3个球有几种取法?
和上面描述的例子类似,我们可以用次数代表球的个数,多项式的每一项前面的系数代表取法的种树。
可以很容易地写出下面这个式子:
(1+x+x2)(1+x+x2+x3)(1+x)
(1+x+x2)表示有白球2个,1表示白球不取,x代表取1个白球,x2代表取2个白球,即用x的次数表示取球的个数,后面的也是类似。那么这个多项式的乘积就把所有的情况都表示出来了,对于最终乘积的每一项anxn,表示取n个球有an种取法。
2.有若干个1克,2克,5克的砝码,要称出20克的重量,有多少种称法?
这里不限制砝码的个数,无所谓,照样写出母函数:
(1+x+x2+x3+......xk+....)(1+x2+x4+x6......+x2n+......)(1+x5+x10+......x5m+......)
因为要称出20克,所以只需要找找到结果中次数为20 的那一项就可以得到结果。
3.同样对于正数划分也可以解决,比如有整数20,划分成1,2,5,有多少种划分方法?
解法和2的类似。
还有一类题目和这类似,有n个球放到m个盒子中,有多少种不同的放法?
(1+x+x2+x3+...xk+...)(1+x+x2+x3+...xk+...)(1+x+x2+x3+...xk+...)总共有m项,然后找出乘积中次数为n的那一项系数。
指数型母函数:
1.口袋中有白球2个,红球3个,黄球1个,任取3个作为一个排列,总共有多少种排列?
类似地用指数型母函数解决
用(1+x/1!+x2/2!)表示取白球0个,1个或者2个
那么(1+x/1!+x2/2!)(1+x/1!+x2/2!+x3/3!)(1+x/1!)来表示所有的排列结果。
=1+3x+4x2+19x3/6+19x4/12+6x5/12+x6/12
=1+3*(x/1!)+8*(x2/2!)+19*(x3/3!)+38*(x4/4!)+60*(x5/5!)+60*(x6/6!)
找到次数为3的那一项,系数为19,那么总共有19种排列。
2.用1,2,3,4能够组成多少个5位数,要求1出现2次或者3次,2出现0次或者1次,3没有限制,4只出现偶数次。
(x2/2!+x3/3!)(1+x)(1+x/1!+x2/2!+x3/3!+.....xk/k!+....)(1+x2/2!+x4/4!+......+x2n/(2n)!+......)
每个式子的含义就不多解释了,读者应该能看懂它的含义。最终的结果就是x5/5!这一项的系数。
用代码去实现母函数的计算过程很简单,它是模拟我们人工计算多项式乘积的过程,比如有多项式H1*H2*H3......
我们先计算H1和H2的乘积,得到结果H',再用H'和H3相乘......依次类推下去,直到得到最终的结果。