斯特林数初步

斯特林数初步

定义

第一类斯特林数: 描述 n 个数组成 m 个圆排列的方案数, 记为 [nm] ( 如果从环的角度理解, 请注意这个环是有向的, 也就是说顺逆反过来是两种方案 ).

第二类斯特林数: 描述 n 个有标号数放到 m 个无标号非空盒子里的方案数, 记为 {nm}.

斯特林数与 Twelve Fold Way

有标号球放无标号盒子, 不可空: {nm}, 定义即可.

有标号球放有标号盒子, 不可空:

  • m!{nm}, 给盒子添加标号全排列即可.
  • 考虑可空的版本第一个公式, 对空集合去容斥: i=0m(mi)(1)i(mi)n

因此有恒等式:

m!{nm}=i=0m(1)i(mi)n(mi)

有标号球放有标号盒子, 可空:

  • mn, 每个球有 m 种分配方式.

  • 我们用不可空的版本第一个公式去做, 枚举有多少个集合是空的: i=1m(mi)i!{ni}.

因此有恒等式:

mn=i=1m(mi)i!{ni}

值得注意的是, 这个恒等式和上面那个互为二项式反演.

斯特林数与恒等式

  1. 第一类斯特林数

(1) 递推式:

[nm]=[n1m1]+(n1)[n1m]

前一项是好理解的, 也就是单独放在了一个环里. 后一项是考虑插入一个环, 每个环上有和点数一致的边数, 这些边都可以被插入一个点, 因此每种原来的方案都有 n1 种插入方式.

(2) 斯特林数与上升幂:

i=0nxi[ni]=i=1n(x+i1)=xn

第一类斯特林数的另一种含义:[0,n1] 中选择 nm 个数 (不能重复选择), 求所有方案的所有选择的数的成绩的和. 这个含义是可以从递推式中看到的.
那么上面这个恒等式, 右半部分表示每一个二项式中, 要么选择 x, 要么选择 i1 乘到结果上, 这意味着, [0,n1] 中如果有 nk 个选择了乘以一个系数, 那么就会有 k 个选择了 x, 这意味着 x 的指数是 k. 而反过来, 如果 x 的指数是 k, 那么它的系数就是在 [0,n1] 中选择 nk 个数乘起来的所有方案的和, 也就是 [nk]. 这样左边就能和右边表示同一个东西了, 自然相等.

(3) 斯特林数与排列:

i=0n[ni]=n!

每一个排列都可以唯一对应一个圆排列的划分, 反之亦然. 这二者是双射.

(4) 第一类斯特林数基本恒等式

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

这个式子要从组合意义角度想. 右面的式子相当于先把 n 个数划分为 k 个环, 随后再从其中选出 m 个环. 现在我们换个角度考虑, 我们认为这些环中只有 m 个环是重要的, 而剩下的部分不关心它的形态, 不关心有多少个环, 只认为剩下的部分是一个排列. 这样的话, 我们先枚举整个排列中有多少个环, 然后选出哪 m 个环是我们要保留的, 而剩下的部分拆成排列, 由于长度为 p 的排列唯一对应一个圆排列, 那么除了 m 个环以外的部分也是一个环, 而把排列变成环的部分会额外增加一个点, 这意味着实际上我们枚举到了所有把 n+1 个点拆成 m+1 个圆排列的方案, 也就是左半部分.

(5) 上指标求和公式

k=1n(nk)[kA][nkB]=[nA+B](A+BA)

左半部分的组合意义是先从 n 个数中选出 k 个, 其中一边分成 A 个环, 另一边分成 B 个, 这当然等于右边的 先把它划分成 A+B 个环, 然后找到这中间哪 A 个是那 k 个数划分出来的.

(6) 第一类斯特林数与容斥

[nm]=k=mn[n+1k+1](km)(1)km

我们把 n+1 个数划分为 k+1 个环, 先把含有 n+1 那个元素的环给抛出去, 再从其中找出 m 个环, 我们考虑先确定好 m 个圆排列是什么, 再考虑合法的包含这 m 个环的所有方案的权值 (1)km 之和是多少.

我们考虑, 除了那 m 个环和包含 n+1那个环剩下的部分, 实际上并没有规定这部分有多少个环, 只是认为如果这里有 km 个环, 点数为 sz, 那么这种方案的权值是 (1)km. 由于没有规定环的数量, 那么所有的合法方案都可以表示为一个长为 sz 的排列, 而且由于环的数量和逆序对数量奇偶性一致, 那么如果我们枚举 sz , 固定含有 n+1 那个环的形态 , 那么总权值是 [sz1]. 这个式子是因为 p(1)τ(p)=[lenp=1], 这个的证明在下文反转公式的证明中有. 因此, 如果固定前面 m 个环的形态., 剩下来有 sz+1 个点 , 如果中间没有额外环, 那么最后面那个环有 sz! 种形态, 每种的权值是 1, 如果有一个位置是额外的, 它只能是自环, 它的位置有 sz 种, 而最后面那个环的形态有 (sz1)! 种, 由于有一个额外环, 那么单个方案贡献为 1, 总权值是 sz!sz(sz1)!=0. 而如果 sz=0, 显然最后一个环只有一种形态: n+1 的自环, 并且没有中间环, 总贡献是 1.

