笔记:生成函数简记

笔记:生成函数简记

模拟赛碰到许多生成函数推式子的题目,就来学了一下。

本文是参考 zscoder文章 做的一些笔记!

形式幂级数

数学分析中我们学习了幂级数,多项式是幂级数的一种,设 \(a_i\) 作为第 \(i\) 项的系数,我们设普通生成函数(后文简称 OGF)为:

\[A(x)=\sum_{i=0}^{\infty} a_ix^i \]

同时我们规定 \([x^n]A(x)=a_n\) 即取 \(n\) 项系数。

\(a_i=1\) 时,这是个很经典的式子:\(A(x)=\frac{1}{1-x}\) 。我们知道 \(A(x)\) 收敛区间是 \([-1,1)\) ,但研究敛散性阻碍了我们对多项式的操作和研究,更重要的,我们通常不关心 \(x\) 的具体取值,\(x\) 的幂次和对应系数是我们研究的重点。

我们称这个一般不研究 \(x\) 取值的函数为形式幂级数。

卡特兰数 OGF

作为例子我们推断卡特兰数 \(c_0=1,c_{n+1}=\sum_{i=0}^nc_ic_{n-i}\) 的 OGF ,两端乘 \(x\) 次幂有:

\[\sum_{n=0}c_{n+1}x^{n+1}=\sum_{n=0}\sum_{i=0}^nc_ic_{n-i}x^{n+1} \]

设 OGF 为 \(C(x)\),左式为 \(C(x)-c_0=C(x)-1\),右式提出一个 \(x\) 后发现是卷积的形式,其为 \(xC(x)^2\) ,我们得到了 \(C(x)-1=xC(x)^2\),解出:

\[C(x)=\frac{1\pm \sqrt{1-4x}}{2x} \]

虽然一般不研究 \(x\) 的取值,但有时根据 \(x\) 可以用于确定正负号,这里 \(x=0\) 式子必然收敛,此时 \(C(x)=c_0=1\) ,根据洛必达法则,当上方取负号时:\(\lim_{x\to 0}C(x)=1\) ,因此上式取负号。

组合数生成函数

定义 \(f(n,k)=f(n-1,k)+f(n-1,k-1)\)\(f(n,0)=1,n\geq 0\)\(f(0,n)=0,n\geq 1\) ,推式子后,我们得到:

\[C(n,k)=\sum_{n\geq 0}\sum_{k \geq 0}f(n,k)x^ny^k=\frac{1}{1-n-nk} \]

我们有:

\[C(x,y)=\frac{1}{1-(y+1)x}=\sum_{k\geq 0}(y+1)^kx^k \]

我们有 \([x^n]C(x,y)=(y+1)^n=\sum_{k \geq 0}f(n,k)y^k\),则:

\[\sum_{k \geq 0}f(n,k)y^k=(y+1)^n \]

我们事先知道 \(f(n,k)=\binom{n}{k}\) ,将其带入就得到了二项式定理的一个情形。

指数生成函数 EGF

区别于 OGF,我们定义指数生成函数 EGF:

\[A(x)=\sum_{i\geq 0}\frac{a_i}{i!}x^i \]

做一个阶乘是为了一些计算需要,特别对于组合类的问题,天然包含阶乘。可以发现 EGF 也是一类特殊的 OGF(\(b_i=\frac{a_i}{i!}\))。

贝尔数

贝尔数 \(b_n\) 定义为将 \({1,2,\cdots n}\) 分到若干个集合中的方案数,也等于第二类斯特林数的求和,\(b_0=b_1=1\)

先求一个递推公式,求解 \(B_{k+1}\) 时,考虑 \(k+1\) 和哪些元素构成一个集合,枚举选了 \(1-k\) 的多少个数,有:

\[B_{k+1}=\sum_{i=0}^k\binom{k}{i}B_{k-i}=\sum \binom{k}{i}B_i \]

后面的式子考虑 \(\binom{k}{i}=\binom{k}{k-i}\) ,继续推:

\[\sum_{i=0}^k\binom{k}{i}B_i=\sum_{i=0}^k\frac{k!}{i!(k-i)!}B_i \]

\[\frac{B_{k+1}}{k!}=\sum_{i=0}^k\frac{B_i}{i!}\cdot \frac{1}{(k-i)!} \]

两边乘 \(x^{k+1}\) 并求和:

\[\sum_{k \geq 0} \frac{B_{k+1}x^{k+1}}{k!}=\sum_{k\geq 0}x\sum_{i=0}^k\frac{B_ix^i}{i!}\cdot \frac{x^{k-i}}{(k-i)!} \]

