组合结构

组合结构

组合结构是组合对象符号化的基本,掌握组合符号化可以更规范的解决许多困难的计数问题

(无标号)经典的组合构造

Sequence构造

对于组合类A,生成一个不定长的序列构造为

1+A+A2+...+Ak=11A

又记作SEQ(A)={(a1...am):m>=0,aA}

即在A里面选取m个元素


Amplificationk构造

即k-膨胀构造,定义如下

AMPk(A)={(a....a).st |size|=k:aA}

即要选,一次必须选择k个,复读k次

A(zk)


置换群下的等价类

对于一个组合类A,其元素为对组合类B元素的若干组合

aA.st a=(b1,...,bm)

即组合类的容capB(a)=m,即a

G=G0,G1...为若干置换操作

若两元素ai,aj在置换操作Gi相同

应当满足|ai|=|aj|,ai=Gip(aj)

A/GB为A中的元素在GB

aA/GB,aA且a中的元素在置换GB意义下本质相同


Cycle构造

定义如下:

CYC(A)=(SEQ(A){})/GA

其中GA是位移置换

一般的有:

CYCk(A)=(Ak)/GA

考虑枚举GA中的旋转步数i

会产生(k,i)k(k,i)

则有AMPk(k,i)(C)(k,i)

A(zk(k,i))(k,i)

根据burnside,置换下等价类数=置换下不动点的平均数

Ck(z)=1ki=0k1A(zk(k,i))(k,i)

根据简单的式子推导有:

C(z)=d=1ϕ(d)dln(11A(zd))


Multiset构造

定义如下:

MSET(A)=SEQ(A)/GA

G(b1,b2,b3)...(b3,b1,b2)

考虑如何得到MSET(A)

可以枚举A中的所有对象并且确定加入多少个

即:

MSET(A)=aAk=0{a}k=aAk=0z|a|k=aA(11z|a|)=i=1(11zi)A[i]=exp(i=1A[i]ln(11zi))=expi=1A[i]i|jxjij=expj=11ji=0F[i]xij=expi=1F(xi)i

又称Polya指数


Power Set构造

PEST(A)=aA({}+{a})(1+z|a|)=i=0(1+zi)A[i]=expi=0A[i]ln(1+zi)=expi=0A[i]k=1(1)k1zikkexpk=1(1)k1ki=0zikA[i]=expk=1(1)k1kF(zk)

类似于0/1背包,每个集合选与不选

BPEST(A),BA

即另一定义下的Polya指数


(有标号)经典的组合构造

就像男人和女人,有标号和无标号完全是两个世界——(我自己说的)

ind(a)a,a|a|

两个对象的组合积的定义如下

a×b=(a,b):(a,b)a,ba,b

A×B=aA,bBa×b

然后根据其组合意义,有|a×b|=(|a|+|b||a|,|b|)

发现这个玩意跟EGF的卷积乘法的性质有点像,于是可以用EGF来刻画一个有标号

A(z)=i=0A[i]zii!


Sequence构造

对于组合类A,生成一个不定长的序列构造为

1+A+A2+...+Ak=11A

又记作SEQ(A)={(a1×...am):m>=0,aA}

即在A里面选取m个元素且有标号

b=(a1...am),a1...amA,bSEQ(A)


Pointing构造

定义如下:

PET(A)=k=0Bk×{a1,a2,..,ak}

组合意义是在图a中选一个节点作为特殊节点(根)


Set构造

定义如下:

SET(A)=SEQ(A)/GA

考虑一个大小为k的集合,即:

SETk(A)=Ak/GAAkkAk=Ak(z)k!,Ak(z)西SET(A)=k=0A(z)kk!=exp(A(z))


Cycle构造

CYC(A)=SEQ(A)/GACYCk(A)=Ak/GAAk(z)=Ak(z)kCYC(A)=k=1Ak(z)k=ln(11A(z))

如果置换包含翻转,则式子如下:

CYCfilp(A)=A(z)+k=2Ak(z)2k=12(ln(11A(z))+A(z))


有标号Subsitution构造

子结构构造如下

BC=k=0BkSETk(C)AB={(a,b):aA,bB},|(a,b)|=|b|

组合意义为 将B的每一个节点都换成C的一个对象

Sequence构造

S(z)=k=0k!xkk!=11xx=A(z)SEQ(A(z))=xA(z)=11A(z)

Cycle构造

先得出环的生成函数:C(z)=k=1(k1)!zkk!=ln(11x)

则有 CYC(A)=xA(z)=ln(11A(z))

Set构造

选出k个数,且无标号

S(z)=k=0zkk!=exp(z)SET(A)=xA(z)=exp(A(z))


Boxed构造

DEL(A)={b:|b|=|a|1,aA}ADD(A)={b:|b|=|a|+1,aA}

ADD(DEL(A))=A

C=ADD(DEL(A)k×B)kAa1...ak

在生成函数意义下就是求导和积分


posted @   After_rain  阅读(376)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示