第二类斯特林数学习记录

14 篇文章 0 订阅
4 篇文章 0 订阅

很久以前写了第一类斯特林数学习记录,直到现在要学斯特林反演了才填这个第二类斯特林数的坑
做题在推导的时候碰到斯特林数还是很常见的,记录一下,给现在的自己一些印象,也为以后的自己提供复习资料

简单介绍

第二类斯特林数是将n个不同的元素拆分成m个集合的方法数目。——百度百科

还记得吗,第一类斯特林数的是“圆排列”,第二类是“集合”
第一类斯特林数中一个元素数量为 n n n圆排列的方案数贡献是 ( n − 1 ) (n-1) (n1)!的,而第二类由于是集合,所以贡献是 1 1 1
第二类斯特林数,可以表示为 S ( n , m ) S(n,m) S(n,m),这里是大写
这里补充一下,第一类斯特林数 s ( n , m ) s(n,m) s(n,m)能表示为 [ n m ] \begin{bmatrix}n\\m\end{bmatrix} [nm],第二类斯特林数 S ( n , m ) S(n,m) S(n,m)能表示为 { n m } \begin{Bmatrix}n\\m\end{Bmatrix} {nm}

第一类斯特林数有一个很好的性质 x n ↓ = ∑ i = 0 n [ n i ] x i x^{n\downarrow}=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}x^i xn=i=0n[ni]xi
第二类斯特林数其实同样与下降幂有紧密联系
x n = ∑ i = 0 n { n i } x i ↓ x^n=\sum_{i=0}^n\begin{Bmatrix}n\\i\end{Bmatrix}x^{i\downarrow} xn=i=0n{ni}xi


重点分割线,下面这段很重要


在这里补充一下对这两个式子的解释与推导:
我们定义 x ! = 1 ∗ 2 ∗ ⋅ ⋅ ⋅ ∗ x x!=1*2*···*x x!=12x,特殊的, 0 ! = 1 0!=1 0!=1
在排列组合的基础知识中我们知道 A ( n , m ) A(n,m) A(n,m)表示排列数, C ( n , m ) C(n,m) C(n,m)表示组合数
A ( n , m ) A(n,m) A(n,m)的意义是从 n n n个不同的数中选择 m m m个数组成排列的数量,所以:
A ( n , m ) = n ( n − 1 ) ( n − 2 ) ⋅ ⋅ ⋅ ( n − m + 1 ) = n m ↓ = n ! ( n − m ) ! A(n,m)=n(n-1)(n-2)···(n-m+1)=n^{m\downarrow}=\frac{n!}{(n-m)!} A(n,m)=n(n1)(n2)(nm+1)=nm=(nm)!n!
最后的结果是我们所熟悉的,但其实本质上排列数可以直接表现成下降幂的形式,所以 A ( n , m ) A(n,m) A(n,m)可以直接表示为 n m ↓ n^{m\downarrow} nm
C ( n , m ) C(n,m) C(n,m)的意义是从 n n n个不同的数中选择 m m m个数组成集合(即无序)的数量,所以:
C ( n , m ) = A ( n , m ) m ! = n ! ( n − m ) ! m ! C(n,m)=\frac{A(n,m)}{m!}=\frac{n!}{(n-m)!m!} C(n,m)=m!A(n,m)=(nm)!m!n!
另外, C ( n , m ) C(n,m) C(n,m)同样也可以被表示为 ( n m ) \binom{n}{m} (mn)
Review:第一类斯特林数 [ n m ] u \begin{bmatrix}n\\m\end{bmatrix}_u [nm]u表示表示将 n 个不同元素构成m个圆排列的数目
我们来看这个式子: x n ↑ = ∑ i = 0 n [ n i ] u x i x^{n\uparrow}=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}_ux^i xn=i=0n[ni]uxi
0 0 0 n − 1 n-1 n1 n n n个数中选出 m m m个数,所有选法的 m m m个数乘积的和的值为 f ( n , m ) f(n,m) f(n,m),我们发现 f ( n , m ) f(n,m) f(n,m)就是上升幂的 ( n − m ) (n-m) (nm)次项系数
我们考虑怎么求这个 f f f,用递推,发现 f ( n , m ) = f ( n − 1 , m ) + ( n − 1 ) ∗ f ( n − 1 , m − 1 ) f(n,m)=f(n-1,m)+(n-1)*f(n-1,m-1) f(n,m)=f(n1,m)+(n1)f(n1,m1)
对比无符号第一类斯特林数的递推式 s u ( n , m ) = s u ( n − 1 , m − 1 ) + ( n − 1 ) ∗ s u ( n − 1 , m ) s_u(n,m)=s_u(n-1,m-1)+(n-1)*s_u(n-1,m) su(n,m)=su(n1,m1)+(n1)su(n1,m)
是否发现两者有异曲同工之妙呢?
我们发现,设 f ( n , m ) = f ′ ( n , n − m ) f(n,m)=f'(n,n-m) f(n,m)=f(n,nm)
f ( n , m ) = f ( n − 1 , m ) + ( n − 1 ) ∗ f ( n − 1 , m − 1 ) ⇒ f ( n , n − m ) = f ( n − 1 , n − m ) + ( n − 1 ) ∗ f ( n − 1 , n − m − 1 ) ⇒ f ′ ( n , m ) = f ′ ( n − 1 , m − 1 ) + ( n − 1 ) ∗ f ′ ( n − 1 , m ) f(n,m)=f(n-1,m)+(n-1)*f(n-1,m-1)\\ \Rightarrow f(n,n-m)=f(n-1,n-m)+(n-1)*f(n-1,n-m-1)\\ \Rightarrow f'(n,m)=f'(n-1,m-1)+(n-1)*f'(n-1,m) f(n,m)=f(n1,m)+(n1)f(n1,m1)f(n,nm)=f(n1,nm)+(n1)f(n1,nm1)f(n,m)=f(n1,m1)+(n1)f(n1,m)
没错, f ′ = s u f'=s_u f=su
好了,那么我们就知道 x n ↑ = ∑ i = 0 n [ n i ] u x i x^{n\uparrow}=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}_ux^i xn=i=0n[ni]uxi的正确性
我们把无符号第一类斯特林数,换成有符号第一类斯特林数的,就有 x n ↓ = ∑ i = 0 n [ n i ] s x i x^{n\downarrow}=\sum_{i=0}^n\begin{bmatrix}n\\i\end{bmatrix}_sx^i xn=i=0n[ni]sxi
第一个式子证毕(可以通过这个公式在 Θ ( n l o g 2 n ) \Theta(nlog^2n) Θ(nlog2n)的复杂度内用分治+FFT求出某个 n n n对应的所有 s u ( n , m ) s_u(n,m) su(n,m)值)
我们再考虑第二个式子
我们把 n n n个不同数放在 x x x个带标号集合里面,那么总方案数是 x n x^n xn
我们考虑从另外一种方式来计算方案数,我们枚举非空的集合数量,通过第二类斯特林数计算非空集合的放法数,在乘上组合数就好了,即
x n = ∑ i = 0 x { n i } ( x i ) i ! x^n=\sum_{i=0}^x\begin{Bmatrix}n\\i\end{Bmatrix}\binom{x}{i}i! xn=i=0x{ni}(ix)i!
根据 C ( n , m ) ∗ m ! = A ( n , m ) C(n,m)*m!=A(n,m) C(n,m)m!=A(n,m),式子变成
x n = ∑ i = 0 x { n i } x i ↓ x^n=\sum_{i=0}^x\begin{Bmatrix}n\\i\end{Bmatrix}x^{i\downarrow} xn=i=0x{ni}xi
证毕(另外,其实好像有数学归纳法的证明,本质是一样的)

