介绍
母函数是组合数学中相当重要的一个知识点,可以用来解决一些排列组合问题,还有所有的常系数线性齐次递推问题。如果系数不是常数,需要根据具体情况进行处理。
具体的内容可以看组合数学相关书籍或者大佬的博客,大佬的另一篇博客
由于大佬总是想当然地把别人当成大佬,一些内容对(像我这种)蒟蒻来说不是很友好,在这里讲一下母函数的基础。(研究母函数时,钦定(|x|<1)),这样,由等比数列求和公式有:
(frac{1}{1-x}=sum_{i=0}^infty x^i=1+x+...+x^{infty})
(frac{1}{1-kx}=sum_{i=0}^infty k^ix^i=1+kx+...+k^{infty}x^{infty})
1.普通型母函数。
假设有一个数列(a),那么它的母函数其实就是一个关于(x)的多项式,(x^n)的系数为(a_n),对于已知通项的数列,其母函数可以直接写出来。
而对于未知的数列,主要分为两类:递推型和组合型。
递推型就是利用错位相消,举个栗子:
(a_n=3a_{n-1}+10a_{n-2}),(a_0=1,a_1=2)
移项,得(a_n-3a_{n-1}-10a_{n-2}=0),设(a_n)的母函数为(G(x))
(quadquad G(x)=a_0+a_1x+quadquad a_2x^2+quadquad a_3x^3...)
(-3xG(x)=quad -3a_0x+(-3)a_1x^2+(-3)a_2x^3...)
(-10x^2G(x)=quadquadquadquad -10a_0x^2+(-10)a_1x^3)
三行相加,可以发现等式右侧除了第一行的第1,2项和第二行的第1项外全消掉了。
所以我们可以得到((1-3x-10x^2)G(x)=a_0+a_1x-3a_0x=1-x),即(G(x)=frac{1-x}{1-3x-10x^2}),生成函数就求出来了,那如果我们还要求(a_n)的通项呢?
对于这种东西,我们可以把他化成(frac{k1}{x-A}+frac{k2}{x-B})这种形式,其中(A)和(B)由分母的因式分解唯一确定,然后(k1,k2)可由待定系数法解得。
然后对于(frac{k}{x-A}),总可以化成(k'*frac{1}{1-Nx}),就是(k'sum_{i=0}^infty N^ix^i),找出(x^k)的系数就是(a_n),如果母函数拆开成多个该类分式的话各部分相加就好。
具体计算就不算了。
PS:一部分非齐次线性递推其实也可以这样解,比如(a_n-3a_{n-1}-10a_{n-2}=f(n)),按照上述方法错项后会剩下一个等比数列和前几项余项。一般的,只要f(n)有求和公式,都可以用母函数求解。
组合型就是利用组合意义构造多项式,举个栗子:
假设现在有(a_1)个红球,(a_2)个黄球,(a_3)个白球,(a_4)个黑球,从中取(k)个球,这(k)个球的颜色组合有多少种?
那么可以构造函数
做乘法时,如果我在第一个括号中选了(x^i)这一项,代表我选了(i)个红球,后面的括号也是一样。
最终乘积中(x^k)的系数就是选(k)个球的颜色情况种数。
如果选择有限制呢?比如说,现在不能没有红球,黄球只能是偶数个,白球 (geq) 3个。
那么
其他
有一个重要结论,如果数列(a_n)的母函数是(G_1(x)),那么(S_n=sum_{i=0}^{n}a_i)的母函数为(G_2(x)=G_1(x)*frac{1}{1-x})。(可以手动验证)
2.指数型母函数
指数型母函数用于解决可重集的k排列问题。
假设现在有(a_1)个红球,(a_2)个黄球,(a_3)个白球,(a_4)个黑球,从中取(k)个球,这(k)个球的颜色排列有多少种?
是不是可以根据上面的结论,先组合,再乘上(k!)呢?不好意思,由于选出的(k)个元素可能有重复,而且每次重复的方式不一样,不能通过先组合再排列的方式解决。
由于可重集的全排列我们是知道的,对于每一类相同的元素(假设有(n_i)个),就除以(n_i!),所以我们不妨在选一种颜色时就考虑这个因素,构造:
这样乘开后(x^k)的系数就是答案。
假设有一个数列(a_n),令
则(G_e(x))称为(a_n)的指数型母函数,用的比较多的是(a_nequiv 1)的形式。
为什么叫指数型母函数呢?由泰勒展开得:(e^x=1+frac{x}{1!}+frac{x^2}{2!}+...),就是上面我们所构造的形式。
例题:(n)个不同的小球放入(m)个不同的盒子,盒子不能为空,有几种方法?
以盒子为研究对象,此问题相当于将m个不同的元素取n个作可重复排列,每个元素不能不取,则其生成函数为
所以n个球放到m个盒子中的方案数为(sum_{k=0}^{n}(-1)^k binom{n}{k}(n-k)^m),
如果盒子相同呢?打乱盒子顺序,除以(m!)就行,方案数为(frac{1}{m!}sum_{k=0}^{n}(-1)^k binom{n}{k}(n-k)^m)。是不是很熟悉?对,这个东西就是第二类斯特林数的通项!
这样,我们没有用容斥原理就求出了第二类斯特林数的通项。
总结
母函数的用途十分广泛,套路也很多,它甚至可以求卡特兰数通项!(但由于我太菜了没怎么看懂,所以咕了)。做题的时候要注意审题,分清是用普通型还是指数型,接下去的构造就比较容易了。