组合结构符号化

符号化方法来啦。

ref:

joke3579的博客

cmd的博客

x义x的博客

组合类和 OGF

定义组合类和 OGF

一个组合类是一个可数集\(\mathcal A\),其中的元素是一些组合对象。附带大小函数\(f:\mathcal A\to \mathbb N\)以声明元素的大小,例如序列的长度。记\(f(\alpha)=|\alpha|\),当需要指明组合类时,记作\(|\alpha|_{\mathcal A}\)

对于\(n\in \mathbb N\)\(a_n=\#\{\alpha\in\mathcal A \mid|\alpha|=n\}\),称\(a_n\)\(\mathcal A\)的计数序列,\(a_n\)就是大小为\(n\)的元素的数量。

一个计数序列的OGF就是\(A(z)=\sum\limits_{n\ge 0}a_nz^n\),对组合类\(\mathcal A\),它的组合类也就是\(A(z)=\sum\limits_{\alpha \in \mathcal A}z^{|\alpha|}\)。记\([z^n]A(z)=a_n\)以及\([z^n]\mathcal A=a_n\)。这是形式幂级数。

基础的组合类

定义\(\mathcal E\)是只由\(1\)个大小为\(0\)的元素构成的组合类,有\(E(z)=1\)。称之中性类,其中对象为中性对象。

定义\(\mathcal Z\)是只由\(1\)个大小为\(1\)的元素构成的组合类,有\(Z(z)=z\)。称之原子类,其中对象为原子对象。

组合类之间的构造

组合类都是由其他组合类构造出来的,一个构造是从一组组合类映射到一个组合类的函数。

当我们说一个构造可以被直接翻译成生成函数运算时,这意味着它可以直接对应到生成函数的运算上。之后研究的都是这样的构造。

以下分为两个体系:有标号和无标号。由于无标号比有标号简单,所以先来无标号体系。

无标号下的构造

在这一体系下,从有序对,到有序列表,再到无序列表考察组合对象的想法很重要。

有很多构造要求了组合类中没有大小为\(0\)的对象,要注意一下。

笛卡尔积

\(\mathcal A=\mathcal B\times \mathcal C\)称为组合类\(\mathcal B\)\(\mathcal C\)的笛卡尔积,\(\mathcal A\)有序对的集合,\(\mathcal A=\{(\beta,\gamma)|\beta\in\mathcal B,\gamma\in \mathcal C\}\),大小函数定义为\(|\alpha|_{\mathcal A}=|\beta|_{\mathcal B}+|\gamma|_{\mathcal C}\)

此时,考察\(\mathcal A\)的计数序列,有\(a_n=\sum\limits_{i+j=n}b_ic_j\)

从而\(A(z)=B(z)C(z)\)

不交并与和

\(\mathcal A=\mathcal B\cup \mathcal C\),其中\(\mathcal B\cap \mathcal C=\emptyset\),称之为\(\mathcal B\)\(\mathcal C\)不交并。其元素的大小函数定义为:

\[|\alpha|_{\mathcal A}=\begin{cases} |\alpha|_{\mathcal B} & \alpha\in \mathcal B\\ |\alpha|_{\mathcal C} & \alpha \in \mathcal C \end{cases} \]

此时考察计数序列,\(a_n=b_n+c_n\),从而\(A(z)=B(z)+C(z)\)

那要是\(\mathcal B\)\(\mathcal C\)有交怎么办?

避开多重集,因为上面的大小函数可能会爆炸。对于两个组合类的,我们采用以下定义:

\[\mathcal B+\mathcal C=(\mathcal E_1\times \mathcal B)\cup(\mathcal E_2\times \mathcal C) \]

其中\(\mathcal E_1,\mathcal E_2\)是两个不同的中性类,相当于给\(\mathcal B\)\(\mathcal C\)中的每个对象打上不同的标签来区分。

那么和上面类似的,\(\mathcal A=\mathcal B+\mathcal C\)可以得到\(A(z)=B(z)+C(z)\)

由上面两个东西,我们可以得到,如果要构造一个自己的生成函数(即使用一些不太常规的核函数\(K_n(z)\)),那么它的加法一定要对应组合类的和,乘法要对应组合类的笛卡尔积,否则它的性质就不太好。

Sequence 构造

\([z^0]\mathcal B=0\),即\(\mathcal B\)没有大小为\(0\)的组合对象,那么我们定义:

\[\text{SEQ}(\mathcal B)=\mathcal E+\mathcal B\times \mathcal B+\mathcal B\times \mathcal B\times \mathcal B+\dots \]

这是\(\mathcal B\)的 Sequence 构造。换言之,若\(\mathcal A=\text{SEQ}(\mathcal B)\),那么\(\mathcal A=\{(\beta_1,\beta_2,\dots,\beta_l)|l\ge 0,\beta_i\in \mathcal B\}\)

\(\mathcal A\)中的组合对象是一些\(\beta\in \mathcal B\)组成的有序列表

从生成函数的视角看来,这可以得到\(A(z)=\dfrac{1}{1-B(z)}\),这里应当将\(\dfrac{1}{1-B(z)}\)视作\(1+B(z)+B^2(z)+\dots\)的简写。

其代数运算下具有的性质与\(\dfrac{1}{1-x}\)无异。或者应该说,就是因为它有这样的性质,我们才选择将它这样简写。

Cycle 构造

还不会群论,咕咕咕。

\([z^0]\mathcal B=0\),则我们定义:

\[\text{CYC}(\mathcal B)=(\text{SEQ}(\mathcal B)-\mathcal E)/\mathrm S \]

其中\(\mathrm S\)所有循环移位构成的群

这样可以不重不漏地得到\(\mathcal B\)中的组合对象构成的所有本质不同的或者称为轮换

来想想这个构造对应到生成函数上的结果是什么。

\(\mathcal A=\text{CYC}(\mathcal B)\)

由于有循环移位之类涉及本质不同的东西存在,首先考虑使用Burnside引理。

由于这里循环移位群的大小跟着得到的有序列表的长度改变,于是先枚举长度\(n\),设长度为\(n\)的有序列表构成的集合为\(X_n\)

然后枚举当前长度为\(n\)的循环移位群\(S_n\)中的元素,为方便,将枚举到的恒等变换视作枚举到移位为\(n\)的元素,并且由于循环移位的效果只与移位的步长有关,这里枚举步长\(k\),记枚举到的元素为\(s_k\)

现在其实就是考察\(X_n/S_n\)中轨道的结构。

套一下Pólya计数原理的式子,考虑对于一个轮换,其生成函数是什么,其实就是\(B(z^m)\),其中\(m\)为轮换大小。可以这样认为:同一个轮换中颜色要相同,于是系数不改变,但是大小要改变,于是只改变了大小。也可以理解是将同一个组合对象复制为\(m\)份,

简单思考后可以发现,当有序列表长度为\(n\),循环移位步长为\(k\)时,\(m=\dfrac{n}{\gcd(n,k)}\),自然地,\(c(s_k)=\gcd(n,k)\)

于是有:

\[A(z)=\sum\limits_{n\ge 1}\dfrac{1}{n}\sum\limits_{k=1}^nB(z^{\frac{n}{\gcd(n,k)}})^{\gcd(n,k)} \]

剩下的就是化式子,可以得到

\[\begin{aligned} A(z)&=\sum\limits_{k\ge 1}\dfrac{\varphi(k)}{k}\sum\limits_{g\ge 1}\dfrac{B(z^k)^g}{g}\\ &=\sum\limits_{k\ge 1}\dfrac{\varphi(k)}{k}\ln\dfrac{1}{1-B(z^k)} \end{aligned} \]

Multiset 构造

\([z^0]\mathcal B=0\),那我们定义:

\[\text{MSET}(\mathcal B)=\text{SEQ}(\mathcal B)/\mathrm R \]

其中\(\mathrm R\)是任意置换构成的群。

oiwiki上有另一种不需要群论的定义

\(\mathcal A=\text{MSET}(\mathcal B)\),那么\(\mathcal A\)中的组合对象是一些\(\beta\in\mathcal B\)构成的无序列表

这个构造很重要,又称为Pólya Exp,或者欧拉变换。

\(\mathcal A=\text{MSET}(\mathcal B)\),考虑在生成函数上对应着什么操作。

首先,从组合意义考虑,\(A(z)=\prod\limits_{i\ge 1}(1-z^i)^{-[z^i]B(z)}\)

这个式子应当看成:\(A(z)=\prod\limits_{\beta\in \mathcal B}(1+z^{|\beta|}+z^{2|\beta|}+\cdots)\),就是枚举每个元素用了几次。这一形式也可以写成:

\[\text{MSET}(\{\alpha_1,\alpha_2,\cdots,\alpha_n\})=\text{MSET}(\{\alpha_1,\alpha_2,\cdots,\alpha_{n-1}\})\times \text{SEQ}(\{\alpha_n\}) \]

然后,尝试从群的角度去理解。

首先枚举无序列表大小\(i\),使用Pólya定理:

\[\sum\limits_{i}\dfrac{1}{i!}\sum\limits_{f}\prod\limits_{k}B(z^{\alpha_k}) \]

这是利用了Pólya的特殊情况一。设置换\(f\)可以分解出\(k\)个轮换,第\(i\)个轮换的长度为\(\alpha_i\)

首先思考有多少个置换能被轮换拆分\(\{\alpha_n\}\)描述。

首先决定每个标号属于哪个循环,然后循环内圆排列。

然而这样子会破坏轮换自然的顺序(按轮换中的最小数大小依次排列),导致一个拆分会在同样的轮换下计数全排列次。于是还要除以循环数的阶乘。

继续推,

\[\begin{aligned} &\sum\limits_i\dfrac{1}{i}\sum\limits_{l,\sum\limits_{1\le j\le l}\alpha_j=i}\dfrac{1}{l!}\dbinom{i}{\alpha_1,\alpha_2,\cdots,\alpha_l}\prod\limits_{k=1}^lB(z^{\alpha_k})(\alpha_k-1)!\\ &=\sum\limits_i\sum\limits_{l,\sum \alpha_j=i}\dfrac{1}{l!}\prod\limits_{k=1}^l\dfrac{B(z^{\alpha_k})}{\alpha_k} \end{aligned} \]

惊人的注意力下(其实可能是套路),可以发现后面这一坨可以写成\(\exp\)的形式。

注意,此处应当将\(\exp A\)视作\(\sum\limits_{i\ge 0}\dfrac{A^i}{i!}\)

\(G(z,y)=\sum\limits_{i\ge 1}\dfrac{B(z^i)y^i}{i}\)。这是为了和上面的式子对应,\(\dfrac{B(z^i)}{i}\)同构,使用\(y\)的指数标识\(\sum a_j\)

于是上面的式子可以写成\(\sum\limits_{i}[y^i]\exp G\)

于是发现就是\(\exp G\)中把所有\(y\)扔掉,相当于取\(y=1\)

于是\(A(z)=\exp\Big(\sum\limits_{i\ge 1} \dfrac{B(z^i)}{i}\Big)\)

Powerset构造

咕咕咕。

\([z^0]\mathcal B=0\),那么我们递归地定义:

\[\text{PSET}(\{\alpha_1,\alpha_2,\cdots,\alpha_n\})=\text{PSET}(\{\alpha_1,\alpha_2,\cdots,\alpha_{n-1}\})\times (\mathcal E+\{\alpha_n\}) \]

这个构造生成了所有的子集

\(\mathcal A=\text{PSET}(\mathcal B)\),那么容易推出生成函数上的关系:\(A(z)=\exp\Big(\sum\limits_{i\ge 1}(-1)^{i+1}\dfrac{B(z^i)}{i}\Big)\)

这也被称为Pólya指数·改。

容易发现\(\text{PSET}(\mathcal B)\subset \text{MSET}(\mathcal B)\)

有标号下的构造

一个大小为\(n\)的对象被称作(强)标号的,当且仅当它的每一个组分都带有一个互不相同的正整数标号,且所有标号构成\([1,n]\)的一个排列。

一个对象被称为弱标号的,当且仅当它的每一个组分都带有一个互不相同的标号,但不必是一个排列。

一个组合类被称为标号的,当且仅当其中的组合对象都是标号的。

在组合类\(\mathcal A\)上定义映射\(\rho:\mathcal A\to \mathcal A\),使得一个弱标号的元素\(\alpha\in \mathcal A\)\(\rho\)作用后\(\rho(\alpha)\)是强标号的。这其实就是离散化。

EGF

一个计数序列\(a_n\)的EGF定义为形式幂级数:

\[A(z)=\sum\limits_{i\ge 0}a_n\dfrac{z^n}{n!} \]

对于组合类\(\mathcal A\),其EGF也可以理解为\(A(z)=\sum\limits_{\alpha\in \mathcal A}\dfrac{z^{|\alpha|}}{|\alpha|!}\)

以下记\(n![z^n]A(z)=a_n\)

\(\mathcal E,\mathcal Z\)的定义不变。

标号积

定义两个组合对象的标号积(其实就是把两个东西拼到一起后重新分配标号)为:

\[\beta\times \gamma=\{(\beta',\gamma'):(\beta',\gamma')\text{是强标号的},\rho(\beta')=\beta,\rho(\gamma')=\gamma\} \]

其大小为\(|\beta|+|\gamma|\)

定义两个组合类的标号积:

\[\mathcal B\times \mathcal C=\bigcup\limits_{\beta\in\mathcal B,\gamma\in\mathcal C}\beta\times \gamma \]

显然此处\(\beta\times\gamma\)两两不交。

\(\mathcal A=\mathcal B\times \mathcal C\),我们想要知道在生成函数上这一构造呈现的性状。

考察\(\mathcal A\)的计数序列,于是\(a_n=\sum\limits_{i+j=n}\dbinom{n}{i,j}b_ic_j\),此处\(b_ic_j\)就是直接选出来两个,\(\dbinom{n}{i,j}\)是在分配标号。

于是生成函数上,\(A(z)=B(z)C(z)\)

Sequence构造

\(\mathcal B\)是标号的组合类,若\([z^0]\mathcal B=0\),那么我们定义:

\[\text{SEQ}(\mathcal B)=\bigcup\limits_{i\ge 0}\mathcal B^i \]

这里认为\(\mathcal B^0=\mathcal E\)

于是反映到生成函数上,设\(\mathcal A=\text{SEQ}(\mathcal B)\),则\(A(z)=\dfrac{1}{1-B(z)}\)

这生成的是\(\mathcal B\)中的组合对象形成的有序列表,且有标号。

Set构造

\(\mathcal B\)是标号的组合类,若\([z^0]\mathcal B=0\),那么我们定义:

\[\text{SET}(\mathcal B)=\text{SEQ}(\mathcal B)/\mathrm R \]

其中\(\mathrm R\)是任意置换构成的群。

想要知道生成函数上对应的关系,我们还是先考察长度为\(k\)的组合对象。

由于\(\text{SEQ}(\mathcal B)\)中的对象是有序列表,长度为\(k\)的组合对象中每\(k!\)个在置换下是等价的,于是简单除以\(k!\)即可。

\(\mathcal A=\text{SET}(\mathcal B)\),考察其生成函数,可以得到:

\[A(z)=\sum\limits_{n\ge 0}\dfrac{B(z)^n}{n!}=\exp B(z) \]

这也通常被叫做\(\exp\)的组合意义。

这个构造是将同一组合类中的若干组合对象拼在一起,构成有标号的无序列表。

对应着无标号中的\(\text{MSET}\)\(\text{PSET}\),但是由于每个组合对象都带标号(互不相同),于是将二者统一了。

Pointing构造

这个构造给其中的每一个组合对象指定了一个特殊的组分作为

对于有标号组合类\(\mathcal A\),设\(\alpha\in \mathcal A\),我们定义Pointing构造为,对于任意\(\alpha\in \mathcal A\),设它的大小为\(|\alpha|=k\),则将它替换为\(\{\alpha\}\times\{\mathcal E_1,\mathcal E_2,\cdots,\mathcal E_k\}\)

容易发现对于任意\(\alpha\in \mathcal A\),它都生成了\(|\alpha|\)个不同的组合对象,每一个组合对象都被不同的\(\mathcal E_i\)标记了。于是相当于指定了根。

容易考察计数序列,然后得到生成函数上的呈现。

\(\mathcal A=\text{PT}(\mathcal B)\),那么\(A(z)=\vartheta B(z)\)

其中算子\(\vartheta=z\dfrac{\mathrm d}{\mathrm dz}\),相当于先求导再乘\(z\)

Cycle构造

这个构造生成所有有标号序列,但不区分仅轮换不同的序列。

\([z^0]\mathcal B=0\),定义\(\text{CYC}(\mathcal B)=\bigcup\limits_{k\ge 0}\text{CYC}_k(\mathcal B)\)。其中\(\text{CYC}_k(\mathcal B)=(\text{SEQ}_k(\mathcal B)-\mathcal E)/\mathrm S\)\(\mathrm S\)是所有循环移位构成的群。

可以发现\(\text{CYC}_k(\mathcal B)\)中的每个组合对象在\(\text{SEQ}_k(\mathcal B)\)中会出现\(k\)次(因为有\(k\)个循环移位)。于是简单除以\(k\)即可。

考察计数序列,可以得到生成函数的性状。

\(\mathcal A=\text{CYC}(\mathcal B)\),则\(A(z)=\sum\limits_{k\ge 1}\dfrac{B(z)^k}{k}=\ln\dfrac{1}{1-B(z)}\)

Substitution构造

这个构造生成所有可能的替换生成结构。

这个构造是二元运算,记作\(\mathcal A\circ \mathcal B\),作用是将钱一个有标号类中的组合对象的每一个组分替换为后一个组合类中的组合对象。

定义\(\mathcal S\boxtimes\mathcal T=\{(s,t):s\in \mathcal S,t\in \mathcal T\}\),且大小函数定义为\(|(s,t)|=|t|\)

于是定义:

\[\mathcal A\circ \mathcal B=\sum\limits_{k\ge 0}\mathcal A_k\boxtimes \text{SET}_k(\mathcal B) \]

对应到生成函数上就是复合。这也很符合直觉。

\(\mathcal A=\mathcal B\circ \mathcal C\),那么\(A(z)=B(C(z))\)

实际应用中或许需要Lagrange反演和多项式复合技术。

这个东西可以导出其他的构造,因为是直接替换,所以很强势。

Boxed 构造

集合幂级数

还不会FWT,咕咕咕。

posted @ 2025-03-18 08:58  RandomShuffle  阅读(67)  评论(0)    收藏  举报