因此, 我们证明了当且仅当 sz=1 时有贡献, 否则没有贡献, 因此 m 个环必须覆盖所有 n 个点, 因此总贡献为 [nm] , 得证.

  1. 第二类斯特林数

(1). 递推公式

{nm}={n1m1}+m{n1m}

(2). Twelve Fold Way 中的恒等式:

mn=i=1m(mi)i!{ni}

及其二项式反演形式:

m!{nm}=i=0m(1)i(mi)n(mi)

上面的公式即为 拆幂公式, 下面的是第二类斯特林数的 O(m) 计算公式.

(3). 斯特林数与下降幂

mn=i=1mmi{ni}

这个公式由上面的 公式 (2) 显然可得.

(4). 第二类斯特林数基本恒等式

{n+1m+1}=i=mn(ni){im}

它的组合意义只需要考虑枚举 n+1 这个元素和 ni 个元素在一个盒子里, 把剩下的分配进 m 个盒子, 因此一共把 n+1 个球放到 m+1 个盒子里.

以及它的二项式反演形式:

{nm}=i=mn(ni)(1)ni{n+1i+1}

(5) 上指标求和公式

k=1n(nk){kA}{nkB}={nA+B}(A+BA)

证明和上一节的 (5) 是一致的.

  1. 混合恒等式

(1) 第三类斯特林数

(nm)(n1)nm=k=mn[nk]{km}

首先考虑左侧的组合意义:

我们要在 n 个数中选出来 m 个排列, 那.么首先, 我们选出来这些排列的第一个元素, 然后, 按从小到大的顺序考虑剩下的元素, 那么第一个元素可以插入到 m 个位置, 第二个有 m+1 个插入位置, 以此类推, 即为上升幂, 也就是左式;

右式指的是先把 n 个数划分为 k 个置换环, 随即把置换环分为 m 组, 实际上, 一组置换环意味着一个排列, 所以这个式子依然是把 n 个数划分为 m 个排列的方案数, 这个恒等式得证.

(2) 斯特林反演相关

斯特林反演公式同时含有两种斯特林数. 后面会讲.

斯特林数与上升/下降幂

(1). 定义:

  • 上升幂: xk=i=1k(x+i1)
  • 下降幂: xk=i=1k(xi+1)

显然这和组合数的定义很像, 有如下公式:

nm=m!(nm)

nm=m!(n+m1m)

(2). 有关的恒等式

(i). 上升幂与下降幂的互换

nm=(1)m(n)m=(n+m1)m

nm=(1)m(n)m=(n+m1)m

(ii). 斯特林数

i=0nxi[ni]=xn

mn=i=1mmi{ni}

这两个公式前文都有证过.

(iii). 二项式定理

(a+b)k=i=0k(ki)aibki

(a+b)k=i=0k(ki)aibki

这两个公式的证明只需要把上升幂下降幂写成阶乘乘组合数, 然后用范德蒙德卷积即可.

斯特林数与反演

反转公式

