组合结构
组合结构是组合对象符号化的基本,掌握组合符号化可以更规范的解决许多困难的计数问题
(无标号)经典的组合构造
Sequence构造
对于组合类A,生成一个不定长的序列构造为
1+A+A2+...+Ak=11−A
又记作SEQ(A)={(a1...am):m>=0,a∈A}
即在A里面选取m个元素
Amplificationk构造
即k-膨胀构造,定义如下
AMPk(A)={(a....a).st |size|=k:a∈A}
即要选,一次必须选择k个,复读k次
即A(zk)
置换群下的等价类
对于一个组合类A,其元素为对组合类B元素的若干组合
a∈A.st a=(b1,...,bm)
即组合类的容capB(a)=m,即a所含选取的组合个数
设G=G0,G1...为若干置换操作
若两元素ai,aj在置换操作Gi相同
应当满足|ai|=|aj|,ai=Gpi(aj)
记A/GB为A中的元素在GB操作下等价的组合类集合
即a∈A/GB,a∈A且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)=1kk−1∑i=0A(zk(k,i))(k,i)
根据简单的式子推导有:
C(z)=∑d=1ϕ(d)dln(11−A(zd))
Multiset构造
定义如下:
MSET(A)=SEQ(A)/GA
在置换G下(b1,b2,b3)...(b3,b1,b2)将被看为同一个组合
考虑如何得到MSET(A)
可以枚举A中的所有对象并且确定加入多少个
即:
MSET(A)=∏a∈A∑k=0{a}k=∏a∈A∑k=0z|a|k=∏a∈A(11−z|a|)=∏i=1(11−zi)A[i]=exp(∑i=1A[i]∗ln(11−zi))=exp∑i=1A[i]∑i|jxjij=exp∑j=11j∑i=0F[i]xij=exp∑i=1F(xi)i
又称Polya指数
Power Set构造
PEST(A)=∏a∈A({空}+{a})∏(1+z|a|)=∏i=0(1+zi)A[i]=exp∑i=0A[i]ln(1+zi)=exp∑i=0A[i]∑k=1(−1)k−1zikkexp∑k=1(−1)k−1k∑i=0zikA[i]=exp∑k=1(−1)k−1kF(zk)
类似于0/1背包,每个集合选与不选
B∈PEST(A),B∈A
即另一定义下的Polya指数
(有标号)经典的组合构造
就像男人和女人,有标号和无标号完全是两个世界——(我自己说的)
记ind(a)表示a的标号集合,如何a的标号集合恰好为|a|的全排列,则称为强标号,反之是弱标号
两个对象的组合积的定义如下
a×b=(a′,b′):(a′,b′)是强标号,a′,b′离散化后与a,b分别相同
两个集合的笛卡尔积为A×B=⋃a∈A,b∈Ba×b
然后根据其组合意义,有|a×b|=(|a|+|b||a|,|b|)
发现这个玩意跟EGF的卷积乘法的性质有点像,于是可以用EGF来刻画一个有标号
即
A(z)=∑i=0A[i]zii!
Sequence构造
对于组合类A,生成一个不定长的序列构造为
1+A+A2+...+Ak=11−A
又记作SEQ(A)={(a1×...am):m>=0,a∈A}
即在A里面选取m个元素且有标号
b=(a1...am),若a1...am离散化后都属于A,则b应当为SEQ(A)的元素
Pointing构造
定义如下:
PET(A)=∑k=0Bk×{a1,a2,..,ak}
组合意义是在图a中选一个节点作为特殊节点(根)
Set构造
定义如下:
SET(A)=SEQ(A)/GA
考虑一个大小为k的集合,即:
SETk(A)=Ak/GAAk为选k个元素的不可重集合Ak=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)k在其组合意义下不难得证于是CYC(A)=∑k=1Ak(z)k=ln(11−A(z))
如果置换包含翻转,则式子如下:
CYCfilp(A)=A(z)+∑k=2Ak(z)2k=12(ln(11−A(z))+A(z))
有标号Subsitution构造
子结构构造如下
B∘C=∑k=0Bk⊠SETk(C)A⊠B={(a,b):a∈A,b∈B},|(a,b)|=|b|
组合意义为 将B的每一个节点都换成C的一个对象
Sequence构造
S(z)=∑k=0k!xkk!=11−x令x=A(z)则有SEQ(A(z))=x∘A(z)=11−A(z)
Cycle构造
先得出环的生成函数:C(z)=∑k=1(k−1)!zkk!=ln(11−x)
则有 CYC(A)=x∘A(z)=ln(11−A(z))
Set构造
选出k个数,且无标号
S(z)=∑k=0zkk!=exp(z)SET(A)=x∘A(z)=exp(A(z))
Boxed构造
DEL(A)={b:|b|=|a|−1,a∈A}ADD(A)={b:|b|=|a|+1,a∈A}
ADD(DEL(A))=A
有个例子C=ADD(DEL(A)k×B)k相当于是A把a1...ak都藏起来了
在生成函数意义下就是求导和积分
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下