组合数学(特殊数)

前言

本文主要记录一些组合数学中常用(?)的特殊数,背景是清华学长回校讲课。

斯特林数

斯特林数有两类,我们先从比较常见的第二类开始介绍。

第二类斯特林数

我们用 {nk} 表示将 n 个元素划分成 k非空子集的方案数。

一些特殊值

  • {n0}=[n=0]
  • {n1}={nn}=1(n>0)
  • {n2}=2n11(n>0)
  • {nn1}=(n2)

递推式

{nk}=k{n1k}+{n1k1}

考虑第 n 个元素放在哪里。

生成函数

考虑一个盒子装 n 个物品且盒子非空方案数是 [n>0]。我们可以写出它的 EGF 为:

F(x)=n=1xnn!=ex1

EGF 卷积的组合意义可以知道:Fk(x) 就是 n 个有标号物品放到 k 个有标号盒子的 EGF。但是第二类斯特林数是放到无标号盒子中的,所以还要去掉一个 k!,也就是:

1n!{nk}=[xn](ex1)kk!

通项公式

{nk}=1k!i=0k(1)i(ki)(ki)n=i=0k(1)kiini!(ki)!

证明:(注意以下的定义中盒子均有标号,但是斯特林数的定义中盒子无标号)先假设盒子可以为空,则有 gi=in,然后考虑盒子不为空,根据容斥原理可以得到:gi=ji(ij)fj,其中 fi 表示的是盒子不为空且有标号的方案数。然后就可以愉快地进行二项式反演啦:

fk=i=0k(1)ki(ki)gi=i=0k(1)ki(ki)in=i=0k(1)ki×k!in(ki)!i!

最后再去掉标号就得到通项公式如下:

{nk}=i=0k(1)kiin(ki)!i!

至于如何快速求,就需要用到 FFT 了,时间复杂度 O(nlogn)

一点点小性质

介绍:这是一个与高阶差分有关的东西,具体长这样:

Δmxn|x=0=m!{nm}

证明:

Δmxn|x=0=k=0m(mk)(1)mk(mk)nm!{nm}=k=0m(mk)(1)mkkn

上面的换一下枚举方式(改倒序)即可。

第一类斯特林数

我们用 [nk] 表示将 n 个元素排成 k 轮换的方案数。

一些特殊值

  • [n0]=[n=0]
  • [nn]=1(n>0)
  • [n1]=(n1)!(n>0)
  • [nn1]=(n2)

递推式

[nk]=(n1)[n1k]+[n1k1]

考虑第 n 个元素在轮换中所处的位置,其可以插到任何一个元素后面,也可单开一个轮换。

生成函数

可以类比第二类斯特林数,我们依然先考虑只有一个轮换的情况,k=1[n1]=(n1)!EGF

F(x)=n=1(n1)!xnn!=n=1xnn=ln(1x)()

对于 () 处也许会有读者感到疑惑(也有可能就是笔者菜?),在此稍微解释一番。我们可以观察这个 ,能发现 xnn 中分母与指数相同,因为我们想把这个东西写成封闭形式,所以我们可以对其求导,因为这样分母就能抵消,然后就变成 n=0xn 了。一点也不仔细一瞧,这不一眼那啥就做完了吗?

我们还可以继续思考,什么东西求导会有类似的形式呢?有的兄弟,有的!这样的封闭形式还有一个!我们对 ln(x) 求导有 ln(x)=1x,于是我们换一下元变一变符号就得到上面的等式了!

有了以上内容,我们可以得到 k无标号轮换的 EGF 为:

fk(x)k!=(1)klnk(1x)k!

即:

1n![nk]=[xn](1)klnk(1x)k!

通项公式

我把东西放在这里懒得搬过来了

一行之和

因为一个有 n 个元素的排列和一个 n 个元素的置换一一对应,于是对所有置换中的轮换数之和有:

k=0n[nk]=n!

斯特林数的一些常用公式

这里面的公式通常和一些奇奇怪怪的组合数之类的搭配使用,其中普通幂与其他幂之间的转化最常见,但本文也许会不限于此。其中普通幂转下降幂会给出证明,而其他有关幂之间的转换证明可参考证明。

  1. 普通幂转下降幂:

xn=k=0n{nk}xk=k=0n{nk}(xk)k!

证明:

使用数学归纳法,我们可以观察到:

xk+1=xk(xk)xxk=xk+1+kxk

于是有:

xxn1=xk=0n1{n1k}xk=k=0n1{n1k}xk+1+k=0n1{n1k}kxk=k=1n{n1k1}xk+k=1n1{n1k}kxk=k=1n({n1k1}xk+k{n1k})xk=i=1n{nk}xk

  1. 上升幂转普通幂:

xn=k=0n[nk]xk

  1. 下降幂转普通幂:

xn=k=0n(1)nk[nk]xk

证明考虑两边带入 x 然后变成上升幂证。

  1. 普通幂转上升幂:

xn=k=0n(1)nk{nk}xk

  1. 反转公式:

k{nk}[km](1)nk=[n=m]

k[nk]{km}(1)nk=[n=m]

证明用普通幂先转上升幂再用上升幂转普通幂,下面的就用普通幂和下降幂互相转化即可。

  1. 第二类斯特林数展开:

{n+1m+1}=k(nk){km}

证明:考虑组合意义。即枚举有哪些元素放在最后一个集合。

  1. 第一类斯特林数展开:

[n+1m+1]=k[nk](km)

证明:设最后一个元素所在轮换大小为 t+1,有方案数为 t![ntm],这又对应 [n0],[n1],,[nn] 中所有置换里不连接 t 个点与 nt 个点的置换。

posted @   Lyrella  阅读(53)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示