[学习笔记]生成函数

不懂是第几次重修了。
现在可能比较懂了一点。
以下可能略过某些过程。

OGF

fib数列

写作生成函数\(F(x) = x + x F(x) + x ^2 F(x)\)

\(F(x) = \frac{x}{1 - x - x^2}\)

\((1 - ax) (1 - bx) = 1 - x - x^2\)

解得 \(a = \frac{1 + \sqrt 5}{2},b = \frac{1 - \sqrt 5}{2}\)

所以有\(F(x) = \frac{1}{\sqrt 5}(\frac{1}{1 - ax} - \frac{1}{1 - bx}) = \sum \frac{a^i - b^i}{\sqrt 5} x^i\)

则有\(f_n = \frac{1}{\sqrt 5}(a^i - b^i)\)

微积分

\(\frac{d}{dx}(\sum f_nx^n) = \sum (n + 1)f_{n + 1}x^n\)
\(\int(\sum f_n x^n)dx = \sum frac{f_{n - 1}}{n} x^n + C\)

一些OGF的例子

image

卡特兰数

参见浅谈卡特兰数中生成函数一节。

整数拆分

\(\sum a_i = n(a_{i + 1}\leq a_i)\)的方案数。

\(P(x) = \prod_{i = 1}\frac{1}{1 - x^i}\)

实际上是对每个数系合并。

五边数定理

\(\prod_{i = 1}\frac{1}{1 - x^i} = \sum (-1) ^ k x ^ {k (3k \pm 1} / 2\\ = 1 - x - x ^ 2 + x ^ 5 + x ^ 5 - x ^ {12} - x ^ {15} .....\)

\(P(x)\prod_{i = 1}\frac{1}{1 - x^i} = 1\)

所以有\(1 + xP(x) + x^2P(x) - x^5 - x^7P(x) .. = P(x)\)

所以有\(p_n = [n = 0] + p_{n - 1} + p_{n - 2} - p_{n - 5} - p_{n - 7}....\)

暴力枚举可以在\(O(n\sqrt n)\)内解决该问题。

EGF

咕咕咕咕。

指数型生成函数

其用来处理一类物品有标号问题。

\(h_n = \sum_{i = 0}^n\binom{n}{i}f_ig_{n - i}\)

我们称其为二项卷积。

那么我们展开组合数。

\(\frac{h_n}{n!} = \sum_{i = 0}\frac{f_i}{i!} \frac{g_{n - i}}{(n - i)!}\)

所以\({\frac{h_n}{n!}}\)\({\frac{f_n}{n!}}\)\({\frac{g_n}{n!}}\)的卷积。

所以这也是为什么指数型生成函数给定的是\(F(x) = \sum \frac{x^i}{i!} f_i\)

微积分

\(\frac{d}{dx}\sum f_n \frac{x^n}{n!} = \sum f_{n + 1} \frac{x^n}{n!}\)

\(\int\sum f_n \frac{x^n}{n!} = \sum_{1 \leq n} f_{n - 1} \frac{x^n}{n!}\)

发现求导或积分是对一个生成函数完成系数左移或右移。

如果乘于或除\(x\),就会得到一个类似于\(OGF\)的求导和积分一样的东西:

\(x\sum f_n \frac{x^n}{n!} = \sum_{1 \leq n} \frac{f_{n - 1}}{n} \frac{x^n}{n!}\)

\(\frac{1}{x} (\sum f_n \frac{x^n}{n!} - f_0) = \sum(n + 1)\frac{f_{n + 1}}{n} \frac{x^n}{n!}\)

一些简单的例子

image

贝尔数——exp

定义\(w_n\),为\({1,2,....,n}\)的集合划分为若干不相交非空子集的并的方案数。

所以有\(w_n = [n = 0] + \sum_{i = 1}^n \binom{n - 1}{i - 1}w_{n - i}\)

知道右边为\({w_n}\)\({1}\)的二项卷积的\(n - 1\)项,即\(W(x)\)\(e^x\)乘起来右移一位,即积分一下。

所以\(W(x) = 1 + \int W(x)e^x dx\)

\(\frac{dW(x)}{dx} = W(x)e^x\)

\(\frac{dW(x)}{W(x)} = e^xdx\)

\(ln W(x) = e^x + C\)

代入\(W(x) = e^x = 1(x = 0)\)

所以\(C = -1\)

所以我们得到\(W(x) = \exp(e^x - 1)\)
我们期望给其一个合理的组合解释。

考虑\(A(x) = e^x - 1\)是只有一个盒子的方案数。

考虑每次乘一个\(A(x)\)就相当于多拼上了一个盒子。

那么\([x^n]A^k(x)\)相当于\(k\)个有标号盒子拼了\(n\)个位置出来,因为我们是无标号的,所以多除一个\(k!\)

简单无向连接图——ln

\(f_n\)表示\(n\)个点的简单无向联通图的个数(点带标号)。

\(g_n\)表示\(n\)个点的简单无向图的个数。

要求\(f_n\),先用\(g_n\)减去不连通的个数,不连通的话,枚举\(1\)号点所在的联通块大小\(i\),先从\(\binom{n - 1}{i - 1}\)选出和\(1\)在一块的方案数,然后\(f_i\)连成一块,\(g_{n - i}\)任意连。

\(f_n = g_n - \sum_{i = 1}^{n - 1}\binom{n - 1}{i - 1}f_ig_{n - i}\)

所以移项得\(g_n = [n = 0] + \sum_{i = 1} ^ n\binom{n - 1}{i - 1}f_ig_{n - i}\)

我们规定\(g_0 = 1,f_0 = 0\)

\(ln G(x) = F(x) + C\)
\(C = 0\)

所以\(F(x) = ln G(x)\)

强连通竞赛图计数——求逆

考虑其求的是所有有哈密顿回路的竞赛图的哈密顿回路个数的期望。

但实际上所有哈密顿回路的个数很好求,即\((n - 1)!2^{n(n - 1) / 2 - n}\)

那我们只要求有哈密顿回路的竞赛图。

其等价于强连通的竞赛图。

所以令\(f_n\)\(n\)个点的强连通竞赛图,\(g_n\)为竞赛图个数。

\(g_n = \sum_{i = 1}^n \binom{n}{i}f_ig_{n - i}\)
相当于枚举拓扑序最小的强连通分量的大小。

于是有$G(x) = G(x) F(x) $

所以有\(G(x) = \frac{1}{1 - F(x)}\)

所以有\(F(x) = 1 - \frac{1}{G(x)}\)

无穷背包方案数——ln/exp

\(f_{i_j} = f_{i- 1,j} + f_{i,j - vi}\)
\(F_i(x) = \sum f_{i,j}x^j\)

所以有\(F_i(x) = F_{i - 1}(x) + x^{vi}F_i(x)\)
所以最后答案是
\(\prod \frac{1}{1 - x^{vi}}\)
考虑如何算这个东西
发现\(\prod\)很难算。
但其取对数后会变成加法。

\(F(x) = exp ln F(x)\\=exp\sum_{i = 1}^n ln \frac{1}{1 - x^{jvi}}\\=exp \sum_{i = 1}^n\sum_{1\leq j}\frac{x^{jvi}}{j}\)

\(vi = k\)\(b_k\)

所以有\(exp\sum_{1 \leq k}b_k\sum_{1\leq j}\frac{x^{jk}}{j}\)

因为\(exp\)只依赖前\(m\)项,所以我们枚举\(jk\leq m\)即可。

\(ln \ exp\)的另一个用途,在\(\prod 和\)\sum$中反复横跳。

原文地址:https://www.cnblogs.com/dixiao/p/15728064.html