EGF 和 OGF 那些事

如何构造那些神来一笔的 OGF(普通生成函数)、EGF(指数生成函数)呢?

OGF

OGF 是解决无标号问题的生成函数,因为其乘法:

\[A[n]=\sum_{i=0}^nB[i]\cdot C[n-i] \]

本质上就是将 \(B,C\) 两个方案拼起来,配上对应的系数就形成了 \(A\),即两个方案各取一部分的方案。

形式化的讲:定义集合 \(A_1,A_2,A_3\dots A_n\) 的笛卡尔积为 \(B\) 那么:

\[B=\{(a_1,a_2,a_3\dots a_n)\mid a_1\in A_1,a_2\in A_2,a_3\in A_3\dots a_n\in A_n\} \]

定义 \(|(a_1,a_2,a_3\dots a_n)|=|a_1|+|a_2|+|a_3|+\dots+|a_n|\),那么由乘法分配律不难发现 OGF 的乘法描述的就是两个集合的笛卡尔积。


刚学 OGF 的时候我们就知道,OGF 有闭合形式和开放形式两种,开放形式是我们所求的,闭合形式则是为了得到一些良好的运算规则、性质所必须要经过的。

所以,问题就是,如何得到一个 OGF 的闭合形式?

最简单的,就是知道一个 OGF 的通项公式后累出一个关于幂级数的式子,比如对于:

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

那么就有:

\[A(x)=1+x\cdot A(x) \]

你可以解方程:

\[A(x)=\frac{1}{1-x} \]

你就得出了这 OGF 的闭合形式。


那么,还有什么方法给出 OGF 呢?接下来,我会从组合意义角度给出击中 OGF 的经典构造方法。

Sequence 构造

如果把一个集合 \(A\) 的元素排列成任意有长度的序列,那么考虑把 \(A\)\(n\) 元素结合成为的排列,那么就是 \(A^n\) 那么求和起来就是:

\[\operatorname{Seq}(A)=\sum_{i\ge 0} A^i \]

我们就可以求出其闭合形式:

\[\operatorname{Seq}(A)=\frac{1}{1-A(x)} \]

Amplification-k 构造

将集合 \(A\) 中的每个元素进行放大 \(k\) 倍。

那么两两元素之间的关系不变,而尺度放大 \(k\) 倍,那么:

\[\operatorname{Amp}_k(A)=A(x^k) \]

Burnside 引理

设群 \(G\) 作用在带权集合 \(X\) 上,对于 \(G\) 中的每一个元素 \(g\) 定义 OGF:

\[F_g(x)=\sum_{i\in \operatorname{Fix}_g(X)} x^{w(i)} \]

其中 \(\operatorname{Fix}_g(X)\) 的意思是在变换 \(g\)\(X\) 中满足 \(x\) 仍然映射到 \(x\)\(x\) 的集合。\(w(x)\)\(X\)\(\mathbb{N}\) 的一个映射,可以理解为价值函数,需要满足在映射 \(g\) 过后价值仍然不变。

定义轨道代表元的 OGF 记作 \(F\) 是在 \(G\) 中的每一个变换 \(g\) 后去重结果的 OGF,那么:

\[F(x)=\frac{1}{|G|}\sum_{g\in G}F_g(x) \]

意思就是 \(F\)\(F_g\) 的平均值。

如果令 \(w(x)\) 恒为 \(0\),那么有不带权的 \(\text{Burnside}\) 引理,就是:

\[F(x)=\frac{1}{|G|}\sum_{g\in G}|\operatorname{Fix}_g| \]

一般写作:

\[|X\backslash G|=\frac{1}{|G|}\sum_{g\in G}|\operatorname{Fix}_g| \]

Pólya 定理

\(\text{Burnside}\) 引理的推广。

\(\text{Pólya}\) 定理是告诉我们一个更优秀的 OGF 公式。

\(Y\) 是位置集合,群 \(G\) 是作用在 \(Y\) 上的。\(C\) 是颜色集合,每个集合中的元素 \(c\) 都有一个权值 \(w(c)\) 是价值函数。\(C\) 的 OGF 为:

