一、定义
1.第一类斯特林数:
表示方法:S1(n,m)或 [ n m ] n \brack m [mn]
组合意义:指n个点组成m个圆排列的方案数。
递推求法:S1(n,m)=S1(n-1,m-1)+(n-1)*S1(n-1,m)
快速求法:
∏ i = 0 n − 1 ( x + i ) \prod_{i=0}^{n-1}(x+i) ∏i=0n−1(x+i)
的第k次项系数就是S1(n,k),所以可用分治fft做到n*log^2或者再推下用倍增fft做到n*log
2.第二类斯特林数
表示方法:S2(n,m)或 \{ n m \} n \brace m {
mn}
组合意义:指n个点划分成m个非空集合的方案数。
递推求法:S2(n,m)=S2(n-1,m-1)+m*S2(n-1,m)
快速求法:考虑枚举至少i个集合是空的,容斥所求的0个集合非空得:
S 2 ( n , m ) = 1 m ! ∑ i = 0 m ( − 1 ) i ∗ ( m i ) ∗ ( m − i ) n S2(n,m)=\frac{1}{m!}\sum_{i=0}^m(-1)^i*\binom m i*(m-i)^n S2(n,m)=m!1i=0∑m(−1)i∗(im)∗(m−i)n
其中之前乘的阶乘分之一是因为后面式子求出的是在盒子有标号(有序)情况下,这样才能变成无序集合。
显然搞一搞就是卷积形式可以直接fft来n*log求
二、应用
参考:(Orz)
https://www.cnblogs.com/acha/p/6444944.html
https://www.cnblogs.com/hchhch233/p/10016543.html
http://yyy.is-programmer.com/posts/202122.html
x k = ∑ i = 0 k ( x i ) ∗ \{ k i \} ∗ i ! = ∑ i = 0 k x i ‾ ∗ \{ k i \} x^k=\sum_{i=0}^{k}\binom x i*{k\brace i}*i!=\sum_{i=0}^{k}x^{\underline i}*{k\brace i} xk=i=0∑k(ix)∗{
ik}∗i!=i=0∑kxi∗{
ik}
理解:x种颜色给k个点染色,直接考虑是等式左边,复杂地考虑用上k种颜色的方案数求和就是等式右边了。枚举到k是因为用的颜色数不会多于点数,而且推式子题目k也一般比x范围小。
x k ‾ = ∑ i = 0 k [ k i ] ∗ x i x^{\overline k}=\sum_{i=0}^{k}{k\brack i}*x^i xk=i=0∑k[ik]∗xi
理解:k个点组成圆排列,在为每个圆排列里的所有点染一种颜色。等式右边意义为暴枚组成了几个圆排列计算,左边意义为:考虑一个个加入点,对于当前点可以染x种颜色任意一种或者放到某个点左边并和这个点颜色相同,那么显然就是 x k ‾ x^{\overline k}

本文深入探讨斯特林数的概念,包括第一类斯特林数和第二类斯特林数的定义、递推公式及快速求解方法。同时,文章介绍了斯特林数在组合数学中的应用,如自然数幂和的计算,以及斯特林反演原理。并通过具体实例,如Codeforces题目解析,展示了斯特林数在实际问题中的应用。
2347

被折叠的 条评论
为什么被折叠?