计算公式

根据定义进行一波容斥我们可以写出如下式子(这里是枚举空盒子)
S ( n , m ) = 1 m ! ∑ k = 0 m ( − 1 ) k ( m k ) ( m − k ) n S(n,m)=\frac1{m!}\sum_{k=0}^m(-1)^k\binom{m}{k}(m-k)^n S(n,m)=m!1k=0m(1)k(km)(mk)n
我们把组合数展开
S ( n , m ) = 1 m ! ∑ k = 0 m ( − 1 ) k m ! k ! ( m − k ) ! ( m − k ) n S(n,m)=\frac1{m!}\sum_{k=0}^m(-1)^k\frac{m!}{k!(m-k)!}(m-k)^n S(n,m)=m!1k=0m(1)kk!(mk)!m!(mk)n
整理
S ( n , m ) = ∑ k = 0 m ( − 1 ) k k ! ⋅ ( m − k ) n ( m − k ) ! S(n,m)=\sum_{k=0}^m\frac{(-1)^k}{k!}·\frac{(m-k)^n}{(m-k)!} S(n,m)=k=0mk!(1)k(mk)!(mk)n
发现这是卷积形式
所以对于某个 n n n,我们要求出对于所有 m m m S ( n , m ) S(n,m) S(n,m)模意义下的值,用NTT是只要 Θ ( n l o g n ) \Theta(nlogn) Θ(nlogn)
update by 2019.3.5: 附一个应用这个预处理的题目:Team Work(CF 932 E)&[bzoj5093][Lydsy1711月赛]图的价值

与第一类斯特林数类似,第二类斯特林数也有递推式
想一下对于 S ( n , m ) S(n,m) S(n,m)
n = 0 n=0 n=0 m = 0 m=0 m=0方案数为1
n ≠ 0 n\neq0 n̸=0 m = 0 m=0 m=0方案数为0
n ≠ 0 n\neq0 n̸=0 m ≠ 0 m\neq0 m̸=0
那么考虑转移
如果由 S ( n − 1 , m − 1 ) S(n-1,m-1) S(n1,m1)转移来,那么自成一个集合
倘若由 S ( n − 1 , m ) S(n-1,m) S(n1,m)转移而来,则说明新来的一个点插入到 m m m个集合中的任何一个集合
递推式:
S ( n , m ) = S ( n − 1 , m − 1 ) + m ∗ S ( n − 1 , m ) S(n,m)=S(n-1,m-1)+m*S(n-1,m) S(n,m)=S(n1,m1)+mS(n1,m)

性质

S ( n , 1 ) = S ( n , n ) = 1 S(n,1)=S(n,n)=1 S(n,1)=S(n,n)=1
好像很显然啊,各种性质似乎都是挺特殊的
然后还有就是这个
∑ i = 0 n S ( n , m ) = B n \sum_{i=0}^nS(n,m)=B_n i=0nS(n,m)=Bn
貌似 B n B_n Bn贝尔数,不懂不懂

应用

推公式可能会用到,反正我还不能灵活应用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值