什么是第二类斯特林数?
第二类斯特林数记作 \(S(n,k)\),表示把 \(n\) 个互不相同(有标记)的元素,恰好划分成 \(k\) 个非空、无标记子集的方案数。它是组合数学中的基础概念,广泛出现在集合划分、满射计数以及贝尔数等问题中。这是一个纯数学工具,在任何国家、任何场景下的算法都完全一致。
如何使用本计算器
输入集合大小 \(n\) 和子集个数 \(k\),两者都必须为非负整数。点击计算,即可得到 \(S(n,k)\),也就是划分方案的精确数量。如果 \(k\) 大于 \(n\),结果为 0——因为元素总数不够,无法填满更多的非空子集。
公式详解
显式公式为:
$$S(n,k) = \frac{1}{k!}\sum_{j=0}^{k} (-1)^{k-j}\binom{k}{j} j^{n}$$其中 \(C(k,j)\) 为二项式系数。另一种在数值上更稳定的写法是递推式
$$S(n,k) = k\cdot S(n-1,k) + S(n-1,k-1)$$其初始条件为 \(S(0,0)=1\)、当 \(n>0\) 时 \(S(n,0)=0\)、当 \(k>0\) 时 \(S(0,k)=0\)。本计算器采用递推式,以避免浮点数相减时的精度损失。几个常用的特殊情形:\(S(n,1)=1\),\(S(n,n)=1\),\(S(n,2)=2^{n-1}-1\)。
实例演算
以 \(n=5\)、\(k=2\) 为例:套用特殊情形
$$S(5,2)=2^{5-1}-1=16-1=15$$用递推式同样可以验证:
$$S(5,2)=2\cdot S(4,2)+S(4,1)=2\cdot 7+1=15$$也就是说,把一个含 5 个元素的集合分成两个非空小组,共有 15 种方法。
常见问题
为什么 \(S(0,0)=1\)?按照约定,空集恰好有一种划分成零个部分的方式,即空划分。
当 \(k > n\) 时会怎样?结果为 0。因为每个子集都必须非空,而此时元素数量不足。
它和贝尔数有什么关系?把 \(S(n,k)\) 对所有 \(k\)(从 0 到 \(n\))求和,就得到贝尔数 \(B(n)\),即一个含 \(n\) 个元素的集合的全部划分总数。