符号化方法。小学习。

幻影忍者前情提要

这个我一百年之前就想学习了。但是我一直不会。
wxir 对“现役选手需不需要学习多项式”有一些疑问。我的评价是:我不会
还有就是。这里记的东西都不严谨。所以不要看这篇文章。
不要看这篇文章。
真的不要看这篇文章。

1.咕咕嘎嘎。

  • \(\mathcal{A}\):这是一个组合类,可以简单地看作一个集合。

  • \(a\in \mathcal{A}\):指的是组合类 \(\mathcal{A}\) 中的一个组合对象。组合对象有大小函数 \(f\),可以记 \(f(a)=|a|\)。假如现在组合类 \(\mathcal{A}\) 中是所有 \(\text{01}\) 序列,那么可以定义 \(f(a)\)\(\text{01}\) 序列 \(a\) 的长度。

  • 组合类转 OGF:
    直接对着组合类做题对我们没有任何帮助。于是我们可以定义 \(A(x)=\sum\limits_{a\in \mathcal{A}} x^{|a|}\)
    显然,这可以等价地写成

    \[A(x)=\sum\limits_{i=0}^{+\infty}A_ix^i \]

    其中 \(A_i = \sum\limits_{a\in \mathcal{A}} [|a|=i]\)
    于是,组合类的笛卡尔积就可以看作 OGF 的乘积。组合类的加法就可以看作 OGF 的加法。

  • \(\epsilon\)\(\mathcal{E}\)\(\epsilon\) 是中性对象、\(\mathcal{E}\) 是中性类。非常不严谨地,可以把它看作(乘法)单位元。\(|\epsilon|=0\)。在上面的例子里,可以看作 \(\mathcal{E}\) 中只有空串。\(\mathcal{E}=\{\epsilon\}\)。显然有 \(E(x)=1\)

  • \(\bullet\):这是一个原子对象。它可以表示一个东西。就是大小为 \(1\) 的一个东西。很好,待会做题就知道了。大概吧。\(\mathcal{Z}={\bullet}\),我们称它为原子类。显然有 \(Z(x)=x\)

2.灵感菇。

下述组合类的乘法都是笛卡尔积。多项式的乘法都是多项式乘法。

举一些简单的例子。

  • 卡特兰数 \(C_n\)
    我们知道其组合意义为大小为 \(n\) 的二叉树个数。于是定义组合类 \(\mathcal{C}\),里面包含了所有的二叉树。一棵二叉树的大小就是其节点个数。于是 \(C_n=[x^n]C(x)\)
    一个二叉树可以看作一棵左子树加上一个根节点再加上一个右子树,注意特判为空的情况。于是有式子:

    \[\mathcal{C}=\mathcal{E}+\mathcal{C}\times\{\bullet\}\times\mathcal{C} \]

    转成 OGF,得到:

    \[C(x)=1+xC(x)^2 \]

    解一元二次方程:

    \[C(x)=\frac{1\pm\sqrt{1-4x}}{2x} \]

    因为 \([x^0]C(x)=1\),所以 \(C(0)=1\),于是 \(C(x)=\frac{1-\sqrt{1-4x}}{2x}\)。可以考虑 \(x\) 趋近于 \(0\) 的情况。
    使用广义二项式定理展开后可得到卡特兰数的通项公式。然而我不会。
  • 长度为 \(n\)\(\text{01}\) 序列,不能有连续的两个 \(0\),这样的序列有多少个。
    定义组合类 \(\mathcal{S}\) 里面是所有合法的 \(\text{01}\) 序列。一个 \(\text{01}\) 序列的大小就是它的长度。这样的 \(\mathcal{S}\) 满足什么呢?
    任意一个合法串可以看作 \(\text{1}\) 加上一个合法串或者 \(\text{01}\) 加上一个合法串,于是有:

    \[\mathcal{S}=\mathcal{E}+\{0\}+\text\{\text{1},\text{01}\}\times \mathcal{S} \]

    写成 OGF:

    \[\mathcal{S}=1+x+(x+x^2)\mathcal{S} \]

    解得:

    \[\mathcal{S}=\frac{1+x}{1-x-x^2} \]

    wxir 说这是斐波那契。这貌似真的是斐波那契。非常的酷炫。不过可能要改一下边界定义,不重要吧。大概。

