EGF 和 OGF 那些事
如何构造那些神来一笔的 OGF(普通生成函数)、EGF(指数生成函数)呢?
OGF
OGF 是解决无标号问题的生成函数,因为其乘法:
本质上就是将 \(B,C\) 两个方案拼起来,配上对应的系数就形成了 \(A\),即两个方案各取一部分的方案。
形式化的讲:定义集合 \(A_1,A_2,A_3\dots A_n\) 的笛卡尔积为 \(B\) 那么:
定义 \(|(a_1,a_2,a_3\dots a_n)|=|a_1|+|a_2|+|a_3|+\dots+|a_n|\),那么由乘法分配律不难发现 OGF 的乘法描述的就是两个集合的笛卡尔积。
刚学 OGF 的时候我们就知道,OGF 有闭合形式和开放形式两种,开放形式是我们所求的,闭合形式则是为了得到一些良好的运算规则、性质所必须要经过的。
所以,问题就是,如何得到一个 OGF 的闭合形式?
最简单的,就是知道一个 OGF 的通项公式后累出一个关于幂级数的式子,比如对于:
那么就有:
你可以解方程:
你就得出了这 OGF 的闭合形式。
那么,还有什么方法给出 OGF 呢?接下来,我会从组合意义角度给出击中 OGF 的经典构造方法。
Sequence 构造
如果把一个集合 \(A\) 的元素排列成任意有长度的序列,那么考虑把 \(A\) 的 \(n\) 元素结合成为的排列,那么就是 \(A^n\) 那么求和起来就是:
我们就可以求出其闭合形式:
Amplification-k 构造
将集合 \(A\) 中的每个元素进行放大 \(k\) 倍。
那么两两元素之间的关系不变,而尺度放大 \(k\) 倍,那么:
Burnside 引理
设群 \(G\) 作用在带权集合 \(X\) 上,对于 \(G\) 中的每一个元素 \(g\) 定义 OGF:
其中 \(\operatorname{Fix}_g(X)\) 的意思是在变换 \(g\) 下 \(X\) 中满足 \(x\) 仍然映射到 \(x\) 的 \(x\) 的集合。\(w(x)\) 是 \(X\) 到 \(\mathbb{N}\) 的一个映射,可以理解为价值函数,需要满足在映射 \(g\) 过后价值仍然不变。
定义轨道代表元的 OGF 记作 \(F\) 是在 \(G\) 中的每一个变换 \(g\) 后去重结果的 OGF,那么:
意思就是 \(F\) 是 \(F_g\) 的平均值。
如果令 \(w(x)\) 恒为 \(0\),那么有不带权的 \(\text{Burnside}\) 引理,就是:
一般写作:
Pólya 定理
是 \(\text{Burnside}\) 引理的推广。
\(\text{Pólya}\) 定理是告诉我们一个更优秀的 OGF 公式。
设 \(Y\) 是位置集合,群 \(G\) 是作用在 \(Y\) 上的。\(C\) 是颜色集合,每个集合中的元素 \(c\) 都有一个权值 \(w(c)\) 是价值函数。\(C\) 的 OGF 为:
\(X\) 是 \(C\) 在 \(Y\) 上的一种染色,定义对于 \(X\) 的所有染色的映射 \(f:Y\rightarrow C\) 那么:
与此同时 \(G\) 也作用于 \(X\) 上。
此时此刻,对于 \(g\in G\) 假设在 \(Y\) 上的置换有 \(\operatorname{Len}_k(g)\) 个长度为 \(k\) 的环,则同一个环中的所有位置必须染同一种颜色,贡献为:\(k\cdot w(c)\)。所有颜色的的贡献求和就是:
不同循环彼此独立,那么总贡献:
此时把 \(\text{Burnside}\) 引理的壳子套上去就有:
不难发现,只要你钦定 \(w(x)=0\),\(\text{Pólya}\) 定理也有不带权的形式。
cycle 构造
直接运用 \(\text{Burnside}\) 引理即可。
考虑所有长度为 \(k\) 的 \(A\) 构成的有序子序列,其 OGF 是:
考虑 \(G\) 是大小为 \(k\) 的循环群,记 \(F_k\) 为大小为 \(k\) 的循环的 OGF,那么:
那么结果是:
交换求和次序,令 \(k=n\cdot m\),整理:
我们又知道:
那么:
这就是环构造。
Multiset 构造
集合 \(A\) 中选出元素组成多重集合的方案数,每种元素可以选任意多个,那么:
展开一下:
两边同时取对数:
有:
所以:
整理一下:
所以:
\(\exp\) 回去:
类似的,我们也可以获得其逆运算 \(\ln\) 的组合意义,就是其逆变换。
Power Set 构造
这集合有力气。
这回是 01 背包了,类似的列式子方法:
类似的方法取 \(\ln\) 后取 \(\exp\):
类似的式子:
整理:
\(\exp\) 回去:
内部对 \(\operatorname{Amp}_j\) 求和的时间是 \(O(n\ln n)\) 的,而 \(\exp\) 同阶,所以看上去很复杂的式子也有较快的计算方法。
牛顿迭代
我们有时候会得出来一个很复杂的式子,形如 \(F(x)=H(F(x))\) 那么可以设 \(G(x)=H(x)-x\) 此时此刻满足:
那么就有:
一般来说,\(G'\) 是可以你外接大脑手动计算的。
可以这样理解牛顿迭代的正确性,将其在 \(F_k\) 处泰勒展开后,剩下的项的幂次是大于 \(x^{2k}\) 的,所以在模意义下牛顿迭代是正确的。
EGF
EGF 是解决有标号问题的生成函数,因为其乘法有如下性质:
其中 \(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\) 种选法,那么就有:
Derivative 构造
去掉一个点的标记,理解为 \(\text{Pointing}\) 构造的逆构造”。
顾名思义,其构造为:
Integration 构造
在一个集合 \(A\) 中插入一个元素,顾名思义,式子是:
Set 构造
考虑将 \(A\) 全体置换的方案数。
由于 \(A\) 中元素两两相互区分,那么同构的集合数量会达到 \(|A|!\),所以:
Substitution 构造
将集合 \(A\) 的每一个元素的构造换为 \(B\) 一样,那么就是把 \(A\) 中的 \(x\) 换为 \(B\) 即:
OGF 中同样有类似构造,但是不常用就是了。
Cycle 构造
这下子没有置换了,直接考虑在哪里断环:
套用上面的等式:
剩下的,我也不会了。

浙公网安备 33010602011771号