母函数又叫生成函数,是很吊的一种函数,半年之前与之有过一次邂逅,现在再次相遇便把握机会总结一下,也希望自己能够更深入的了解他。下面大多数列子和题目都来自互联网!
在我介绍母函数之前,先推荐一篇我很喜欢的文章:http://www.wutianqi.com/?p=596。我就是看着这片文章弄懂的母函数。
第一种母函数的应用:
生成函数最绝妙的是,某些生成函数可以化简为一个很简单的函数。也就是说,不一定每个生成函数都是用一长串多项式来表示的。比如,这个函数f(n)=1 (n当然是属于自然数的),它的生成函数就应该是g(x)=1+x+x^2+x^3+x^4+...(每一项都是一,即使n=0时也有x^0系数为1,所以有常数项)。再仔细一看,这就是一个有无穷多项的等比数列求和嘛。如果-1<x<1,那么g(x)就等于1/(1-x)了。在研究生成函数时,我们都假设级数收敛,因为生成函数的x没有实际意义,我们可以任意取值。于是,我们就说,f(n)=1的生成函数是g(x)=1/(1-x)。
现在我们引用《组合数学》上暴经典的一个例题。很多书上都会有这类题。
我们要从苹果、香蕉、橘子和梨中拿一些水果出来,要求苹果只能拿偶数个,香蕉的个数要是5的倍数,橘子最多拿4个,梨要么不拿,要么只能拿一个。问按这样的要求拿n个水果的方案数。
结合刚才的k个(1+x+x^2+x^3+x^4+...)相乘,我们也可以算出这个问题的生成函数。
g(x)=(1+x^2+x^4+...)(1+x^5+x^10+..)(1+x+x^2+x^3+x^4)(1+x)
=[1/(1-x^2)]*[1/(1-x^5)]*[(1-x^5)/(1-x)]*(1+x) (前两个分别是公比为2和5的几何级数,
第三个嘛,(1+x+x^2+x^3+x^4)*(1-x)不就是1-x^5了吗)
=1/(1-x)^2 (约分,把一大半都约掉了)
=(1-x)^(-2)=C(1,0)+C(2,1)x+C(3,2)x^2+C(4,3)x^3... (参见刚才对1/(1-x)^k的展开)
=1+2x+3x^2+4x^3+5x^4+....于是,拿n个水果有n+1种方法。我们利用生成函数,完全使用代数手段得到了答案!
我们最后看一个例子。我们介绍硬币兑换问题:我有1分、2分和5分面值的硬币。请问凑出n分钱有多少种方法。想一下刚才的水果,我们不难得到这个问题的生成函数:g(x)=(1+x+x^2+x^3+...)(1+x^2+x^4+...)(1+x^5+x^10+..)=1/[(1-x)(1-x^2)(1-x^5)]。
现在,我们需要把它变成通项公式。我们的步骤同刚才的步骤完全相同。我们把(1-x)(1-x^2)(1-x^5)展开,得到1-x-x^2+x^3-x^5+x^6+x^7-x^8。我们求出-1+x+x^2-x^3+x^5-x^6-x^7+x^8=0的解,得到了以下8个解:-1,1,1,1,-(-1)^(1/5),(-1)^(2/5),-(-1)^(3/5),(-1)^(4/5)。这个不是我解出来的,我还是用的Mathematica 5.0。不是我不想解,而是我根本不会解这个8次方程。这也是为什么信息学会涉及这些东西的原因:次数稍微一高,只好交给计算机解决了。于是,(1-x)(1-x^2)(1-x^5)=(1+x)(1-x)^3(1+(-1)^(1/5) x)()()() (省略不写了)。注意那个(1-x)^3。由于等根的出现,我们不得不把(1-x)^3所包含的(1-x)和(1-x)^2因子写进一会儿的分母里,不然会导致解不出合适的c来。你可以看到很多虚数。不过没关系,这些虚数同样参与运算,就像刚才的根式一样不会影响到最后结果的有理性。然后,我们像刚才一样求出常数满足1/(1-x)(1-x^2)(1-x^5)=c1/()+c2/(1-x)+c3/(1-x)^2+c4/(1-x)^3...+c8/()。这个解太复杂了,我用Mathematica解了几分钟,打印出了起码几十KB的式子。虽然复杂,但我确实是得到了通项公式。你有兴趣的话可以尝试用Mathematica解决一下1/[(1-x)(1-x^3)] (只有1分和3分的硬币)。解c的值时可以用SolveAlways[]函数。你可以亲眼见到,一个四五行的充满虚数的式子最后总是得到正确的整数答案。
下面出个题目:
1.有质量为1,2,3的砝码各一枚,问:
(1)可以称出多少种质量不同的东西?
(2)要称出质量为3的物品有几种方案?
2.如果上述砝码都有无数个,那对应的解答过程又是怎样?
第二种母函数的应用:如果对上面的“第一型母函数”(暂且这样命名吧),那下面的第二型母函数就不难理解了。
母函数对于组合类型数列的研究很有帮助,而指数型母函数可以很方便的拿来研究排列类型的数列。
例:考虑n个元素组成的多重集,其中a1重复了n1次,a2重复了n2次……ak重复了nk次,从中取r个排列,求不同的排列数。
如果根据母函数。取r个数组合,则组合数是:G(x)= (1+x+x^2+x^3)*(1+x+x^2)*(1+x+x^2+x^3)。
但现在我们要求的是排列数,根据排列和组合的关系,我们可以引入如下公式:
G(x) =(1+x+x^2/2!+x^3/3!)*(1+x+x^2/2!)*(1+x+x^2/2!+x^3/3!)
该公式就是对应的指数型母函数。
那么上面例子的指数型母函数就是:
G(x) =(1+x^1/1!+x^2/2!+……+x^n1/(n1)!)*(1+x^1/1!+x^2/2!+……+x^n2/(n2)!)*……*(1+x^1/1!+x^2/2!+………+x^nk/(nk!))。
设有数a0,a1,a2……
转换以后就是:G(x) = a0 +a1*(x^1)/1! + a2*(x^2)/ 2! + a3*(x^3)/3! + …… ak*(x^k)/k!+……
因为指数型母函数仍是一个形式幂级数,所以关于它们的加法、乘法、除法等运算还是按照形式幂级数的相应运算来做,不必重新定义.
下面这个列子大家就认真想想吧:
说,有1,2,3,4这四个数组成了一个五位数,要求1出现的次数不超过两次,但不能不出现;2出现的次数不超过1次;3出现的次数最多为3次,可以不出现;4出现的次数为偶数,求满足上述条件的数的个数。
答案是:215.
解答过程是美好的,尽情享受吧......