{j=kn(1)nj[nj]{jk}=[k=n]j=kn(1)jk{nj}[jk]=[k=n]

第一个式子可以如下考虑:

现在从 n 个数中找到 一些环 (枚举, 并不关心有多少个),再把它们划分为 k 个集合. 我们考虑, 一个环的集合的方案, 就恰恰是这个集合中所有元素的排列.

我们考虑 k 等于 1 的情况, 那么这意味着, 把 n 个元素做全排列, 如果有 i 个置换环, 那么就有 (1)ni 的贡献, 总贡献数是多少呢? 考虑用逆序对个数刻画这个问题. 一个大小为 k 的置换环会贡献和 k1 奇偶性相同的逆序对个数. 为什么呢? 我们可以用 k1 次交换让排列的该置换环这一部分有序, 而每一次交换都会改变逆序对的奇偶性. 那么, 把所有置换环对逆序对的贡献加起来, 也就是 (k1)=ni, 其中 i 是置换环个数. 那么这样的话 (1)ni=(1)τ(p), 问题转化为求 p(1)τ(p). 枚举排列, 式子与逆序对有关, 不难想到行列式. 由于那个 (1)τ(p) 没有任何系数, 那我们就构造一个 n×n 的全 1 矩阵 A, 则有 detA=p(1)τ(p), 不难发现 detA=[n=1], 因为 n>1 是任意两行都线性相关, 则行列式为 0.

这样, 我们当 k=1 的情况就证完了, 实际上不难发现, 原式换一个角度考虑, 可以先选出来 k 个环各自有哪些元素, 然后再把它们分配到箱子里, 每个方案的贡献是所有环的贡献乘起来. 而每个环的总贡献当且仅当只分配一个元素, 因此当且仅当 k=n 时, 也就是每个环都只分配一个元素才有答案 1. 上面的式子得证.

接下来考虑第二个式子.

首先大力推式子, 把第二类斯特林数的容斥定义式代进去, 即得

j=kn(1)jk{nj}[jk]=j=kn(1)jk[jk]1j!p=0j(1)p(jp)(jp)n

向上一个式子一样, 我们先考虑 k=1 时的情况, 然后再把所有的环的贡献乘起来就可以了.

k=1 代入, 此时 [j1]=(j1)!, 即得:

j=1n(1)j1{nj}[ji]=j=1n(1)j1(j1)!j!p=0j(1)p(jp)(jp)n=j=1n(1)j11jp=0j(1)p(jp)(jp)n=i=0ninp=0ni(1)i+p1(1)p1i+p(i+pp)改变枚举变量: jpi, 并交换顺序=i=0nin(1)i1p=0ni1i+pi+pi(i+p1i1)(1)2p=1直接去掉; 从组合数的阶乘中拆出来一点=i=0nin1(1)i1p=0n1(i+p1i1)=i=0nin1(1)i1(ni)

到这里再向下就很难推式子化简了, 那么考虑组合意义.

首先 n=1 时, 不难验证式子为 1.

接下来认为 n2.

我们想要构造一个矩阵, 但是 i 的指数 n1(ni) 的上指标 n 不一致让我们无从下手. 于是把组合数拆开:

i=0nin1(1)i1(ni)=i=1nin1(1)i1(n1i1)+i=0n1in1(1)i1(n1i)=i=0n1(i+1)n1(1)i(n1i)+i=0n1in1(1)i1(n1i)  把前半部分的 i1i.

我们先考虑后半部分, 因为组合数的下指标和幂次的底数一致, 可能要简单一些. 考虑构建一个场景: 现在有一个 (n1)×(n1) 的矩阵, 我们考虑从中选出 i 列, 我们有一个箱子从第一行跳到最后一行, 每一行任选这 i 列中的一个格子作为落脚点, 那么明显有: 选定 i 列后合法的路径数为 in1, 每一个路径对答案的贡献是 (1)i1 . 那么这个式子的意义就是先选择一些列, 再枚举每一个从下到上的合法路径, 对所有路径关于这个选择列方案的方案求和 (因为 (1)i1i 是由选择了多少列决定的, 而不是路径覆盖了多少列).

我们不如换个角度考虑: 先枚举路径, 在枚举选了多少列, 显然每一个路径没有覆盖的列都是可选可不选的, 我们枚举除了路径覆盖的 k 列以外额外选了 i 列, 那么当然有 (n1ki) 种方案, 每种方案的贡献是 (1)k+i1, 也就是说, 这个路径的总贡献为:

i=0n1k(1)i+k1(n1ki)=[n1=k](1)k1

这意味着什么? 一个路径当且仅当它覆盖了每一列才有贡献. 这时它的贡献是 (1)k1=(1)n2. 这样的路径有多少种呢? 一个路径只有 n1 行, 而它要完全覆盖 n1 列1, 这意味着这个路径在每一行的落脚点选择各不相同, 那么这个路径把每一行落脚点所在列编号写下来, 恰好是一个排列. 也就是说, 这样的路径有 (n1)! 种. 这意味着原式的右半部分的值是 (n1)!(1)n2.

接下来类似的考虑左半部分, 唯一的不同在于幂次的底数比下指标多了 1, 那么也就意味着每一行能够选择的位置比选出来的 i 列要多一列. 于是我们认为, 现在有一个 (n1)×n 的矩阵, 我们考虑从 n1 列中 选出 i 列, 我们有一个箱子从第一行跳到最后一行, 每一行任选选择的这 i和第 n 中的一个格子作为落脚点. 那么明显有: 选定 i 列后合法的路径数为 (i+1)n1, 每一个路径对答案的贡献是 (1)i . 我们假设一个路径除了第 n 列之外覆盖了 k 列, 和上面一样考虑一个路径的贡献:

i=0n1k(1)i+k(n1ki)=[n1=k](1)k

同样, 只有 k=n1 时有贡献, 贡献为 (1)k=(1)n1, 方案数的分析也和上面一致, 想要 k 取到 n1, 路径必须每一行的位置各不相同, 并且不能取第 n, 因此方案数依然是 (n1)!, 左侧的式子值为 (n1)!(1)n1.

因此整个式子的值为 (n1)!((1)n2+(1)n1)=0.

因此

i=0nin1(1)i1(ni)=[n=1]

第二个式子得证.

斯特林反演

为了方便接着向下讲, 我们把两个反转公式在这里再写一遍.

{j=kn(1)nj[nj]{jk}=[k=n]j=kn(1)jk{nj}[jk]=[k=n]

斯特林反演公式 (I)

Fn=i=0n{ni}GiGn=i=0n(1)ni[ni]Fi

证明其实互相代进去就可以了.

左推右:

i=0n(1)ni[ni]Fi=i=0n(1)ni[ni]j=0i{ij}Gj=i=0nGij=in(1)nj[nj]{ji}=Gn

右推左:

i=0n{ni}Gi=i=0n{ni}j=0i(1)ij[ij]Fj=i=0nFij=in(1)ji{nj}[ji]=Fn

因此两边互推.

斯特林反演公式 (II)

Fn=i=0n[ni]GiGn=i=0n(1)ni{ni}Fi

证明和上面的完全一致.

斯特林反演公式 (III)

Fn=i=n{in}GiGn=i=n(1)in[in]FiFn=i=n[in]GiGn=i=n(1)in{in}Fi

证明依然类似, 上下界换一下就好.

斯特林反演有关恒等式

(1) 第一类斯特林数基本恒等式

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

其斯特林反演后的形式为:

(nm)=i=0n[i+1m+1]{ni}(1)ni

(2) 第二类斯特林数基本恒等式

{n+1m+1}=i=mn(ni){im}

其斯特林反演后的形式为:

(nm)=i=mn{n+1i+1}[km](1)im

(3) 斯特林反演与上升幂

i=0nxi[ni]=xn

它的斯特林反演形式:

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

(4) 斯特林反演与下降幂

mn=i=1mmi{ni}

它的斯特林反演形式:

mn=i=0nmi{ni}(1)ni

斯特林数恒等式汇总

这里的式子上文都出现过证明过, 但是这里从用途方面重新整理一遍.

两个递推

[nm]=[n1m1]+(n1)[n1m]

{nm}={n1m1}+m{n1m}

两个上指标卷积

k=1n(nk)[kA][nkB]=[nA+B](A+BA)

k=1n(nk){kA}{nkB}={nA+B}(A+BA)

第一类 下指标求和

i=0n[ni]=n!

第一类 下指标求和 结合组合数上指标

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

第一类下指标求和 结合组合数上指标 带容斥系数

[nm]=k=mn[n+1k+1](km)(1)km

第一类下指标求和 结合第二类上指标

(nm)(n1)nm=k=mn[nk]{km}

第一类下指标求和 结合第二类上指标 有容斥系数

j=kn(1)nj[nj]{jk}=[k=n]

第一类下指标求和 结合幂次

i=0nxi[ni]=i=1n(x+i1)=xn

第二类计算式

m!{nm}=i=0m(1)i(mi)n(mi)

第二类下指标求和 结合第一类上指标 有容斥系数

(nm)=i=mn{n+1i+1}[km](1)im

(nm)=i=0n[i+1m+1]{ni}(1)ni

j=kn(1)jk{nj}[jk]=[k=n]

第二类下指标求和 结合幂次 有容斥系数

mn=i=0nmi{ni}(1)ni

第二类下指标求和 结合组合数下指标 有阶乘

mn=i=1m(mi)i!{ni}

第二类下指标求和 结合组合数下指标 有容斥系数

{nm}=i=mn(ni)(1)ni{n+1i+1}

第二类上指标求和 结合组合数下指标

{n+1m+1}=i=mn(ni){im}

上升下降幂与斯特林数

i=0nxi[ni]=i=1n(x+i1)=xn

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

mn=i=1mmi{ni}

mn=i=0nmi{ni}(1)ni

上升下降幂与二项式定理

(a+b)k=i=0k(ki)aibki

(a+b)k=i=0k(ki)aibki

反转公式

j=kn(1)nj[nj]{jk}=[k=n]

j=kn(1)jk{nj}[jk]=[k=n]

斯特林反演

Fn=i=0n{ni}GiGn=i=0n(1)ni[ni]Fi

Fn=i=0n[ni]GiGn=i=0n(1)ni{ni}Fi

Fn=i=n{in}GiGn=i=n(1)in[in]Fi

Fn=i=n[in]GiGn=i=n(1)in{in}Fi

posted @   snowycat1234  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示