「学习笔记」斯特林数

「学习笔记」斯特林数

第一类斯特林数

\[ {n\brack m}={n-1\brack m-1}+(n-1){n-1 \brack m} \]
把它写成生成函数的形式
\[ f_n(x)=\sum_{i=0}^n {n \brack i} x^i \]
表示第 \(i\) 行第一类斯特林数的生成函数,根据递推式可以得到。

\[ f_{n+1}(x)=f_n(x)(x+n) \\ f_n =\prod_{i=0}^{n-1}(x+i) =x^{\overline n} \]
分治 \(\text{NTT}\) 可以 \(\mathcal O(n\log^2n)\) 求解一行。

转化成下降幂 \(x^{\underline{n}}=\prod_{i=0}^{n-1}(x-i)\),相当于某几项改变一下符号。

\[ x^{\underline{n}} =\sum_{i=0}^{n} (-1)^{n-i}{n \brack i}x^i \]

第二类斯特林数

\[ {n \brace m}={n -1\brace m -1}+m{n - 1\brace m} \]

可以根据二项式反演得到展开式,枚举有多少个盒子是空的即可,这样算是有序的,还要除掉一个 \(m!\)
\[ {n \brace m}=\dfrac{1}{m!}\sum_{i=0}^m (-1)^{i} {m \choose i}(m-i)^{n} \]
可以写成卷积形式
\[ {n \brace m}=\dfrac{1}{m!}\sum_{i=0}^m (-1)^{i} {m \choose i}(m-i)^{n} \\ = \sum_{i=0}^m \dfrac{(-1)^{i}}{i!} \frac{(m-i)^{n}}{(m-i)!} \]
直接 \(\text{NTT}\) 一次 \(\mathcal O(n\log n)\) 求一整行。

第二类斯特林数存在将下降幂转为通常幂的对应关系,可以用归纳法证明
\[ x^{n} =\sum_{i=0}^n {n \brace i}x^{\underline{i}} \]

斯特林反演

现在我们有
\[ x^{\underline{n}} =\sum_{i=0}^{n} (-1)^{n-i}{n \brack i}x^i \\ x^{n} =\sum_{i=0}^n {n \brace i}x^{\underline{i}} \]
\(x^{i}\) 用下降幂代替
\[ x^{\underline{n}} =\sum_{i=0}^{n} (-1)^{n-i}{n \brack i}\sum_{k=0}^i {i \brace k}x^{\underline{k}} \\ = \sum_{k=0}^{n}x^{\underline{k}} \sum_{i=0}^n (-1)^{n-i}{n \brack i}{i \brace k} \]
显然当 \(k \neq n\) 时后面的式子都是 \(0\) ,当 \(k =n\) 时后面的式子是 \(1\) ,所以有
\[ \sum_{i=0}^n (-1)^{n-i}{n \brack i}{i \brace k}=[n=k] \]
接下来就可以做反演了,现在有
\[ f(n)=\sum_{i=0}^n {n \brace i} g(i) \\ g(n)=\sum_{k=0}^n[k=n]g(k) \\ g(n) =\sum_{k=0}^n\sum_{i=0}^n (-1)^{n-i}{n \brack i}{i \brace k}g(k) \\ g(n) =\sum_{i=0}^n (-1)^{n-i}{n \brack i}\sum_{k=0}^i{i \brace k}g(k) \\ \\ g(n) = \sum_{i=0}^n (-1)^{n-i}{n \brack i}f(i) \]

只需要求一行第一类斯特林数的值就能做了。

猜你喜欢

转载自www.cnblogs.com/mangoyang/p/10507010.html
今日推荐