这个时候聪明的小朋友们就要问了:是不是对于任意组合类,都有 \(\mathcal{A}=\mathcal{E}+\mathcal{A}\) 啊?即 \(A(x)=1+A(x)\)
其实这个问题不是聪明的小朋友们问的,是我刚刚想出来的。出现这种情况只可能是因为我对中性类和中性对象的定义不够完整。如果够完整的话就不会出现这种问题了。但是这只是一个小学生的学习笔记,所以不用纠结那么多。大概吧。

这个时候聪明的小朋友们就要问了:你这个东西有啥用啊?还不是要我去观察。而且和我直接用生成函数去做没有任何区别。

那是因为,这个是在讲组合类。符号化方法还在后面。更多内容请参考《解析组合学》。我休息一会再来写。

3.符号化

3.1 \(\text{SEQUENCE}\)

\(\text{SEQ}\) 构造正如其名,构造出了所有有序组合

定义

\[\text{SEQ}(\mathcal{A})=\mathcal{E}+\mathcal{A}+(\mathcal{A}\times \mathcal{A})+(\mathcal{A}\times\mathcal{A}\times\mathcal{A})+\cdots \]

这也太对了。
写成生成函数,得到 \(\text{SEQ}(A(x)) = 1 + A(x) + A^2(x)+A^3(x)+\cdots=\frac{1}{1-A(x)}\)

  • 有序有根树计数。

    指的是儿子的顺序有意义的树计数。
    发现指定根过后,子树是一堆有序有根树构成的有序组合。
    于是显然:

    \[\mathcal{T}=\{\bullet\}\times \text{SEQ}(\mathcal{T}) \]

    可以解。

3.2 \(\text{MULTISET}\)

\(\text{MSET}\) 构造能构造出无序组合。发现无标号有根树是一个 \(\text{MSET}\) 能解决的问题。

\(\mathcal{A}=\{\alpha_0,\alpha_1,\alpha_2,\dots,\alpha_k\}\),考虑进行递归构造。得到:

\[\text{MSET}(\{\alpha_0,\alpha_1,\alpha_2,\dots,\alpha_k\})=\text{MSET}(\{\alpha_0,\alpha_1,\alpha_2,\dots,\alpha_{k-1}\})\times \text{SEQ}(\{\alpha_k\}) \]

这是在枚举个数。

于是有:

\[\text{MSET}(\mathcal{A})=\prod\limits_{\alpha\in \mathcal{A}} \text{SEQ}(\{\alpha\}) \]

可以将其写成生成函数:

\[\begin{aligned}\text{Exp}(A(x))&=\prod\limits_{i=0}^{+\infty}(\frac{1}{1-x^i})^{[x^i]A}\\&=\prod\limits_{i=0}^{+\infty}(1-x^i)^{-[x^i]A}\end{aligned} \]

将其 \(\ln\) 得到:

\[\begin{aligned}\sum\limits_{i=0}^{+\infty}-[x^i]A\ln(1-x^i)&=\sum\limits_{i=0}^{+\infty}[x^i]A\sum\limits_{j=1}\frac{x^{ij}}{j}\\&=\sum\limits_{j=1}\frac{1}{j}\sum\limits_{i=0}^{+\infty}(x^j)^i[x^i]A\\&=\sum_{j=1}\frac{1}{j}A(x^j)\end{aligned} \]

在中间的某一步,我们使用了 \(\ln(1-y)\) 的麦克劳林展开,不过多解释。

于是 \(\text{Exp}(A(x))=\exp(\sum\limits_{j=1}\frac{1}{j}A(x^j))\)。这也被叫做欧拉变换,可以看作是 \(\text{MSET}\) 构造的生成函数形式。

直接使用即可推导出无标号有根树的生成函数方程:

\[xT'(x)=T(x)+T(x)\sum\limits_{i=1}x^iT'(x^i) \]

posted @ 2026-03-02 15:31  Just_int_mian  阅读(88)  评论(4)    收藏  举报