[笔记]组合数学的符号化方法

组合的符号化方法

使用 ABCDEFG 来表示组合类,使用 a,b,c,dABCDEF 表示组合对象。使用 |a| 表示组合对象的大小。

定义两个组合类 A,B 的笛卡尔积为 A×B={(a,b) | aA,bB}

定义代数对象 za 的幂表示记做 z|a|

无符号体系

定义组合类 AOGF 为:

A(z)=aAz|a|=inaizi

不难发现有下面等价关系:

  • C(z)=A(z)+B(z)C=A+B
  • C(z)=A(z)×B(z)C=A×B

其中 × 操作表示两个组合类之间的笛卡尔积。


接下来定义一些基本的组合类。

  • E={ϵ},其中 ϵ 表示中性对象,E 为中性类。其大小为 0E(z)=z|ϵ|=1
  • Z={},其中 为原子对象,Z 为原子类。其大小为 1Z(z)=z

Example 1.1 :求卡特兰数的 OGF

一个广为人知的卡特兰数定义方法是通过 n 个点的二叉树数量。

对于一个二叉树,其一个节点为一个原子对象。空树可以看做中性对象。

对于一个节点,需要考虑左右儿子,本身节点以及空集的情况。因此有:

C=E+C×Z×C

因此有 C(z)=E(z)+C(z)×Z(z)×C(z)=1+z×C(z)2。移项得:

z×C(z)2C(z)+1=0

集合的不相交并构造 / 可重集构造

定义 E1,E2 表示两个不同的中性类。那么

A+B=(E1×A)+(E2×B)

这样有效区分了两个集合。这个定义可以起到一个类似多重集的效果。

集合的 Sequence 构造

集合的 Sequence 构造生成所有可能的排列(有序)。

例如:

  • SEQ({a})={ϵ}+{a}+{(a,a)}+{(a,a,a)}+

  • SEQ({a,b})={ϵ}+{a,b}+{(a,a)}+{(a,b)}+{(b,a)}+{(b,b)}+{(a,a,a)}+{(a,a,b)}+{(a,b,a)}+

可以看出,SEQ 生成了所有可能的不同有序组合。

我们定义,SEQ(A)=E+A+(A×A)+(A×A×A)+

对应 OGF 的语言为:Q(A(z))=1+A(z)+A(z)2+A(z)3+=11A(z)

Example 3.1:求长度为 n01 串有多少种。

使用 SEQ 构造,不难得出,Q(A(z))=Q({z,z})=112z

答案显然是 [zn]112z=2n

Example 3.2:大小为 n 的有序有根树个数。

考虑组合类 T,考虑任意一个节点,有:

T={}×SEQ(T)

也就是

T(z)=z1T(z)

image-20240331161523669

image-20240331161523669

所以这个玩意实际上就是少了一个点的卡特兰数。

集合的 Multiset 构造

Multiset 构造生成了所有无序的组合。如:

SEQ({a,b})={ϵ}+{a}+{b}+{(a,a)}+{(a,b)}+{(b,b)}+{(a,a,a)}+{(a,a,b)}+

注意到形如 {(a,b)},{(b,a)} 的都在 SEQ 中出现了,但是在 MSET 中都没有出现。

我们定义其递推式为:

MSET({α1,α2,α3αn})=MSET({α1,α2αn1})×SEQ(αn)

MSET({α1,α2,α3αn})=SEQ(α1)×SEQ(α2)×SEQ(α3)××SEQ(αn)

也即

M=MSET(A)=αASEQ(α)

改写成生成函数就是

M(z)=αA(11z|α|)=i=1(11zi)Ai

特别的,当 α={} 时,M(z)=(11z)n

对于计算,我们可以将 Mln 后再做 exp。也就是

M(z)=explni=1(11xi)Ai=expi=1Ailn(11xi)

注意到有

ln(1+z)=z1z22+z33z44+=i1(1)i1zii

因此有

expi=1Ailn(11xi)=exp(i1(Ailn(1xi)))=exp(i1(Ailn(1+(xi)))=exp(i1(Aij1(1)j1zijj))=exp(i1(Aij1zijj))=exp(i1(j1Aizijj))=exp(i1A(zi)i)

Exp(A(z))=M(z),称为 Pólya 指数。其逆变换为 Ln

posted @   Link-Cut-Y  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示