斯特林数

斯特林数

斯特林数有第一类斯特林数和第二类斯特林数

第一类斯特林数

n n n个不同的元素,需要将这 n n n个元素组成 m m m个圆环,问方法数。这个方法数就是第一类斯特林数,记作 s ( n , m ) s(n,m) s(n,m)。对于第一类斯特林数,可以有这样的递推过程,对于 s ( n , m ) s(n,m) s(n,m),假设已经知道 s ( n − 1 , m ) s(n-1,m) s(n1,m) s ( n − 1 , m − 1 ) s(n-1,m-1) s(n1,m1),对于 s ( n − 1 , m − 1 ) s(n-1,m-1) s(n1,m1),可以将第 n n n个元素自己组成一个环,对于 s ( n − 1 , m ) s(n-1,m) s(n1,m),可以将第 n n n个元素放到前 n − 1 n-1 n1任意一个元素的左侧,所以关于 s ( n , m ) s(n,m) s(n,m)有:
s ( n , m ) = n ∗ s ( n − 1 , m ) + s ( n , m − 1 ) s(n,m)=n*s(n-1,m)+s(n,m-1) s(n,m)=ns(n1,m)+s(n,m1)
上面介绍的是无符号第一类斯特林数,对于有符号第一类斯特林数未来有机会再学习。

第二类斯特林数

n n n个不同的元素,需要将这 n n n个元素分成 m m m个集合,问方法数。这个方法数就是第二类斯特林数,也记作 s ( n , m ) s(n,m) s(n,m)。对于第二类斯特林数,可以有这样的递推过程,对于 s ( n , m ) s(n,m) s(n,m),假设已经知道 s ( n − 1 , m ) s(n-1,m) s(n1,m) s ( n − 1 , m − 1 ) s(n-1,m-1) s(n1,m1),对于 s ( n − 1 , m − 1 ) s(n-1,m-1) s(n1,m1),可以将第 n n n个元素自己新开一个集合,对于 s ( n − 1 , m ) s(n-1,m) s(n1,m),可以将第 n n n个元素放入 m m m个集合任意一个集合,所以关于 s ( n , m ) s(n,m) s(n,m)有:
s ( n , m ) = m ∗ s ( n − 1 , m ) + s ( n − 1 , m − 1 ) s(n,m)=m*s(n-1,m)+s(n-1,m-1) s(n,m)=ms(n1,m)+s(n1,m1)
除了递推式,第二类斯特林数还有一组可以直接计算的公式:
s ( n , m ) = 1 m ! ∑ k = 0 m ( − 1 ) k C ( m , k ) ( m − k ) n s(n,m)=\frac{1}{m!}\sum_{k=0}^{m}(-1)^kC(m,k)(m-k)^n s(n,m)=m!1k=0m(1)kC(m,k)(mk)n
对于这个式子,可以使用容斥定理证明。先区分 m m m个集合,给每个集合标上号,这时候总的方案数就是 m n m^n mn,即 n n n个元素可以任意选择 m m m个集合,我们可以发现这里面还包括了一些空集合的情况,将存在空集合的情况去掉就能得到我们的答案,令 T ( h ) T(h) T(h)表示空集合数目为 h h h的情况数,则很容易得到下面的式子:
m n = ∑ h = 0 m T ( h ) m^n=\sum_{h=0}^mT(h) mn=h=0mT(h)
T ( 0 ) T(0) T(0)是我们的答案,现在我们尝试去掉空集合数大于1的情况,我们随机选择一个集合作为空集合,有 C ( m , 1 ) C(m,1) C(m,1)的选法,然后对 n n n个元素随机放入剩余 m − 1 m-1 m1个集合,则总的方案数有:
S 1 = C ( m , 1 ) ∗ ( m − 1 ) n S_1=C(m,1)*(m-1)^{n} S1=C(m,1)(m1)n
对于 S 1 S_1 S1,可以发现对于 T ( 2 ) T(2) T(2)的情况统计了两次,对于 T ( h ) T(h) T(h)的情况统计了 h h h次,这意味减去 S 1 S_1 S1会变成:
m n − S 1 = T ( 0 ) + T ( 1 ) + . . . + T ( m ) − T ( 1 ) − 2 ∗ T ( 2 ) − . . . − m ∗ T ( m ) = T ( 0 ) − T ( 2 ) − 2 ∗ T ( 3 ) − . . . − ( m − 1 ) ∗ T ( m ) m^n-S_1=T(0)+T(1)+...+T(m)-T(1)-2*T(2)-...-m*T(m)\\=T(0)-T(2)-2*T(3)-...-(m-1)*T(m) mnS1=T(0)+T(1)+...+T(m)T(1)2T(2)...mT(m)=T(0)T(2)2T(3)...(m1)T(m)
我们的目标是得到 T ( 0 ) T(0) T(0),所以需要把 T ( 2 ) T(2) T(2)加回来,于是同样的,有 S 2 S_2 S2:
S 2 = C ( m , 2 ) ∗ ( m − 2 ) n = T ( 2 ) + C ( 3 , 2 ) ∗ T ( 3 ) + . . . + C ( m , 2 ) ∗ T ( m ) S_2=C(m,2)*(m-2)^{n}=T(2)+C(3,2)*T(3)+...+C(m,2)*T(m) S2=C(m,2)(m2)n=T(2)+C(3,2)T(3)+...+C(m,2)T(m)
S 2 S_2 S2加上有:
m n − S 1 + S 2 = T ( 0 ) + T ( 3 ) + 3 ∗ T ( 4 ) + . . . + ( m − 1 ) 2 ∗ T ( m ) m^n-S_1+S_2=T(0)+T(3)+3*T(4)+...+(m-1)^2*T(m) mnS1+S2=T(0)+T(3)+3T(4)+...+(m1)2T(m)
利用数学归纳法很容易可以证明:
S k = C ( m , k ) ∗ ( m − k ) n = T ( k ) + C ( k + 1 , k ) ∗ T ( k + 1 ) + . . . + C ( m , k ) ∗ T ( m ) S_k=C(m,k)*(m-k)^n=T(k)+C(k+1,k)*T(k+1)+...+C(m,k)*T(m) Sk=C(m,k)(mk)n=T(k)+C(k+1,k)T(k+1)+...+C(m,k)T(m)
T ( 0 ) = m n − ∑ k = 1 m ( − 1 ) k S k = ∑ k = 0 m ( − 1 ) k C ( m , k ) ( m − k ) n T(0)=m^n-\sum_{k=1}^m(-1)^kS_k=\sum_{k=0}^m(-1)^kC(m,k)(m-k)^n T(0)=mnk=1m(1)kSk=k=0m(1)kC(m,k)(mk)n
前面提到 T ( 0 ) T(0) T(0) n n n个不同元素放入 m m m个不同集合的种数,而第二类斯特林数是 n n n个不同元素放入 m m m个相同集合的种数,所以第二类斯特林数有以下结果:
S ( n , m ) = 1 m ! T ( 0 ) = 1 m ! ∑ k = 0 m ( − 1 ) k C ( m , k ) ( m − k ) n S(n,m)=\frac{1}{m!}T(0)=\frac{1}{m!}\sum_{k=0}^m(-1)^kC(m,k)(m-k)^n S(n,m)=m!1T(0)=m!1k=0m(1)kC(m,k)(mk)n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值