\[C(x)=\sum_{i\in C} x^{w(i)} \]

\(X\)\(C\)\(Y\) 上的一种染色,定义对于 \(X\) 的所有染色的映射 \(f:Y\rightarrow C\) 那么:

\[w(f)=\sum_{i\in Y} w(f(i)) \]

与此同时 \(G\) 也作用于 \(X\) 上。

此时此刻,对于 \(g\in G\) 假设在 \(Y\) 上的置换有 \(\operatorname{Len}_k(g)\) 个长度为 \(k\) 的环,则同一个环中的所有位置必须染同一种颜色,贡献为:\(k\cdot w(c)\)。所有颜色的的贡献求和就是:

\[\operatorname{Amp}_k(C)=C(x^k) \]

不同循环彼此独立,那么总贡献:

\[F_g(x)=\prod_{k\ge 1}C(x^k)^{\operatorname{Len}_k(g)} \]

此时把 \(\text{Burnside}\) 引理的壳子套上去就有:

\[F=\frac{1}{|G|}\sum_{g\in G}\prod_{k\ge 1}C(x^k)^{\operatorname{Len}_k(g)} \]

不难发现,只要你钦定 \(w(x)=0\)\(\text{Pólya}\) 定理也有不带权的形式。

cycle 构造

直接运用 \(\text{Burnside}\) 引理即可。

考虑所有长度为 \(k\)\(A\) 构成的有序子序列,其 OGF 是:

\[A(x)^k \]

考虑 \(G\) 是大小为 \(k\) 的循环群,记 \(F_k\) 为大小为 \(k\) 的循环的 OGF,那么:

\[F_k(x)=\frac{1}{k}\sum_{m\mid k}\varphi(m)\cdot A(x^m)^{\frac{k}{m}} \]

那么结果是:

\[\operatorname{Cyc}(A)=\sum_{k\ge 1}\frac{1}{k}\sum_{m\mid k}\varphi(m)\cdot A(x^m)^{\frac{k}{m}} \]

交换求和次序,令 \(k=n\cdot m\),整理:

\[\operatorname{Cyc}(A)=\sum_{m\ge 1}\frac{\varphi(m)}{m}\sum_{n\ge 1} \frac{A(x^m)^n}{n} \]

我们又知道:

\[\ln \frac{1}{1-A}=\sum_{n\ge 1}\frac{A^n}{n} \]

那么:

\[\operatorname{Cyc}(A)=\sum_{m\ge 1}\frac{\varphi(m)}{m}\ln \frac{1}{1-A(x^m)} \]

这就是环构造。

Multiset 构造

集合 \(A\) 中选出元素组成多重集合的方案数,每种元素可以选任意多个,那么:

\[\operatorname{Mset}(A)=\prod\operatorname{Seq}(\{i\})^{A[i]} \]

展开一下:

\[\operatorname{Mset}(A)=\prod_{i\ge 1}(1-x^i)^{-A[i]} \]

两边同时取对数:

\[\ln\operatorname{Mset}(A)=\sum_{i\ge 1}-A[i]\cdot\ln(1-x^i) \]

有:

\[-\ln(1-x)=\sum_{i\ge 1}\frac{x^i}{i} \]

所以:

\[\ln\operatorname{Mset}(A)=\sum_{i\ge 1}A[i]\sum_{j\ge 1}\frac{x^{ij}}{j} \]

整理一下:

\[\ln\operatorname{Mset}(A)=\sum_{j\ge 1}\frac{1}{j}\sum_{i\ge 1}A[i]x^{ij} \]

所以:

\[\ln\operatorname{Mset}(A)=\sum_{j\ge 1}\frac{A(x^j)}{j} \]

\(\exp\) 回去:

\[\operatorname{Mset}(A)=\exp\sum_{j\ge 1}\frac{A(x^j)}{j} \]

类似的,我们也可以获得其逆运算 \(\ln\) 的组合意义,就是其逆变换。

Power Set 构造

这集合有力气。

这回是 01 背包了,类似的列式子方法:

\[\operatorname{Pset}(A)=\prod_{i\ge 1}(1-x^i)^{A[i]} \]

