精华 推荐

两类斯特林数

YIZHIYANG初来乍到 2026-5-15 23:59:39 41 浏览 0 点赞 0 收藏

什么是两类斯特林数

斯特林数是组合数学中用来描述“把元素组织成若干部分”的一类计数工具,常见的有两类:第一类斯特林数第二类斯特林数

它们名字相近,但数的对象完全不同:

  • 第一类斯特林数:数的是排列可以分成多少个循环
  • 第二类斯特林数:数的是集合可以分成多少个非空子集

第一类斯特林数

第一类斯特林数通常记作

c(n,k)c(n,k)

或者

[nk]\left[{n \atop k}\right]

表示:

nn 个不同元素排成一个排列,并且这个排列恰好分解成 kk 个循环的方案数。

这里的“循环”指的是排列的循环表示。

例如 n=3n=3 时,元素为 1,2,31,2,3

恰好分成 11 个循环的排列有:

(1 2 3),(1 3 2)(1\ 2\ 3), (1\ 3\ 2)

所以

c(3,1)=2c(3,1)=2

恰好分成 22 个循环的排列有:

(1)(2 3),(2)(1 3),(3)(1 2)(1)(2\ 3), (2)(1\ 3), (3)(1\ 2)

所以

c(3,2)=3c(3,2)=3

恰好分成 33 个循环的排列只有:

(1)(2)(3)(1)(2)(3)

所以

c(3,3)=1c(3,3)=1

因此第一类斯特林数关注的是:

一个排列的循环结构。

它的递推式是:

c(n,k)=c(n1,k1)+(n1)c(n1,k)c(n,k)=c(n-1,k-1)+(n-1)c(n-1,k)

解释如下:

考虑第 nn 个元素。

如果 nn 单独成为一个循环,那么前 n1n-1 个元素需要形成 k1k-1 个循环,贡献为 c(n1,k1)c(n-1,k-1)

如果 nn 插入到已有循环中,那么前 n1n-1 个元素已经形成 kk 个循环。一个排列的循环表示中,总共有 n1n-1 个位置可以插入 nn,所以贡献为 (n1)c(n1,k)(n-1)c(n-1,k)

初始条件为:

c(0,0)=1c(0,0)=1

并且当 n>0n>0 时:

c(n,0)=0c(n,0)=0

k>nk>n 时:

c(n,k)=0c(n,k)=0

需要注意的是,有些资料会使用带符号第一类斯特林数,记作 s(n,k)s(n,k)。它和无符号第一类斯特林数的关系是:

s(n,k)=(1)nkc(n,k)s(n,k)=(-1)^{n-k}c(n,k)

竞赛中如果只是计数排列循环,通常用的是无符号第一类斯特林数。

第二类斯特林数

第二类斯特林数通常记作

S(n,k)S(n,k)

或者

{nk}\left\{{n \atop k}\right\}

表示:

nn 个不同元素划分成 kk 个非空集合的方案数。

这里的 kk 个集合之间没有顺序

例如 n=3n=3 时,元素为 1,2,31,2,3

划分成 11 个非空集合,只有:

{1,2,3}\{1,2,3\}

所以

S(3,1)=1S(3,1)=1

划分成 22 个非空集合,有:

{1},{2,3}\{1\},\{2,3\}

{2},{1,3}\{2\},\{1,3\}

{3},{1,2}\{3\},\{1,2\}

所以

S(3,2)=3S(3,2)=3

划分成 33 个非空集合,只有:

{1},{2},{3}\{1\},\{2\},\{3\}

所以

S(3,3)=1S(3,3)=1

因此第二类斯特林数关注的是:

把不同元素分成若干个没有顺序的非空组。

它的递推式是:

S(n,k)=S(n1,k1)+kS(n1,k)S(n,k)=S(n-1,k-1)+kS(n-1,k)

解释如下:

考虑第 nn 个元素。

如果 nn 单独组成一个新集合,那么前 n1n-1 个元素需要分成 k1k-1 个非空集合,贡献为 S(n1,k1)S(n-1,k-1)

如果 nn 放入已有集合,那么前 n1n-1 个元素已经分成 kk 个非空集合,nn 可以放进其中任意一个集合,所以贡献为 kS(n1,k)kS(n-1,k)

初始条件为:

S(0,0)=1S(0,0)=1

并且当 n>0n>0 时:

S(n,0)=0S(n,0)=0

k>nk>n 时:

S(n,k)=0S(n,k)=0

两类斯特林数的区别

类型 常用记号 计数对象 关键词
第一类斯特林数 c(n,k)c(n,k)[nk]\left[{n \atop k}\right] nn 个元素的排列分解成 kk 个循环 排列、循环
第二类斯特林数 S(n,k)S(n,k){nk}\left\{{n \atop k}\right\} nn 个元素划分成 kk 个非空集合 集合划分、分组

一个简单的记忆方式是:

  • 第一类斯特林数和排列有关;
  • 第二类斯特林数和集合划分有关。

和多项式的关系

两类斯特林数还可以看成普通幂和阶乘幂之间的转换系数。

第一类斯特林数和下降幂有关。

下降幂定义为:

xn=x(x1)(x2)(xn+1)x^{\underline n}=x(x-1)(x-2)\cdots(x-n+1)

它可以展开成:

xn=k=0ns(n,k)xkx^{\underline n}=\sum_{k=0}^{n}s(n,k)x^k

这里的 s(n,k)s(n,k) 是带符号第一类斯特林数。

第二类斯特林数则可以把普通幂展开成下降幂:

xn=k=0nS(n,k)xkx^n=\sum_{k=0}^{n}S(n,k)x^{\underline k}

这说明第二类斯特林数可以理解为:

nn 个独立选择整理成若干个非空组的计数系数。

和满射的关系

第二类斯特林数还有一个常用解释。

nn 个不同元素分到 kk 个有编号的盒子里,并且要求每个盒子非空,这就是从 nn 个元素到 kk 个盒子的满射数量。

先把 nn 个元素分成 kk 个非空集合,有 S(n,k)S(n,k) 种方法。

再把这 kk 个集合分配给 kk 个有编号的盒子,有 k!k! 种方法。

所以满射数量为:

k!S(n,k)k!S(n,k)

因此:

$$S(n,k)=\frac{\text{从 } n \text{ 个元素到 } k \text{ 个元素的满射数}}{k!} $$

小例子对比

n=3n=3 时,两类斯特林数分别为:

第一类斯特林数:

kk c(3,k)c(3,k)
11 22
22 33
33 11

第二类斯特林数:

kk S(3,k)S(3,k)
11
22 33
33 11

虽然这里有些数看起来一样,但它们的含义完全不同。

c(3,1)=2c(3,1)=2 数的是 33 个元素构成一个循环的排列数量。

S(3,1)=1S(3,1)=1 数的是 33 个元素全部放进同一个集合的划分数量。

一句话总结

第一类斯特林数数的是:
nn 个不同元素的排列可以分解成 kk 个循环的方案数。

第二类斯特林数数的是:
nn 个不同元素可以划分成 kk 个非空无序集合的方案数。

评论

0 条
还没有评论。