EGF
(全文都是以 EGF 为基础)
封闭形式
- 这个有关于麦克劳林级数(泰勒展开的一种特殊情况)
泰勒公式
- 若 \(x\) 在 \(x_0\) 处可导,那么当 \(x\to x_0\) 时,函数的展开式近似于:
麦克劳林级数是我们在 \(x_0\to 0\) 时的展开,也就是泰勒公式的一个特殊情况
排列和圆排列
- 长度为 \(n\) 的排列数的指数生成函数是
-
圆排列的定义是排成一个环的方案
-
\(n\) 个数的圆排列方案为 \((n-1)!\)
- 那么 \(\exp(Q(x))=P(x)\)
exp 的直观理解
-
上述中一个排列的每种方案其实就是将原排列分成若干集合,每种集合组成一种置换环
-
那么方案数就是每种划分方案后的置换环的方案数的乘积
-
这个置换环的方案数实际上就是圆排列的方案数
-
形式化的,假设当前有 \(n\) 个元素,求 \(A\) 的方案数,设生成函数为 \(F(x)\)
-
每种方案可以对应将 \(n\) 个元素先划分成若干个集合,每个集合 \(B\) 的方案数的乘积,设 \(B\) 的生成函数为 \(G(x)\)
-
那么 \(\exp(G(x))=F(x)\)
推广
-
如果 \(n\) 个点 带标号 生成树的 EGF 是 \(G(x)\) ,\(n\) 个点 带标号 森林的 EGF 是 \(F(x)\) ,那么 \(F(x)=\exp(G(x))\)
-
如果 \(n\) 个点带标号无向连通图的 EGF 是 \(G(x)\) ,那么 \(n\) 个点带标号无向图的 EGF 是 \(\exp(G(x))\)
应用
长度为 \(n\) 的一个错排指 \(p_i\ne i\)
求错排的指数生成函数
-
从置换环的角度来看,实际上就是不存在长度为 1 的置换环,生成函数 \(G(x)=\sum_{n\geq 2 } \frac{x^n}{n}=\ln (\frac{1}{1-x})-x\)
-
那么错排的生成函数是 \(\exp(G(x))\)
求有多少个映射 \(f:\{1,2,...,n\} \to \{1,2,...,n\}\) ,使得
任意一个 \(i\) 映射 \(k\) 次后等于映射 \(k-1\) 次后映射的数是同一个数
-
考虑将 \(i\) 和 \(f_i\) 连边。相当于我们从任意一个 \(i\) 走 \(k\) 步和走 \(k-1\) 步到达的是同一个点
-
那么整个图就是一些带一个自环的基环树组成的,且环的深度不超过 \(k\) ,假设根的深度为 \(1\)
-
我们将环当成根,把边的方向反一下,那么整个图可以当成一些深度不超过 \(k\) 的生成树组成的
-
假设深度不超过 \(k\) 的生成树的方案数的生成函数为 \(F_k(x)\)
-
实际上深度不超过 \(k\) 的生成树就是用一个节点将深度不超过 \(k-1\) 的森林连起来
-
那么 \(F_k(x)=x\exp(F_{k-1}(x))\)
-
答案是 \([x^n]\exp (F_k(x))\)
给一个 \(n\) 个数的序列 \(a_1,a_2,...,a_n\) ,和初值为 0 的变量 \(s\) ,要求你重复一下操作 \(k\) 次
- 在 \(1,2,...,n\) 中等概率选择一个 \(x\)
- 令 \(s\) 加上 \(\Pi_{i\ne x} a_i\)
- 令 \(a_x\) 减一
求 \(k\) 次操作后 \(s\) 的期望
\(1\leq n \leq 5000,1\leq k\leq 10^9,0\leq a_i\leq 10^9\)
-
首先随便减两个数,发现最终的结果和减的顺序没有关系
-
那么我们将一个数所有的减操作放在一起,再归纳一下,设每个数减少 \(b_i\),可以得出
-
那么我们的问题就转换成了 \(\prod_{i=1}^n (a_i-b_i)\) 的期望
-
考虑计算每种方案的 \(\prod_{i=1}^n(a_i-b_i)\) 的和,最后除 \(n^k\)
-
\(k\) 次序列中,要使得 \(i\) 出现 \(b_i\) 次的方案数是
-
这和指数生成函数的系数类似
-
设 \(a_j\) 的指数生成函数是
-
那么答案就是 \([x^k]\prod_{j=1}^nF_j(x)\)
-
为了快速计算答案,我们需要将 \(F_j(x)\) 转换成封闭形式
-
\(F_j(x)=a_je^x-xe^x=(a_j-x)e^x\)
-
\(\prod_{j=1}^n F_j(x)=e^{nx}\prod_{j=1}^n(a_j-x)\)
-
\(\prod_{j=1}^n (a_j-x)\) 是个 \(n\) 次多项式,可以暴力算,假设展开式是 \(\sum_{i=0}^n c_ix^i\) ,那么
- 答案就是这个多项式 \(x^k\) 的系数