生成函数
简单写一下基本概念。
多项式
简介
对于求和式 \(\sum a_nx^n\),如果是有限项相加,称为多项式,记作 \(f(x) = \sum_{n=0}^ma_nx^n\)。
可列项相加的求和式称为级数。在和式 \(\sum_{n=0}^\infty a_nx^n\) 中,每项均为非负整数次幂函数乘一个常数系数,这种形式的级数称为幂级数。
多项式的度
对于一个多项式 \(f(x)\) ,称其最高次项的次数称为该多项式的度,也称次数,记作 \(\deg f\)。
多项式运算
加减运算
乘法运算(卷积运算)
生成函数
简介
生成函数(Generating Function),又称母函数,是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。
形式幂级数简单来说,就是我们只关注这个幂级数的系数和未知数的指数,而不关注未知数的取值,这就是形式幂级数。
生成函数大多可以表示为一个统一的形式:
其中 \(k_n(x)\) 被称为核函数,不同的核函数会导出不同的生成函数,从而有着不同的性质,解决不同的问题。
分类
普通生成函数
形如
的生成函数,就是普通生成函数,它的核函数 \(k_n(x) = x^n\)。
常见生成函数
在运用生成函数的过程中,我们不会一直使用形式幂级数的形式,而会适当转化为封闭形式来更好地化简。
例如,\(<1,1,1,\dots>\) 的普通生成函数 \(F(x) = \sum_{n\ge0}x^n\),我们发现
这就是 \(\sum_{n\ge0}x^n\) 的封闭形式。
这个式子仅在 \(x\in(-1,1)\) 的时候成立,如果大于就不行了,因为大于 \(1\) 了这个式子就是发散的了。实际做题中我们不需要考虑是否发散,因为生成函数是一个形式幂级数,我们不考虑 \(x\) 的取值。
此外,还有一些常见的生成函数:
-
\[ \frac{1}{1-x}=1+x+x^2+\dots=\sum_{n=0}^{\infty}x^n \]
-
\[ \frac{1}{1-2x}=1+2x+4x^2+\dots=\sum_{n=0}^{\infty}2^nx^n \]推广一下,就有
-
\[ \frac{1}{1-kx}=1+kx+k^2x^2+\dots=\sum_{n=0}^{\infty}k^nx^n \]
-
\[ \frac{k}{1-x}=1+kx+kx^2+\dots=k\sum_{n=0}^{\infty}x^n \]
-
\[ \frac{x^3}{1-x}=0+0x+0x^2+x^3+x^4+\dots=k\sum_{n=0}^{\infty}x^n \]分母是 \(x^n\) ,那么前 \(n\) 项的系数都是 \(0\)。
-
\[ \frac{1}{1-x^2}=1+x^2+x^4+\dots=\sum_{n=0}^{\infty}x^{2n} \]实质上就是把一式的 \(x\) 换成了 \(x^2\)
-
\[ \frac{1}{1-x^3}=1+x^3+x^6+\dots=\sum_{n=0}^{\infty}x^{3n} \]同理。
-
\[ \frac{1}{(1-x)^2}=1+2x+3x^2+\dots=\sum_{n=0}^{\infty}(n+1)x^n \]这其实是对一式求导得来的。
我们推广一下一式和四式,首先引入广义二项式定理:
其中 \(C_a^k = \frac{a(a-1)\dots(a-k+1)}{k!}\)
证明略了/cy。接下来把它写成一式四式的形式。
步骤如下:
- 扩展域
其中若 \(i>n,C_n^i=0\),这就说明越往后其实加的都是 \(0\) 了。
- 扩展指数为负数:
那么
- 加号变减号
运用这个可以求解一些生成函数,例题
还有一些有穷序列的生成函数,可以用数列求和的式子整一整。
-
\[ 1+x+x^2 = \frac{1-x^3}{1-x} \]
-
\[ 1+x+x^2+x^3 = \frac{1-x^4}{1-x} \]
运算
加减运算
因此 \(F(x)\pm G(x)\) 是序列 \(<a_n\pm b_n>\) 的普通生成函数。
乘法运算
因此 \(F(x)\cdot G(x)\) 是序列 \(<\sum_{i=0}^na_ib_{n-i}>\) 的普通生成函数。
应用
普通生成函数可以用来解决多重集组合数问题。
\(n\) 种物品,每种物品 \(a_i\) 个,问取 \(m\) 个物品的方案数。
通过构造普通生成函数来解决。
我们让第一种物品的生成函数为 \((1+x^1+x^2+\dots+x^{a_1})\),第 \(n\) 种就是 \((1+x^1+x^2+\dots+x^{a_n})\),令这些生成函数相乘,那么题目就转化成了求 \(x^m\) 的系数。
指数生成函数
形如
的生成函数就是指数生成函数。
此外,还有一些常见的指数生成函数:
-
\[ e^x = 1+\frac{x^1}{1!}+\frac{x^2}{2!}+\dots=\sum_{n=0}^{\infty}\frac{x^n}{n!} \]泰勒展开!
-
\[ e^{-x} = 1-\frac{x^1}{1!}+\frac{x^2}{2!}+\dots=\sum_{n=0}^{\infty}(-1)^n\frac{x^n}{n!} \]
-
\[ \frac{e^x+e^{-x}}{2} = 1+\frac{x^2}{2!}+\frac{x^4}{4!}+\dots=\sum_{n=0}^{\infty}\frac{x^{2n}}{(2n)!} \]
-
\[ \frac{e^x-e^{-x}}{2} = x+\frac{x^3}{3!}+\frac{x^5}{5!}+\dots=\sum_{n=0}^{\infty}\frac{x^{2n+1}}{(2n+1)!} \]
运算
加减运算
因此 \(F(x)\pm G(x)\) 是序列 \(<a_n\pm b_n>\) 的指数生成函数。
乘法运算
因此 \(F(x)\cdot G(x)\) 是序列 \(<\sum_{i=0}^nC_n^ia_ib_{n-i}>\) 的指数生成函数。
应用
指数生成函数可以用来解决多重集排列数问题。
\(n\) 种物品,每种物品 \(a_i\) 个,问取 \(m\) 个物品的排列 数。
首先要知道多重集排列公式:设从每种物品中取 \(b_i(0\leq b_i \leq a_i),m=\sum_{i=1}^nb_i\),那么对于一组选定的 \(b_i\) 进行排列的方案数为 \(\frac{m!}{b_1!b_2!\dots b_n!}\)。
这就是把里面相同的进行去重的一个操作。这样以后,我们就知道所有满足 \(b_1+b_2+\dots +b_n=m\) 的排列数之和就是答案。
通过构造指数生成函数来解决。
我们让第一种物品的生成函数为 \((1+\frac{x^1}{1!}+\frac{x^2}{2!}+\dots+\frac{x^{a_1}}{a_1!})\),第 \(n\) 种就是 \((1+\frac{x^1}{1!}+\frac{x^2}{2!}+\dots+\frac{x^{a_n}}{a_n!})\),令这些生成函数相乘,那么题目就转化成了求 \(\frac{x^m}{m!}\) 的系数。
为什么?考虑一种满足 \(\sum b_i=m\) 的情况,做乘法,得到
做卷积,合并同类项,最后 \(\frac{x^m}{m!}\) 的系数就是答案。
狄利克雷生成函数
形如
的生成函数,称之为狄利克雷生成函数。
注意 \(n\) 和 \(x\) 的位置。
运算
乘法运算
这个形式其实就很像狄利克雷卷积的形式了。
\(\frac{1}{n^x}\) 的系数之和就是下标为 \(n\) 的一对因数的乘积的和,举个例子。
\(\frac{1}{4^x}\) 的系数 \(a_1b_4+a_2b_2+a_4b_1\);
\(\frac{1}{6^x}\) 的系数 \(a_1b_6+a_2b_3+a_3b_2+a_6b_1\)。
生成函数的应用
这个困扰了我 \(\inf\) 年的问题终于理解了,即使它并不是很难。
求斐波那契数列的通项公式,其中 \(f_i=f_{i-1}+f_{i-2},f_0 = f_1 = 1\)
构造一下生成函数,设
根据递推式我们可以做一些变化:
整理一下我们可以得到一个方程
这样我们就得到了斐波那契数列的生成函数的封闭形式,但是如果我们想要进一步得到每一项的系数,还要进行进一步的化简。
我们已经知道了 \(\frac{1}{1-kx}\) 所代表的序列,那我们自然而然要往这个方面凑。
这个式子的分母 \(1-x-x^2\) 是一个一元二次方程,我们可以进行配方:
解得
如此以后,我们就可以把原式变成 \(\frac{1}{(1-k_1x)(1-k_2x)}\) 的形式了,我们给它裂项一下,就能表示出最终的式子了。原式裂项后变为
那么则有
这个里面 \(x\) 的取值其实是无关紧要的,我们可以把这个式子转化成
所以
解得
代回原式,得到
把封闭形式转化为生成函数的形式,那么第 \(n\) 项的系数,也就是斐波那契数列的第 \(n\) 项就是
这就是生成函数题最基本的推式子的思路,终于理解了/oh。
其中涉及到部分分式的内容:
对于 \(\frac{p(x)}{q(x)}\) 一类的分式,其中 \(q(x)\) 是含有 \(k\) 个不同实根 \(x_1,\dots,x_k\) 的 \(k\) 次多项式,那么这个分式一定能写成
如果有重根,那么就合并起来,变成 \(\frac{c_i}{(x-x_i)^k}\) 的形式即可。