生成函数
生成函数
1. 牛顿二项式定理
1.1 定义
首先对 \(\binom n m\) 的定义进行扩展:
- 设 \(n\) 是实数,\(m\) 是整数。则:
那么
一般情况下,只考虑 \(|x|<|y|\) 的情况,否则右边不收敛。
在左边提取出 \((\frac x y)^n\),得到 \((1+x)^n=\sum_{i=0}^{\infty} \binom n i x^i\)。这是我们经常见到的形式。
1.2 推论
首先
于是对 \(|z|<1\),
令 \(n=1\),得
令 \(-z\) 代替 \(z\),得
2. 形式幂级数
\(F(x)=\sum_{n\ge 0}a_nx^n\),这样有无穷项的 “多项式” 称为 幂级数。
我们用到的其实是形式幂级数,形式幂级数区别于幂级数的地方在于,当我们使用幂级数的时候,我们说的相等是所有点处的值都相等,而当我们使用形式幂级数的时候,我们说的相等是所有系数都相等。
形式幂级数的 \(x\) 只是形式变量,我们只关注 \(x^n\) 的系数,并不关注具体的函数值是多少。
3. 普通生成函数(OGF)
3.1 定义
设 \(a_0,a_1,\cdots\) 为无穷序列,其生成函数
若 \(a\) 是有限的序列,则在其后面加上无限个 \(0\) 即可。\(F(x)\) 中的 \((x)\) 可以省略。
设数列 \(a\) 的 OGF 为 \(F(x)\),\(b\) 的 OGF 为 \(G(x)\)。
生成函数有加减法:
即 \(a+b\) 的 OGF 为 \(F+G\)。
还有乘法:
即 \(a\times b\) 的 ODF 即为 \(F\times G\),\(\times\) 为卷积。
3.2 例子
-
\(1,1,1,1,\cdots\)
\(F(x)=1+x+x^2+x^3+\cdots=\sum_{n\ge 0}x^n=\frac 1 {1-x}\)。
\(xF+1=F\),于是 \(F(x)=\frac 1 {1-x}\)。
-
\(1,p,p^2,p^3,\cdots\)
\(F(x)=1+px+(px)^2+(px)^3+\cdots=\sum_{n\ge 0}(px)^n=\frac{1}{1-px}\)
-
\(1,0,1,0,\cdots\)
\(F(x)=1+x^2+x^4+\cdots=\sum_{n\ge 0}x^{2n}=\frac{1}{1-x^2}\)。
-
\(0,1,1,1,\cdots\)
\(F(x)=x+x^2+x^3+\cdots=\sum_{n\ge 1}x^n=\frac x {1-x}\)。
-
\(1,0,0,1,0,0,1,0,0,\cdots\)
\(F(x)=1+x^3+x^6+x^9+\cdots=\sum_{n\ge 0} x^{3n}=\frac{1}{1-x^3}\)
-
\(1,0,3,0,9,0,27,0,81,0,\cdots\)
\(F(x)=1+3x^2+9x^4+27x^6+\cdots=\sum_{n\ge 0} 3^nx^{2n}=\sum_{n\ge 0} (3x^2)^n=\frac{1}{1-3x^2}\)
从上面几个例子可以看出,有理分式 \(\dfrac{x^a}{1-bx^c}=x^a\sum_{n\geq 0}(bx^c)^n=\sum_{n\ge 0}b^nx^{a+cn}\)。
这对应着由 \(a\) 个 \(0\) 开头,接下来由 \(1\) 个 \(b^n\) 和 \(c-1\) 个 \(0\) 组成的循环节无限循环组成的数列。
-
\(\binom n 0,\binom n 1,\binom n 2\cdots\)
\(F(x)=\sum_{i\geq 0} \binom n i x^i=(1+x)^n\)。
-
\(1,2,3,4,\cdots\)
\(F(x)=\sum_{n\ge 0} (n+1) x^n\)
解 1:\(F(x)=\sum_{n\ge 1}nx^{n-1}=\sum_{n\ge 1}(x^n)'=(\sum_{n\ge 1}x^n)'=(\frac x {1-x})'=\frac 1 {(1-x)^2}\)
解 2:\(F(x)=\sum_{x\ge 0}\binom {n+1} n x^n=\frac{1}{(1-x)^2}\)
-
\(f_0,f_1,f_2,\cdots\),其中 \(f_i\) 为 \(x_1+x_2+\cdots+x_k=n\) 的非负整数解个数,\(k\) 是正整数。
\(f_i=\binom{n+k-1}{k-1}\)。
\(F(x)=\sum_{n\geq 0} \binom{n+k-1}{k-1} x^n=\frac{1}{(1-x)^{k}}\)。
-
\(p^0f_0,p^1f_1,p^2f_2,p^3f_3,\cdots\)
\(F(x)=\sum_{n\ge 0} \binom{n+k-1}{k-1}p^nx^n=\frac{1}{(1-px)^k}\)。
-
\(0,1,4,9,16,25,\cdots\)
\(\frac{1}{(1-x)^2}=\sum_{n\ge 0}(n+1)x^n\)
\(\Rightarrow \frac{x}{(1-x)^2}=\sum_{n\ge 1} nx^n\)
\(\Rightarrow \frac{1+x}{(1-x)^3}=\sum_{n\ge 1} n^2x^{n-1}\) (两边同时求导)
\(\Rightarrow \frac{x(1+x)}{(1-x)^3}=\sum_{n\ge 0} n^2x^n\)
\(\Rightarrow F(x)=\sum_{n\ge 0}n^2x^n=\frac{x(1+x)}{(1-x)^3}\)。
-
\(0,1,8,27,\cdots,n^3,\cdots\)
\(\frac{x(1+x)}{(1-x)^3}=\sum_{n\ge 0}n^2x^n\)
\(\Rightarrow \frac{x^2+4x+1}{(1-x)^4}=\sum_{n\ge 0}n^3x^{n-1}\)
\(\Rightarrow \frac{x(x^2+4x+1)}{(1-x)^4}=\sum_{n\ge 0}n^3x^n\)。
对于一般的 \(0,1,\cdots,n^k,\cdots\),可以类似地两边连续求导并乘 \(x\) 得到。
3.3 常用变换
设 \(F(x)=\sum_{n\ge 0} a_nx^n\)。
-
令 \(G=F\times x^k\),得到 \(F\) 向右移动 \(k\) 位,最左边补 \(k\) 个 \(0\) 的结果。
-
令 \(G=F\times \frac{1}{1-x}\),得到 \(F\) 对系数做前缀和的结果。
\(G(x)=\frac{1}{1-x}\sum\limits_{n\ge 0}a_nx^n=\sum\limits_{n\ge 0}x^n\sum\limits_{n\ge 0}a^nx^n=\sum\limits_{n\ge 0}\sum\limits_{m\ge 0}a^nx^{n+m}=\sum\limits_{k\ge 0}(\sum_{n\ge 0}a_n)x^k\)
-
令 \(G=F\times (1-x)\),得到 \(F\) 对系数做差分的结果(假设 \(a_{-1}=0\))。
\(G(x)=(1-x)\sum\limits_{n\ge 0}a_nx^n=\sum\limits_{n\ge 0}a_nx^n-a_nx^{n+1}=\sum\limits_{n\ge 0} a_nx_n-\sum\limits_{n\ge 1}a_{n-1}x^n=\sum\limits_{n\ge 0} (a_n-a_{n-1})x^n\)
3.4 应用
应用 1: 考虑 \(f_0,f_1,f_2\cdots\) 的例子:设 \(G(x)=\sum_{n\geq 0} x^n\),那么
中 \(x^n\) 的系数(记为 \([x^n]F(x)\)) 即为 \(x_1+x_2+\cdots+x_k=n\) 的非负整数解个数。
应用 2: 求 \(x_1+x_2+x_3+x_4=n\) 的非负整数解个数,其中 \(x_1\) 为偶数,\(x_2\) 为 \(5\) 的倍数,\(x_3\leq 4\),\(x_4\leq 1\)。
设 \(F_i(x)\) 为 \(b_0,b_1,b_2,\cdots\) 的生成函数,\(b_j\) 表示 \(x_i=j\) 的方案数,这里非 \(0\) 即 \(1\)。那么
于是
\([x^n]F(x)\) 即为答案。
可以看出,OGF 可以方便地求出没有标号的多重集组合问题。
注意最后的级数有可能是个更复杂的有理分式,从而无法快速得到答案,此时需要进行有理分式分解。
3.4 OGF 的卷积
考虑 \(a\times b\) 的 OGF \(H=F\times G\)。
令 \([x^n]F(x)\) 表示在 \(S\) 中取出 \(n\) 个的方案数,\([x^n]G(x)\) 表示在 \(T\) 中取出 \(n\) 个的方案数。
那么枚举在 \(S\) 中取 \(i\) 个,\(T\) 中取 \(j\) 个,得到 \(S\cup T\) 中取 \(n\) 个的方案数 \([x^n]H(x)=\sum_{i+j=n} ([x^i]F(x))([x^j]G(x))\)。
4. 指数生成函数 (EGF)
4.1 泰勒级数
常见的泰勒级数:
4.2 定义
定义无穷序列 \(a_0,a_1,a_2,\cdots\) 的指数生成函数为:
OGF 一般处理组合数的序列,而 EGF 一般处理排列的序列。
设数列 \(a\) 的 EGF 为 \(\hat{F}(x)\),\(b\) 的 EGF 为 \(\hat{G}(x)\)。
EGF 有加法:
即 \(a+b\) 的 EGF 为 \(\hat{F}+\hat{G}\)。
还有乘法:
则 \(c_n=\sum_{i+j=n}\binom{n}{i}a_ib_j\) 的 EGF 为 \(\hat{F}\times\hat{G}\)。
4.3 例子
-
\(1,1,1,1,\cdots\)
\(\hat{F}(x)=\sum_{n\ge 0} \frac{x^n}{n!}=e^x\)
这也是为什么 \(\hat{F}(x)\) 叫指数生成函数。
-
\(1,p,p^2,p^3,\cdots\)
\(\hat{F}(x)=\sum_{n\ge 0} \frac{p^nx^n}{n!}=e^{px}\)
-
\(1,0,1,0,1,\cdots\)
\(\hat{F}(x)=\sum_{n\ge 0}[2\mid n]\frac{x^n}{n!}=\sum_{n\ge 0}\frac{1+(-1)^n}{2}\frac{x^n}{n!}=\frac{e^x+e^{-x}}{2}\)
-
\(0,1,0,1,\cdots\)
\(\hat{F}(x)=\frac{e^x-e^{-x}}{2}\)
-
\(0,1!,2!,3!,\cdots\)
\(\hat{F}(x)=\sum_{n\ge 1} \frac{(n-1)!x^n}{n!}=\sum_{n\ge 1} \frac{x^n}{n}=-\ln(1-x)\)
-
\(A(n,0),A(n,1),A(n,2),A(n,3),\cdots\)
\(\hat{F}(x)=\sum_{i\ge 0} A(n,i)\frac{x^i}{i!}=\sum_{n\ge 0}\binom n i x^i=(1+x)^n\)。
4.4 常用变换
设数列 \(a_0,a_1,a_2,\cdots\),其 EGF 为:\(\hat{F}=\sum_{n\ge 0} \frac{a_nx^n}{n!}\)。
对其求导,得
则求导对应系数右移。
对其积分,得
则积分对应系数左移。
4.5 应用
应用 1: 求多重集 \(\{c_1\cdot a_1,c_2\cdot a_2,c_3\cdot a_3\cdots c_k\cdot a_k\}\) 的 \(n\) 排列数。
设数列 \(b_0,b_1,b_2,\cdots\),\(b_j\) 为选出 \(j\) 个 \(a_i\) 的方案数,这里非 \(0\) 即 \(1\)。则其 EGF 为:
然后设数列 \(g_0,g_1,g_2,\cdots\),\(g_n\) 表示要求的 \(n\) 排列数,则其 EGF 为:
考虑 \([x^n]\hat{F}(x)\)。设 \(m_1+m_2+m_3+\cdots+m_k=n\),那么它们给第 \(n\) 项加上了
也就是给 \([x^n]\hat{F}(x)\) 加上了 \(\dfrac{n!}{\prod m_i!}\),恰好是其对应的排列数。
可以看出,EGF 可以方便地求出有标号的多重集排列问题。
应用 2: 拿出 \(n\) 个球并排列,球有红、绿、蓝三色,只区分颜色。要求红球必须是偶数个,求排列数。
设 \(f_i\) 为 \(n\) 排列数,其 EGF 为:
于是 \(f_i=[x^n]\hat{F}(x)=\dfrac{3^n+1}{2}\)。
应用 3:求 \(1,3\) 都出现偶数次的 \(n\) 位五进制数的个数。
设 \(f_i\) 为这样的 \(i\) 位数个数,其 EGF 为:
则 \(f_i=[x^n]\hat{F}(n)=\dfrac{5^n+2\times 3^n+1}{4}\)。
4.6 EGF 的卷积
上面提到,\(c_n=\sum_{i+j=n}\binom{n}{i}a_ib_j\) 的 EGF 为 \(\hat{H}=\hat{F}\times\hat{G}\)。
令 \([x^n]F(x)\) 为 \(S\) 中的 \(n\) 排列数,\([x^n]G(x)\) 为 \(T\) 中的 \(n\) 排列数。
枚举 \(S,T\) 中分别取 \(i,j\) 个,得到 \(S\cup T\) 中 \(n\) 排列数 \([x^n]\hat{H}(x)=\sum_{i+j=n}\binom{n}{i}([x^i]\hat{F}(x))([x^j]\hat{G}(x))\)。
*4.7 EGF 的 exp 与 ln
设形式幂级数 \(A=\sum_{n\ge 0} a_nx^n\)。
设 \(B=\exp A\),那么两边同时求导,得到 \(B'=A'\times B\)。根据这个式子可以 \(O(n^2)\) 递推系数:
考虑其组合意义。设数列 \(f_0,f_1,f_2,\cdots\),\(f_i\) 表示大小为 \(i\) 的集合个数,其中元素有标号,其 EGF 为 \(\hat{F}\)。
再设数列 \(g_0,g_1,g_2,\cdots\),\(g_i\) 表示无序地选择一些集合组合起来,使得集合大小总和为 \(i\) 的方案数,其 EGF 为 \(\hat{G}\)。则
移项得
于是
然后考虑 \(\ln\)。\(\ln\) 是 \(\exp\) 的逆,即 \(\ln(\exp(x))=x,\exp(\ln(x))=x\)。所以 \(\ln\) 就是把组合起来的集合再拆回去。
设 \(B=\ln(A)\),则 \(B'=\dfrac{A'}{A}\),即 \(A\times B'=A'\)。同样可以 \(O(n^2)\) 递推系数,得到
一般来说 \(a_0=1\),所以上式一般可以写成
例子 1: 求 \(n\) 个点的有标号无向连通图个数。
设答案为 \(f_n\),再设 \(g_n\) 为 \(n\) 个点的有标号无向图(不要求联通)的个数。显然 \(g_n=2^{\frac{n(n-1)}{2}}\)。
考虑任意一张无向图,它是由若干个连通块无序地组合而形成的,那么 \(\hat{G}=\exp(\hat{F})\),得到 \(\hat{F}=\ln \hat{G}\)。
例子 2: 求 \(n\) 个点的不区分儿子的有标号有根树个数。
设答案为 \(f_n\),列出方程:
得到 \(\hat{F}=z\exp(\hat{F})\)。不会求系数,咕咕咕
例子 3: 求将 \(n\) 个有标号元素划分为若干个不交非空子集的方案数。
设答案为 \(f_n\)。再设 \(g_n\) 为 \(i\) 个元素组成一个非空集合的方案数,显然 \(g_n=[n\ge 0]\)。
于是 \(\hat{G}=e^x-1,\hat{F}=\exp(\hat{G})=e^{e^x-1}\)。
5. 生成函数与递推关系
若数列 \(f\) 满足
且 \(a_i\) 为不依赖于 \(n\) 的常数,则称此递推关系为 常系数齐次线性递推关系。
5.1 斐波那契数列
斐波那契数列的定义是:\(f_0=0,f_1=1,f_n=f_{n-1}+f_{n-2}\ (n\ge 2)\)。
移项得 \(f_n-f_{n-1}-f_{n-2}=0\)。
其 OGF
根据递推关系列方程:
得到
接下来将其展开。
展开 1:
得出结论:\(f_n=\sum_{i=0}^{n-1}\binom{n-i-1} i\),即杨氏三角(帕斯卡三角)从 \((n-1,0)\) 到 \((0,n-1)\) 对角线的和。
展开 2:
首先
记 \(a=\frac{1+\sqrt{5}}{2}x,b=\frac{1-\sqrt{5}}{2}\)。
考虑将 \(F\) 分解为 \(\dfrac{A}{1-ax}+\dfrac{B}{1-bx}\) 的形式,解得 \(A=\dfrac{1}{\sqrt{5}},B=-\dfrac{1}{\sqrt{5}}\)。
然后
得到
5.2 一般的常系数齐次线性递推关系
对一般的常系数齐次线性递推关系 \(f_n=\sum_{i=1}^k a_if_{n-i}\),我们可以类似地求出一个通项公式,但由于高阶多项式的存在,会变得更加复杂,往往因很难求出某高阶多项式的所有根而受到限制。
设 \(f_n\) 满足递推关系
要求 \(a_k\ne 0\),否则可以变为更低阶的递推关系。
那么假设 \(f_n=q^n\),有
称这个方程为对应递推关系的 特征方程。
设 \(q_1,q_2,q_3,\cdots,q_k\) 的 \(k\) 个可重根。由于 \(a_k\ne 0\),所有的 \(q_i\ne 0\)。
先考虑 \(q_i\) 互不相同的情况。
容易证明,
满足上述递推关系。其中 \(c_i\) 是任意选定的常数。
接下来证明其是通解,也就是对于任意一组初值 \(f_0,f_1,f_2,\cdots,f_{k-1}\),都能选出 \(c_1,c_2,c_3,\cdots,c_k\) 满足递推关系。
列出方程
其系数矩阵为
这是个范德蒙矩阵,其行列式为 \(\prod_{1\leq i<j\leq k}(q_j-q_i)\),不为 \(0\)。所以原方程一定有解。
考虑斐波那契数列,其递推关系为
其特征方程为
解得 \(q_1=\dfrac{1+\sqrt{5}}{2},q_2=\dfrac{1-\sqrt{5}}{2}\)。
然后根据 \(f_0=0,f_1=1\) 列方程:
解得 \(c_1=\dfrac{1}{\sqrt{5}},c_2=-\dfrac{1}{\sqrt{5}}\)。
于是
再考虑有重根的情况。
上面求得的通解不适用。考虑递推关系 \(f_n=4f_{n-1}-4f_{n-2}\),其特征方程为 \(q^2-4q+4=0\),解得 \(q_1=q_2=2\)。
若再按上面的方法列出通解 \(f_n=c_1q_1^n+c_2q_2^n\),两个常数可以合并 \(f_n=c(q_1^n+q_2^n)\),一个常数不一定能满足两个初值。
当 \(f_0=4,f_1=5\) 时,\(c_1+c_2=4,2c_1+2c_2=5\),无解。
但可以发现,\(f_n=n2^n\) 也是一个解。
可以代入验证:
所以
也是解。其中 \(c_1,c_2\) 是任意选定的常数。
接下来证明其是通解。对于给定的初值 \(f_0,f_1\),列出方程
解得 \(c_1=f_0,c_2=\frac{f_1-2f_0}{2}\)。
然后考虑一般情况。对于 \(s_i\) 重根 \(q_i\),可以验证
也是解,\(c_i\) 是随意选定的常数。那么 \(f_n\) 的通解即为
证明相当复杂,记住结论即可。
也可以利用生成函数求解。
类似斐波那契数列的生成函数,令 \(a_0=1\),我们列出方程:
得到
我们将 \(F\) 分解为
的部分分式形式,其中 \(Q=\prod (1-a_ix)^{k_i}\),\(c\) 为常数。
然后将其转化为形式幂级数的形式,求出 \(f_n=[x^n]F\) 即可。
由此看出,对于任意的常系数齐次线性递推关系 \(\sum\limits_{i=0}^k a_if_{n-i}=0\),其生成函数 \(F\) 一定能分解为 \(\dfrac{P}{Q}\) 的形式,其中 \(\deg P<k,\deg Q=k\) 且 \(Q\) 常数项不为 \(0\)。
反之亦然,接下来我们证明这样的 \(F=\dfrac P Q\) 一定对应一个满足 \(\sum\limits_{i=0}^k a_if_{n-i}\) 的数列 \(f\)。
设 \(P=\sum\limits_{i=0}^{k-1}d_nx^n,Q=\sum\limits_{i=0}^{k}a_nx^n\),\(n<0\) 时 \(f_n=0\),则
列出方程
对前 \(k\) 个方程写出增广矩阵,是满秩的,所以可以唯一确定 \(f_0,f_1,f_2,\cdots f_{k-1}\);
对于最后一个方程,由于 \(a_0\ne 0\),则 \(f\) 满足 \(\sum_{i=0}^k a_if_{n-i}\) 的常系数齐次线性递推关系。
*6. 部分分式分解
这里给出一个更为一般的部分分式分解方法。
对于 \(F=\dfrac{R}{(1-ax)^k}\),其中 \(R\) 是个多项式,提取 \([x^n]F\) 是容易的。设 \(\deg R=c\),有:
对于较为简单的有理分式 \(\dfrac P Q\),我们可以先将 \(Q\) 因式分解,然后直接待定系数法求解。例如:
待定系数法,
通分列方程,解得 \(A=-\frac 7 4,B=\frac 7 4,C=\frac 1 2\)。
于是
对于更一般的情况,设有两个多项式 \(P,Q\)。若 \(Q=\prod_{i} (1-a_ix)^{k_i}\),结论是可以给出 \(\dfrac P Q\) 的分解:
其中 \(R_0=\dfrac{P-P\bmod Q}{Q}\),每个 \(R_i\) 满足 \(\deg R_i< k_i\)。
首先考虑若这样的分解存在,\(R_i\) 应等于什么。
两边同乘 \(Q\) 并移项
设 \(X=P\bmod Q\),则 \(\deg X<\deg Q\)。
两边同时对 \((1-a_ix)^{k_i}\) 取模:
换元 \(t=1-a_ix\),那么 \(x=\frac{1-t}{a_i}\)。把 \(x\) 全都换成 \(t\),问题转化为 \(\bmod \ t^{k_i}\) 意义下求逆元。
设多项式 \(A\) 满足 \(\deg A<k\) 且常数项不为 \(0\),要求一个次数小于 \(k\) 的 \(B\),满足 \(AB\equiv 1\pmod{x^{k_i}}\)。
列出方程:
首先有 \(B_0=\dfrac{1}{A_0}\)。假设已经知道了 \(B_0,B_1,B_2,\cdots,B_{m-1}\),那么
求出 \(R_i=\sum_j b_jt^j\),现在换回去:
总复杂度 \(O(n^2)\)。
从上向下推已经结束,现在我们从下向上推,以证明我们求出的 \(R_i\) 确实满足条件。
现在对于每个 \(i\),\(X\) 满足
根据多项式 CRT(和普通 CRT 基本一致),
其中 \(t\) 是个多项式。发现 \(X\) 和 \(\sum_{i} R_i\prod_{j\ne i}(1-a_jx)^{k_j}\) 的次数都 \(<\deg Q\),那么 \(t\) 必须为 \(0\),于是得出
命题得证。

浙公网安备 33010602011771号