EGF 学习笔记
【EGF】
对于一个数列 \(<f_n>\),定义其指数型生成函数(EGF)\(\hat{F}(x)=\displaystyle\sum_{n\ge 0}\dfrac{f_n}{n!}x^n\)。实际上 \(EGF<f_n>=OGF<\dfrac{f_n}{n!}>\)
定理:若 \(<a_n>\) 的 EGF 为 \(\hat{A}(x)\),\(<b_n>\) 的 EGF 为 \(\hat{B}(x)\),\(<c_n>\) 的 EGF 为 \(\hat{C}(x)\),则 \(c_n=\displaystyle\sum_{i+j=n}(^n_i)a_ib_j\)。即 \(c\) 是 \(a,b\) 的二项式卷积结果。
【EGF 有什么用?】
比如我们要算一个数列的第 \(n\) 项,就可以用一些多项式手法求出它的 EGF。这里说的求出 EGF 是求出 EGF 的前 \(n\) 项系数。
而 EGF 的第 \(n\) 项系数是 \(\dfrac{a_n}{n!}\),算出了这个,显然也能算出 \(a_n\)。
【应用:组合计数对象的拼接】
树+圈 计数
-
有标号 \(n\) 个点恰好组成一棵树的方案数 \(t_n=n^{n-2}\)。(Cayley 公式)
-
有标号 \(n\) 个点恰好组成一个圈(禁止重边自环)的方案数 \(c_n=\begin{cases}(n-1)!/2&n>2\\0&n\le 2\end{cases}\)
组合问题:\(n\) 个点恰好组成一棵树和一个圈的方案数 \(a_n\) 是多少?
\(a_n=\sum_{i=0}^nC_{n}^it_ic_{n-i}\),即从 \(n\) 个点里选若干个点组成树,其余的组成圈。
发现 \(a_n\) 就是 \(t_n,c_n\) 的二项式卷积,所以 \(a_n\) 的 EGF 等于 \(t_n,c_n\) 的 EGF 乘积。
有标号固定连通块数量无向图计数
\(x\) 个点有标号无向图的数量 \(f(x)=2^{C^2_x}\),即每条可能的边选或不选。
那么 \(x\) 个点有标号无向连通图的数量 \(g(x)\)?
考虑有两个连通块的数量:\(g_2(x)=\displaystyle\dfrac{1}{2!}\sum_{i=1}^{n-1}(^n_i)f(i)\cdot f(n-i)\) 即枚举一个连通块的点,分别计算再相乘。有一个 \(\dfrac{1}{2!}\) 的原因是树之间会重复计算。所以 \(\hat{g_2}(x)=\dfrac{1}{2}\hat{f}(x)\hat{f}(x)\)。
更进一步,\(\hat{g_k}(x)=\dfrac{1}{k!}(\hat{f}(x))^k\)。
所以 \(x\) 个点有标号的有若干个连通块的图的数量 \(h(x)\) 满足:\(\hat{h}(n)=\exp(\hat{f}(x))\)。
其实不一定是连通图有这个规律!
比如 \(x\) 个点形成一个圈的 EGF: \(\hat{f}(x)\),和形成若干个圈的 EGF: \(\hat{g}(x)\) 满足 \(\hat{g}(x)=\exp(\hat{f}(x))\)。
所以形成一个满足条件 P 的图的 EGF,和形成若干个满足条件 P 的图的 EGF,只差一个 \(\exp\)。
这是巧合吗?我们看下一个例子。
排列数与圆排列
排列数 \(p_i=i!\) 的 EGF:\(\hat{p}(x)=\displaystyle\sum_{n\ge 0}\dfrac{p_n}{n!}x^n=\sum_{n\ge 0}x^n=\dfrac{1}{1-x}\)。(最后一步错位相减)
圆排列 \(q_i=(i-1)!\) 的 EGF:\(\hat{q}(x)=\displaystyle\sum_{n\ge 1}\dfrac{(n-1)!}{n!}x^n=\sum_{n\ge 1}\dfrac{x^n}{n}=\ln \dfrac{1}{1-x}\)。
(因为 \(\displaystyle\sum_{n\ge 1}\dfrac{x^n}{n}\) 的导 \(=\sum x^{n-1}\))
我们发现 \(\hat{p}(x)=\exp(\hat{q}(x))\)!
为什么呢?如果把排列看作一个置换,则 "排列" 就是若干个 "圆排列" 组成的。而我们也验证了一个重要的性质:
如果一个东西 \(p\) 是由若干个另一个东西 \(q\) 组成,则 \(\hat{p}(x)=\exp(\hat{q}(x))\),和上面的结论相同。
\(\exp(f(x))=\displaystyle\sum_{i\ge 0}\dfrac{f(x)^i}{i!}\),这是一个复合函数。
错排问题
考虑一个问题 Q:让 \(1\sim n\) 每个数指向另一个数,不允许指向自己,使得最终形成一个环的方案数。
\(q_n=(n-1)!,q_1=q_0=0\)。
则 \(\hat{Q}(x)=\displaystyle\sum_{n=2}^{+\infty}\dfrac{q_n}{n!}\cdot x^n=\sum_{n=2}^{+\infty}\dfrac{x^n}{n}=\ln(\dfrac{1}{1-x})-x\)。
所以错排的 EGF 就是 \(\exp(\hat{Q}(x))\)。进而可以求出错排的答案。
连通图计数
因为无向图(有若干个连通块)的方案数 \(f_n=2^{C_n^2}\),所以一个连通块的 EGF = \(\ln(\hat{f}(x))\)。
BZOJ4228
题意:求 \(n\) 个点的无向图数量,满足不存在三个相互可达的点 \(a,b,c\),使得 \(dis(a,b),dis(b,c),dis(a,c)\) 不全相同。
首先发现不可能有长度为 \(3\) 的倍数的环,其次发现不会有点的度数 \(\ge 3\)。
由此推出图的结构为若干个链 + 若干个长度非 \(3\) 的倍数的环。
考虑 \(n\) 个点一条链的 EGF:\(\hat{A}(x)=x+\displaystyle\sum_{i=2}^n\dfrac{i!/2}{i!}x^i\)。
然后考虑 \(n\) 个点长度非 \(3\) 的倍数的环的 EGF: \(\hat{B}(x)=\displaystyle\sum_{i>3,3\not\mid i}\dfrac{(i-1)!}{2}\cdot\dfrac{x^i}{i!}=\sum_{i>3,3\not\mid i}\dfrac{x^i}{2i}\)。
然后考虑 \(n\) 个点是链或者长度非 \(3\) 倍数环的 EGF: \(\hat{C}(x)=\hat{A}(x)+\hat{B}(x)\)。
原问题是若干个链或者非 \(3\) 倍数环,所以原问题的 EGF 是 \(\exp(\hat{C}(x))\)。
基环树计数
\(n\) 个点基环树的个数?
\(n\) 个点有根树的个数:\(r_n=n^{n-2}\times n=n^{n-1}\),因为要从生成树决定一个根。
\(r_n\) 的生成函数 \(\hat{R}(x)=\sum \dfrac{r_n}{n!}x^n\)。
枚举基环树的环上有 \(k\) 个点。考虑枚举拆开环后每一颗树的结点个数。
个数 \(b_n^{(k)}=\displaystyle\sum_{i_1+\dots+i_k=n}\dfrac{1}{2k}(^{\;\;\;n}_{i_1,i_2,\dots,i_k})r_{i_1}\cdot r_{i_2}\cdots r_{i_k}\)
(为什么是 \(\dfrac{1}{k}\) 不是 \(\dfrac{1}{k!}\)?因为环有顺序,不会重复 \(k!\) 次)
目标就是求 \(\displaystyle\sum_{k=3}^{+\infty}b_n^{(k)}\)。
设 \(b_n^{(k)}\) 以 \(n\) 为变量的 EGF 是 \(\hat{B}^{(k)}(x)\)。
如何求 \(\hat{B}^{(k)}(x)\)?考虑另一个函数 \(\hat{C}^{(k)}(x)=\hat{B}^{(k)}(x)\times 2k\)。设这个 EGF 对应的原函数是 \(c_n^{(k)}\)。
观察到 \(\displaystyle\sum_{i_1+\dots+i_k=n}\dfrac{r_{i_1}}{i_1!}\cdot \dfrac{r_{i_2}}{i_2!}\cdots \dfrac{r_{i_k}}{i_k!}=\dfrac{c_n^{(k)}}{n!}\)。
所以 \(\hat{R}(x)^k=\hat{C}(x)\)。
所以 \(\hat{B}^{(k)}(x)=\dfrac{1}{2k}(\hat{R}(x))^k\)
所以 \(\displaystyle\sum_{k=3}^{+\infty}b_n^{(k)}=\dfrac{1}{2}\sum_{k=3}\dfrac{1}{k}\hat{R}(x)^k=\dfrac{1}{2}[\sum_{k=1}\dfrac{1}{k}\hat{R}(x)^k-\hat{R}(x)-\dfrac{\hat{R}(x)}{2}]=\dfrac{1}{2}[-\ln(1-\hat{R}(x))-\hat{R}(x)-\dfrac{\hat{R}(x)}{2}]\)。
【多重集排列计数型】
有限多重集
\(S\) 是一个多重集,共 \(k\) 种数(不妨为 \(1\sim k\)),每种有 \(n_i\) 个。问从中选 \(n\) 个排列的个数 \(t_n\)。
有 \(\hat{T}(x)=\displaystyle\prod_{i=1}^k\hat{G_i}(x)\)。其中 \(\hat{G_i}(x)\) 表示 \(<1,1,1,\dots,1>\)(共 \(n_i+1\) 个 \(1\)) 的 EGF。
为什么呢?还是可以用组合对象的拼接来理解。
方案数 \(ans=\displaystyle\sum_{i_1+i_2+\dots+i_k=n} {n\choose{i_1\,i_2\,\cdots\,i_k}}g_{1,i_1}g_{2,i_2}\cdots g_{k,i_k}\)。
其中 \(g_{1,i_1}\) 表示用 \(1\) 填满 \(i_1\) 个位置的方案数,即当 \(i_1\le n_1\) 时为 \(1\),否则为 \(0\)。
这是二项式卷积的形式!所以 \(ans\) 的 EGF \(\hat{T}(x)=\displaystyle\prod_{i=1}^k \hat{G_i}(x)\)。
POJ3734 Blocks
题意:用红黄蓝绿染 \(n\) 个格子,要求红黄要偶数个,求方案数。
记答案为 \(f_n\)。
注:\(e^{-x}=\displaystyle\sum_{i=0}^{+\infty}\dfrac{x^i}{i!}\times (-1)^i\)
和 OGF 的经典例题 "食物" 很像吧?区别在于:"食物" 不用排列选出的食物,但是这题要排列格子。
POJ1322 Chocolate
题意:有 \(C\) 种巧克力(数量无限)。买 \(n\) 块,问恰好有 \(m\) 种买了奇数个的概率。(保证 \(n,m\) 同奇偶)
因为总方案数很简单(一个隔板法),所以只要求方案数即可。
转化:前 \(m\) 个买了奇数个,后 \(C-m\) 个买了偶数个,最后乘以一个 \(C\choose m\) 即可。设转化后方案数为 \(g_n\)。
\(\hat{G}(x)=(\frac{x}{1!}+\frac{x^3}{3!}+\cdots)^m(\frac{x^0}{0!}+\frac{x^2}{2!}+\cdots)^{C-m}=(\dfrac{e^x-e^{-x}}{2})^m(\dfrac{e^x+e^{-x}}{2})^{C-m}\)。
化简的步骤看上面的参考。
乘积期望
\(a_1\sim a_n\) 已知,\(c_1\sim c_n\) 为一个等概率随机的数组,满足 \(c_i\ge 0,\sum c_i=m\)。求 \(E(\displaystyle\prod_{i=1}^n(a_i+c_i))\)。
法一:
期望 = 总和 / 总方案数。
总方案数就是分配 \(c_i\) 的值的方案数,相当于求不定方程 \(c_1+c_2+\cdots+c_n=m\) 的非负整数解个数。隔板法。
问题转化为求 \(\displaystyle\sum_{b_1+\cdots+b_n=m}\prod_{i=1}^{n}(a_i+b_i)\)。
在看到 \(a_1+\dots+a_n=m\) 的形式时,要想到用多项式/生成函数转化到系数上。
考虑多项式 \(F_i(x)=\displaystyle\sum_{j=0}^{+\infty}(a_i+j)x^j\)。则答案就是求 \(\displaystyle\prod_{i=1}^{n}F_i(x)\) 中 \(x^m\) 的系数。
继续剖析 \(F_i(x)\)。
所以 \(\displaystyle\prod_{i=1}^n F_i(x)=(1-x)^{-2n}\prod_{i=1}^n(a_i+(1-a_i)x)\),要求 \(x^m\) 的系数。
前半部分可以广义二项式定理,后半部分可以 FFT 分治。\(O(n\log^2 n)\)。
\(\dfrac{1}{1-x}=1+x+x^2+\cdots\Rightarrow \dfrac{1}{(1-x)^2}=1+2x+3x^2+\dots\Rightarrow \dfrac{x}{(1-x)^2}=0\cdot x^0+1\cdot x+2\cdot x^2+\cdots\)
法二:
令 \(N=\{1,2,\dots,n\}\)。
\(\displaystyle\prod_{i=1}^n(a_i+c_i)=\sum_{S\subseteq N}\prod_{i\in S}c_i\prod_{i\not\in S}a_i\)
转化为求 \(\displaystyle\sum_{S\subseteq N}(\prod_{i\not\in S}a_i)E(\prod_{i\in S}c_i)\)。
根据 \(c_1\sim c_n\) 的对称性,\(\prod_{i\in S}c_i\) 应只与 \(|S|\) 有关,与 \(S\) 具体是什么无关。令 \(k=|S|\)
所以转化为求 \(E(\prod_{1\le i\le k}c_i)\),而这个数 \(=\dfrac{{n+m-1}\choose{n+k-1}}{{n+m-1}\choose{n-1}}\)。
为什么呢?\({n+m-1}\choose{n-1}\) 是总方案数。
如果 \(\displaystyle\sum_{c_1+\cdots+c_n=m}\prod_{i=1}^kc_i\) 等于分子,得证。
注意到 \(c_1+\cdots+c_n=m\) 的形式,考虑母函数。
令 \(f(x)=0x^0+1x^1+2x^2+\cdots=\dfrac{x}{(1-x)^2}\),\(g(x)=1x^0+1x^1+1x^2+\cdots=\dfrac{1}{1-x}\)。
则:
可以用广义二项式定理展开,得证。
于是转化为对每一个固定的 \(k\),求 \(\displaystyle\dfrac{{n+m-1}\choose{n+k-1}}{{n+m-1}\choose{n-1}}\times \sum_{S\subseteq N,|S|=k}\cdot \prod_{i\not\in S}a_i\)。
不属于其实和属于是等价的:即求 \(\displaystyle\dfrac{{n+m-1}\choose{n+k-1}}{{n+m-1}\choose{n-1}}\times \sum_{S\subseteq N,|S|=n-k}\cdot \prod_{i\in S}a_i\)。
而观察到 \(\displaystyle\sum_{S\subseteq N,|S|=n-k}\cdot \prod_{i\in S}a_i=[x^j]\prod_{i=1}^n(a_ix+1)\),可以分治 FFT 来做,同样是 \(O(n\log^2 n)\)。
Balls in Box
\(a_1\sim a_n\) 已知。\(c_1\sim c_n\) 初始为 \(0\),随机 \(m\) 次,每次让某个 \(c_i+1\)。求 \(E(\displaystyle\prod_{i=1}^n(a_i+c_i))\)。\(n\le 1000\)
注意这题与上一题的区别:上一题最终的 \(c\) 数组是等概率的,但这一题的 \(c\) 最终不是等概率的,比如 \(0,0,0,10^9\) 肯定和 \(\frac{10^9}{4},\frac{10^9}{4},\frac{10^9}{4},\frac{10^9}{4}\) 不等概率。
即求 \(E(\displaystyle\sum_{b_1+\cdots+b_n=m}{{m}\choose{b_1\,b_2\,\cdots\,b_m}}\prod(a_i+b_i))\)。
这里多了一个组合数,因为从 \(m\) 次 \(+1\) 中抽出 \(b_1\) 次给 \(c_1\) 加 …… 这也是与上一题不同的地方。
还是把期望变成 合法方案数 / 总方案数,总方案数显然是 \(n^m\)。
多了个组合数,怎么做?
\(ans=\displaystyle\sum_{b_1+\cdots+b_n=m}{{m}\choose{b_1\,b_2\,\cdots\,b_m}}\prod(a_i+b_i)\)
\(\Rightarrow \dfrac{ans}{m!}=\displaystyle\sum_{b_1+\cdots+b_n=m}\prod\dfrac{(a_i+b_i)}{b_i!}\)
发现又是 \(b_1+\cdots+b_n=m\) 的形式,上母函数!
\(F_i(x)=\displaystyle\sum_{j=0}^{\infty}\dfrac{a_i+j}{j!}x^j\)。
则 \(\dfrac{ans}{m!}=[x^m]F_1(x)\cdots F_n(x)\),现在的任务就是化简 \(F_i(x)\)。
\(\displaystyle F_i(x)=\sum_{j=0}^{\infty}\dfrac{a_i}{j!}x^j+\sum_{j=1}^{\infty}\dfrac{1}{(j-1)!}x^j=a_i\cdot e^x+x\sum_{j=1}^{\infty}\dfrac{1}{(j-1)!}x^{j-1}=a_i\cdot e^x+x\cdot e^x=(a_i+x)e^x\)
\(\therefore \prod F_i(x)=(a_1+x)(a_2+x)\cdots (a_n+x)\cdot e^{xn}\)
求 \(x^m\) 的系数,左边可以直接 \(O(n^2)\) 求,右边可以泰勒展开。