右侧的式子是卷积形式,为 \(xB(x)e^x\) ,左边的式子积分后求解恰好为 \(xB'(x)\) ,因此:

\[\frac{B'(x)}{B(x)}=e^x \]

\[\frac{d}{dx}\ln B(x)=e^x \]

\[\ln B(x)=e^x+C \]

带入 \(B(0)=1\) 得到 \(C=-1\) 则:

\[B(x)=e^{e^{x}-1}=\exp(e^x-1) \]

因此求出 \(F(x)=e^x-1\) 展开式的前 \(n\) 项系数,求解 多项式 exp 后就能在 \(O(n\log n)\) 时间得到贝尔数前 \(n\) 项。

生成函数代数运算

众多快速的多项式计算方法使得可以对生成函数做快速代数运算。

加法

直接相加对应生成函数。

位移

为了得到 \(c_n=a_{n-k}\) ,对于 OGF,求出 \(C(x)=x^kA(x)\) ,对于 EGF,需要积分 \(k\) 次。

为了得到 \(c_n=a_{n+k}\) ,对于 OGF,\(C(x)=\frac{A(x)-(a_0+a_1x+a_2x^2+\cdots+a_{k-1}x^{k-1})}{x^k}\) .

对于 EGF,求导 \(k\) 次。

乘积 n

求导时发现天然出现了 \(n\) ,则 \(C(x)=xA'(x)\) 即可。

卷积

对于 OGF 来说:\(A(x)B(x)=\sum_{k \geq 0}\sum_{i=0}^ka_ib_{k-i}\)

对于 \(EGF\) 来说:

\[\begin{align*} A(x)B(x)&=\sum_{i\geq 0}\frac{a_i}{i!}x^i\sum_{j\geq 0}\frac{b_j}{j!}x^j\\ &=\sum_{k\geq 0}\frac{x^k}{k!}\sum_{i=0}^k\frac{a_ib_{k-i}\cdot k!}{i!(k-i)!}\\ &=\sum_{k\geq 0}\frac{x^k}{k!}\sum_{i=0}^k\binom{k}{i}a_ib_{k-i} \end{align*}\]

EGF 带来的额外组合数对一些二项式递推有很大优势。

幂次

对于 OGF 来说,\(A(x)^k\) 相当于 \(k\) 次卷积,其恰好等价于分拆系数的乘积!即:

\[c_n=\sum_{i_1+i_2+\cdots+i_k=n}a_{i_1}a_{i_2}\cdots a_{i_k} \]

对于 EGF ,多次卷积得到的是广义组合数:

\[c_n=\sum_{i_1+i_2+\cdots+i_k=n}\binom{n}{i_1,i_2,\cdots,i_k}a_{i_1}a_{i_2}\cdots a_{i_k} \]

其中 \(\binom{n}{i_1,i_2,\cdots,i_k}=\frac{n!}{i_1!i_2!\cdots i_k!}\)

前缀和

\(c_n=\sum_{i=0}^n a_i\)

EGF 前缀和过于困难这里不讨论,OGF 对 \(\frac{1}{1-x}=1+x+x^2\cdots\) 卷积即可。

常见的展开

几个常见的生成函数需要了解,其实就是泰勒级数展开:

\[\begin{align} \frac{1}{1-x}&=1+x+x^2+\cdots\\ -\ln(1-x)&=x+\frac{x^2}{2}+\frac{x^3}{3}\cdots\\ e^x&=1+x+\frac{x^2}{2!}+\frac{x^3}{3!}+\cdots\\ (1-x)^{-k}&=\sum_{n\geq 0}\binom{n+k-1}{n}x^n \end{align}\]

最后的式子用到等式:\(\binom{-k}{n}=(-1)^n\binom{n+k-1}{n}\)

例子

卡特兰数闭式表达

我们知道 \(C_n=\frac{1}{n+1}\binom{2n}{n}\) ,现在推这个式子,已知 \(C(x)=\frac{1-\sqrt{1-4x}}{2x}\)

我们求解 \(\sqrt{1-4x}\)

\[\begin{align*} (1-4x)^\frac{1}{2}&=\sum \binom{\frac{1}{2}}{n} (-4x)^n\\ &=\sum_n \frac{1}{2}\cdot \frac{-1}{2}\cdot \frac{-3}{2}\cdots \frac{-(2n-3)}{2}\cdot \frac{1}{n!}(-4)^nx^n\\ &=1+\sum_{n\geq 1}\frac{(-1)^{n-1}(1\cdot 3\cdot 5\cdots \cdot (2n-3))}{2^n}\cdot \frac{(-4)^n}{n!}x^n\\ &=1-\sum_{n\geq 1}\frac{2\cdot (2n-2)!}{(n-1)!n!} x^n \\ &=1-\sum_{n\geq 1}\frac{2}{n}\binom{2n-2}{n-1}x^n \end{align*}\]

带入后得:

\[\begin{align*} \frac{1-\sqrt{1-4x}}{2x}&=\frac{1}{2x}(1-\sqrt{1-4x})\\ &=\sum_{n\geq 1}\frac{1}{n}\binom{2n-2}{n-1}x^{n-1}\\ &=\sum_{n\geq 0}\frac{1}{n+1}\binom{2n}{n}x^n \end{align*}\]

第一类斯特林数

定义 \(f(n,k)\)\(n\) 个两两不同得数拆分成 \(k\) 个非空轮换的方案数。

  • 引理:环排列,\(n\) 个元素的本质不同的首尾相接的排列个数为 \((n-1)!\)

设最终分成的 \(k\) 个轮换的大小为 \(a_1,a_2\cdots,a_k\) ,每个轮换内的环排列为 \((a_i-1)!\) ,同时 \(\sum a_i=n\),根据广义组合数,\(n\) 个数打上 \(a_1,a_2\cdots a_k\) 的标签的方案数是 \(\frac{n!}{a_1!a_2!\cdots a_k!}\) ,设 \(c_n=(n-1)!\)

\[f(n,k)=\frac{n!}{k!}\sum_{a_1+a_2+\cdots+a_k=n}\frac{c_{a_1}c_{a_2}\cdots c_{a_k}}{a_1!a_2!\cdots a_k!} \]

我们设 \(c_n\) 的 EGF 为 \(C(x)=\sum \frac{c_n}{n!}x^n\) ,根据 EGF 的幂次性质,上式为:\(\frac{n!}{k!}C(x)^k\) ,于是可以在 \(O(n\log n)\) 的时间内推出一整列(固定 \(k\))的 \(f(n,k)\)

额外的,第一类斯特林数有递推公式:

\[f(n,k)=f(n-1,k-1)+(n-1)\cdot f(n-1,k) \]

  • bonus:要求轮换大小必须是给定集合中的数
  • 只需要将非集合中的 \(c_n\) 改成 \(0\) 就可以了。

所有排列构成的环的个数期望

我们令 \(g_n\) 表示环个数的和,那么 \(g_n\) 的 EGF \(G(x)\) 的第 \(n\) 项系数就是期望。

\[[x^n]G(x)=[x^n]\sum_{k\geq 0}\frac{k}{k!}C(x)^k=[x^n]C(x)\sum_{k\geq 0}\frac{C(x)^k}{k!}=[x^n]C(x)\exp(C(x)) \]

\(C(x)=\sum_{k\geq 1}\frac{(k-1)!}{k!}x^k=-\ln(1-x)\) ,带入有:

\[C(x)\exp(C(x))=-\frac{\ln(1-x)}{(1-x)} \]

这个式子等价于对 \(F(x)=-\ln(1-x)\) 做前缀和,又 \([x^n]-\ln(1-x)=\frac{1}{n}\), 则:

\[[x^n]G(x)=\frac{1}{1}+\frac{1}{2}+\cdots+\frac{1}{n} \]

就是调和级数的和。

第二类斯特林数

和第一类斯特林数不同的是,这里求分成 \(k\) 个集合的方案,则此时 \(C(x)=\sum_n\frac{1}{n!}x^n=e^x\),同理的:

\[f(n,k)=[x^n]\frac{n!}{k!}C(x)^k=[x^n]\frac{n!}{k!}(e^x-1)^k \]

则我们有:

\[\sum_n\sum_k\frac{f(n,k)}{n!}x^ny^k=\sum_k \frac{(C(x)y)^k}{k!}=\exp(C(x)y) \]

\[F(x,y)=e^{(e^{x}-1)y} \]

此时发现 \(y=1\) 时这个闭式为贝尔数的生成函数,将 \(y=1\) 带入后,在展开式中就表现为对 \(f(n,k)\) 求和。

  • 一个发现:对于对数字分拆的组合问题,求单组元素的 EGF \(D(x)\),则答案的 EGF \(G(x)=\exp(D(x))\)

使用多项式基本操作,我们可以在模一个多项式的意义下组合出大部分s生成函数的展开式。

连通二分图数量

先考虑不要求连通的染色二分图数量,将二分图按左右部染色,设左边染色了 \(k\) 个,则染色方案有 \(\binom{n}{k}\) ,边总量是 \(k(n-k)\) ,连边方案为 \(2^{k(n-k)}\) ,我们得到:

\[a_n=\sum_{0\leq k \leq n}\binom{n}{k} 2^{k(n-k)} \]

设其 EGF 为 \(A(x)\) ,设连通染色二分图的 EGF 为 \(B(x)\) ,我们发现 \(a_n\)\(b_n\) 构成分拆关系!即一个二分图可以表示成若干连通二分图的和,则有 \(A(x)=\exp(B(x))\) ,即:

\[B(x)=\ln(A(x)) \]

由于染色具有对称性,最终的答案就是 \([x^n]\frac{1}{2}B(x)\)

斐波那契额数列通项

先求出其 OGF \(F(x)=\frac{x}{1-x-x^2}\)

我们将 \(1-x-x^2\) 因式分解成 \((x-\gamma_1)(x-\gamma_2)\) ,则有:

\[F(x)=\frac{A}{x-\gamma_1}+\frac{B}{x-\gamma_2} \]

继续推断可以得到:

\[F(x)=\frac{1}{\gamma_1-\gamma_2}(\frac{1}{1-\gamma_1 x}-\frac{1}{1-\gamma_2 x }) \]

解出来带入得到:

\[F(x)=\frac{1}{\sqrt{5}}(\sum \gamma_1^kx^k-\sum \gamma_2^kx^k) \]

于是 \(f_n=\frac{1}{\sqrt{5}}(\gamma_1^n-\gamma_2^n)\) ,就得到了斐波那契额数列通项。

posted @ 2025-07-30 17:31  蒻蒻虫  阅读(29)  评论(0)    收藏  举报