类似的方法取 \(\ln\) 后取 \(\exp\)

\[\ln\operatorname{Pset}(A)=\sum_{i\ge 1}A[i]\cdot\ln(1-x^i) \]

类似的式子:

\[\ln\operatorname{Pset}(A)=\sum_{i\ge 1}A[i]\sum_{j\ge 1}\frac{(-1)^{j-1}x^{ij}}{j} \]

整理:

\[\ln\operatorname{Pset}(A)=\sum_{j\ge 1}\frac{(-1)^{j-1}A(x^j)}{j} \]

\(\exp\) 回去:

\[\operatorname{Pset}(A)=\exp\sum_{j\ge 1}\frac{(-1)^{j-1}A(x^j)}{j} \]

内部对 \(\operatorname{Amp}_j\) 求和的时间是 \(O(n\ln n)\) 的,而 \(\exp\) 同阶,所以看上去很复杂的式子也有较快的计算方法。

牛顿迭代

我们有时候会得出来一个很复杂的式子,形如 \(F(x)=H(F(x))\) 那么可以设 \(G(x)=H(x)-x\) 此时此刻满足:

\[G(F(x))\equiv 0\pmod{x^{2k}} \]

那么就有:

\[F_{2k}\equiv F_{k}-\frac{G(F_k)}{G'(F_k)}\pmod{x^{2k}} \]

一般来说,\(G'\) 是可以你外接大脑手动计算的。

可以这样理解牛顿迭代的正确性,将其在 \(F_k\) 处泰勒展开后,剩下的项的幂次是大于 \(x^{2k}\) 的,所以在模意义下牛顿迭代是正确的。

EGF

EGF 是解决有标号问题的生成函数,因为其乘法有如下性质:

\[a_n=\sum_{i=0}^n\binom{n}{i}b_i\cdot c_{n-i} \]

其中 \(a_n\)\(\dfrac{A[n]}{n!}\)\(\dbinom{n}{i}\) 代表着将标号重新分配的过程。

组合意义是有标号对象的笛卡尔积,两个对象 \(a,b\) 分配有 \(1,2,3\dots |a|\)\(1,2,3\dots |b|\) 的标号,那么将两个序列拼在一起,重新分配标号,就是 \(\dbinom{|a|+|b|}{|a|}\) 注意,相对标号顺序不变,这样才能形成双射。


朴素的构造,\(\text{Sequence}\) 构造与 OGF 相同,不再赘述。

Pointing 构造

考虑 \(A\) 中选一个特殊点,那么每一个点都有 \(n\) 种选法,那么就有:

\[\operatorname{Pnt}(A)=xA'(x) \]

Derivative 构造

去掉一个点的标记,理解为 \(\text{Pointing}\) 构造的逆构造”。

顾名思义,其构造为:

\[\operatorname{Der}(A)=A'(x) \]

Integration 构造

在一个集合 \(A\) 中插入一个元素,顾名思义,式子是:

\[\operatorname{Int}(A)=\int_0^x A \]

Set 构造

考虑将 \(A\) 全体置换的方案数。

由于 \(A\) 中元素两两相互区分,那么同构的集合数量会达到 \(|A|!\),所以:

\[\operatorname{Set}(A)=\sum_{k\ge 0}\frac{A(x)^k}{k!}=\exp A(x) \]

Substitution 构造

将集合 \(A\) 的每一个元素的构造换为 \(B\) 一样,那么就是把 \(A\) 中的 \(x\) 换为 \(B\) 即:

\[\operatorname{Sub}(A,B)=A(B(x)) \]


OGF 中同样有类似构造,但是不常用就是了。

Cycle 构造

这下子没有置换了,直接考虑在哪里断环:

\[\operatorname{Cyc}(A)=\sum_{k\ge 1}\frac{A(x)^k}{k} \]

套用上面的等式:

\[\operatorname{Cyc}(A)=\ln\frac{1}{1-A(x)} \]

剩下的,我也不会了。

posted @ 2026-09-15 12:23  zifeiwoye  阅读(14)  评论(0)    收藏  举报