母函数(生成函数)
介绍
母函数是组合数学中相当重要的一个知识点,可以用来解决一些排列组合问题,还有所有的常系数线性齐次递推问题。如果系数不是常数,需要根据具体情况进行处理。
具体的内容可以看组合数学相关书籍或者大佬的博客,大佬的另一篇博客
由于大佬总是想当然地把别人当成大佬,一些内容对(像我这种)蒟蒻来说不是很友好,在这里讲一下母函数的基础。(研究母函数时,钦定\(|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)\)
\(\quad\quad G(x)=a_0+a_1x+\quad\quad a_2x^2+\quad\quad a_3x^3...\)
\(-3xG(x)=\quad -3a_0x+(-3)a_1x^2+(-3)a_2x^3...\)
\(-10x^2G(x)=\quad\quad\quad\quad -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_n\equiv 1\)的形式。
为什么叫指数型母函数呢?由泰勒展开得:\(e^x=1+\frac{x}{1!}+\frac{x^2}{2!}+...\),就是上面我们所构造的形式。
例题:\(n\)个不同的小球放入\(m\)个不同的盒子,盒子不能为空,有几种方法?
以盒子为研究对象,此问题相当于将m个不同的元素取n个作可重复排列,每个元素不能不取,则其生成函数为
所以n个球放到m个盒子中的方案数为\(\sum_{k=0}^{n}(-1)^k\tbinom{n}{k}(n-k)^m\),
如果盒子相同呢?打乱盒子顺序,除以\(m!\)就行,方案数为\(\frac{1}{m!}\sum_{k=0}^{n}(-1)^k\tbinom{n}{k}(n-k)^m\)。是不是很熟悉?对,这个东西就是第二类斯特林数的通项!
这样,我们没有用容斥原理就求出了第二类斯特林数的通项。
总结
母函数的用途十分广泛,套路也很多,它甚至可以求卡特兰数通项!(但由于我太菜了没怎么看懂,所以咕了)。做题的时候要注意审题,分清是用普通型还是指数型,接下去的构造就比较容易了。