EGF 学习笔记

【EGF】

对于一个数列 <fn>,定义其指数型生成函数(EGF)F^(x)=n0fnn!xn。实际上 EGF<fn>=OGF<fnn!>

定理:若 <an> 的 EGF 为 A^(x)<bn> 的 EGF 为 B^(x)<cn> 的 EGF 为 C^(x),则 cn=i+j=n(in)aibj。即 ca,b 的二项式卷积结果。

【EGF 有什么用?】

比如我们要算一个数列的第 n 项,就可以用一些多项式手法求出它的 EGF。这里说的求出 EGF 是求出 EGF 的前 n 项系数。

而 EGF 的第 n 项系数是 ann!,算出了这个,显然也能算出 an

【应用:组合计数对象的拼接】

树+圈 计数

  1. 有标号 n 个点恰好组成一棵树的方案数 tn=nn2。(Cayley 公式)

  2. 有标号 n 个点恰好组成一个圈(禁止重边自环)的方案数 cn={(n1)!/2n>20n2

组合问题:n 个点恰好组成一棵树和一个圈的方案数 an 是多少?

an=i=0nCniticni,即从 n 个点里选若干个点组成树,其余的组成圈。

发现 an 就是 tn,cn 的二项式卷积,所以 an 的 EGF 等于 tn,cn 的 EGF 乘积。

有标号固定连通块数量无向图计数

x 个点有标号无向图的数量 f(x)=2Cx2,即每条可能的边选或不选。

那么 x 个点有标号无向连通图的数量 g(x)

考虑有两个连通块的数量:g2(x)=12!i=1n1(in)f(i)f(ni) 即枚举一个连通块的点,分别计算再相乘。有一个 12! 的原因是树之间会重复计算。所以 g2^(x)=12f^(x)f^(x)

更进一步,gk^(x)=1k!(f^(x))k

所以 x 个点有标号的有若干个连通块的图的数量 h(x) 满足:h^(n)=exp(f^(x))

其实不一定是连通图有这个规律!

比如 x 个点形成一个圈的 EGF: f^(x),和形成若干个圈的 EGF: g^(x) 满足 g^(x)=exp(f^(x))

所以形成一个满足条件 P 的图的 EGF,和形成若干个满足条件 P 的图的 EGF,只差一个 exp

这是巧合吗?我们看下一个例子。

排列数与圆排列

排列数 pi=i! 的 EGF:p^(x)=n0pnn!xn=n0xn=11x。(最后一步错位相减)

圆排列 qi=(i1)! 的 EGF:q^(x)=n1(n1)!n!xn=n1xnn=ln11x

(因为 n1xnn 的导 =xn1

我们发现 p^(x)=exp(q^(x))

为什么呢?如果把排列看作一个置换,则 "排列" 就是若干个 "圆排列" 组成的。而我们也验证了一个重要的性质:

如果一个东西 p 是由若干个另一个东西 q 组成,则 p^(x)=exp(q^(x)),和上面的结论相同。

exp(f(x))=i0f(x)ii!,这是一个复合函数。

错排问题

考虑一个问题 Q:让 1n 每个数指向另一个数,不允许指向自己,使得最终形成一个环的方案数。

qn=(n1)!,q1=q0=0

Q^(x)=n=2+qnn!xn=n=2+xnn=ln(11x)x

所以错排的 EGF 就是 exp(Q^(x))。进而可以求出错排的答案。

连通图计数

因为无向图(有若干个连通块)的方案数 fn=2Cn2,所以一个连通块的 EGF = ln(f^(x))

BZOJ4228

题意:求 n 个点的无向图数量,满足不存在三个相互可达的点 a,b,c,使得 dis(a,b),dis(b,c),dis(a,c) 不全相同。

首先发现不可能有长度为 3 的倍数的环,其次发现不会有点的度数 3

由此推出图的结构为若干个链 + 若干个长度非 3 的倍数的环。

考虑 n 个点一条链的 EGF:A^(x)=x+i=2ni!/2i!xi

然后考虑 n 个点长度非 3 的倍数的环的 EGF: B^(x)=i>3,3i(i1)!2xii!=i>3,3ixi2i

然后考虑 n 个点是链或者长度非 3 倍数环的 EGF: C^(x)=A^(x)+B^(x)

原问题是若干个链或者非 3 倍数环,所以原问题的 EGF 是 exp(C^(x))

基环树计数

n 个点基环树的个数?

n 个点有根树的个数:rn=nn2×n=nn1,因为要从生成树决定一个根。

rn 的生成函数 R^(x)=rnn!xn

枚举基环树的环上有 k 个点。考虑枚举拆开环后每一颗树的结点个数。

个数 bn(k)=i1++ik=n12k(i1,i2,,ikn)ri1ri2rik

(为什么是 1k 不是 1k!?因为环有顺序,不会重复 k! 次)

目标就是求 k=3+bn(k)

bn(k)n 为变量的 EGF 是 B^(k)(x)

如何求 B^(k)(x)?考虑另一个函数 C^(k)(x)=B^(k)(x)×2k。设这个 EGF 对应的原函数是 cn(k)

观察到 i1++ik=nri1i1!ri2i2!rikik!=cn(k)n!

所以 R^(x)k=C^(x)

所以 B^(k)(x)=12k(R^(x))k

所以 k=3+bn(k)=12k=31kR^(x)k=12[k=11kR^(x)kR^(x)R^(x)2]=12[ln(1R^(x))R^(x)R^(x)2]

【多重集排列计数型】

有限多重集

S 是一个多重集,共 k 种数(不妨为 1k),每种有 ni 个。问从中选 n 个排列的个数 tn

T^(x)=i=1kGi^(x)。其中 Gi^(x) 表示 <1,1,1,,1>(共 ni+11) 的 EGF。

为什么呢?还是可以用组合对象的拼接来理解。

方案数 ans=i1+i2++ik=n(ni1i2ik)g1,i1g2,i2gk,ik

其中 g1,i1 表示用 1 填满 i1 个位置的方案数,即当 i1n1 时为 1,否则为 0

这是二项式卷积的形式!所以 ans 的 EGF T^(x)=i=1kGi^(x)

POJ3734 Blocks

题意:用红黄蓝绿染 n 个格子,要求红黄要偶数个,求方案数。

记答案为 fn

F^(x)=(1+x22!+x44!+)2(1+x1!+x22!+x33!+)2=(ex+ex2)2e2x=14(e4x+2e2x+1)

注:ex=i=0+xii!×(1)i

和 OGF 的经典例题 "食物" 很像吧?区别在于:"食物" 不用排列选出的食物,但是这题要排列格子。

POJ1322 Chocolate

题意:有 C 种巧克力(数量无限)。买 n 块,问恰好有 m 种买了奇数个的概率。(保证 n,m 同奇偶)

参考

因为总方案数很简单(一个隔板法),所以只要求方案数即可。

转化:前 m 个买了奇数个,后 Cm 个买了偶数个,最后乘以一个 (Cm) 即可。设转化后方案数为 gn

G^(x)=(x1!+x33!+)m(x00!+x22!+)Cm=(exex2)m(ex+ex2)Cm

化简的步骤看上面的参考。

乘积期望

a1an 已知,c1cn 为一个等概率随机的数组,满足 ci0,ci=m。求 E(i=1n(ai+ci))

法一:

期望 = 总和 / 总方案数。

总方案数就是分配 ci 的值的方案数,相当于求不定方程 c1+c2++cn=m 的非负整数解个数。隔板法。

问题转化为求 b1++bn=mi=1n(ai+bi)

在看到 a1++an=m 的形式时,要想到用多项式/生成函数转化到系数上。

考虑多项式 Fi(x)=j=0+(ai+j)xj。则答案就是求 i=1nFi(x)xm 的系数。

继续剖析 Fi(x)

Fi(x)=j=0+(ai+j)xj=ai(j=0+xj)+j=0+jxj=ai11x+x(1x)2=1(1x)2(ai(1x)+x)

所以 i=1nFi(x)=(1x)2ni=1n(ai+(1ai)x),要求 xm 的系数。

前半部分可以广义二项式定理,后半部分可以 FFT 分治。O(nlog2n)

11x=1+x+x2+1(1x)2=1+2x+3x2+x(1x)2=0x0+1x+2x2+

法二:

N={1,2,,n}

i=1n(ai+ci)=SNiSciiSai

转化为求 SN(iSai)E(iSci)

根据 c1cn 的对称性,iSci 应只与 |S| 有关,与 S 具体是什么无关。令 k=|S|

所以转化为求 E(1ikci),而这个数 =(n+m1n+k1)(n+m1n1)

为什么呢?(n+m1n1) 是总方案数。
如果 c1++cn=mi=1kci 等于分子,得证。

注意到 c1++cn=m 的形式,考虑母函数。

f(x)=0x0+1x1+2x2+=x(1x)2g(x)=1x0+1x1+1x2+=11x

则:

c1++cn=mi=1kci=[xm]f(x)kg(x)nk=[xm]xk(1x)2k+(nk)=[xm]xk(1x)n+k=[xmk](1x)(n+k)

可以用广义二项式定理展开,得证。

于是转化为对每一个固定的 k,求 (n+m1n+k1)(n+m1n1)×SN,|S|=kiSai

不属于其实和属于是等价的:即求 (n+m1n+k1)(n+m1n1)×SN,|S|=nkiSai

而观察到 SN,|S|=nkiSai=[xj]i=1n(aix+1),可以分治 FFT 来做,同样是 O(nlog2n)

Balls in Box

a1an 已知。c1cn 初始为 0,随机 m 次,每次让某个 ci+1。求 E(i=1n(ai+ci))n1000

注意这题与上一题的区别:上一题最终的 c 数组是等概率的,但这一题的 c 最终不是等概率的,比如 0,0,0,109 肯定和 1094,1094,1094,1094 不等概率。

即求 E(b1++bn=m(mb1b2bm)(ai+bi))

这里多了一个组合数,因为从 m+1 中抽出 b1 次给 c1 加 …… 这也是与上一题不同的地方。

还是把期望变成 合法方案数 / 总方案数,总方案数显然是 nm

多了个组合数,怎么做?

ans=b1++bn=m(mb1b2bm)(ai+bi)

ansm!=b1++bn=m(ai+bi)bi!

发现又是 b1++bn=m 的形式,上母函数!

Fi(x)=j=0ai+jj!xj

ansm!=[xm]F1(x)Fn(x),现在的任务就是化简 Fi(x)

Fi(x)=j=0aij!xj+j=11(j1)!xj=aiex+xj=11(j1)!xj1=aiex+xex=(ai+x)ex

Fi(x)=(a1+x)(a2+x)(an+x)exn

xm 的系数,左边可以直接 O(n2) 求,右边可以泰勒展开。

关灯问题

posted @   FLY_lai  阅读(170)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示