这篇博客为个人学习用。然而我又是一个斯特林数极菜的人,所以内容非常蠢。
第二类斯特林数
- 定义:(egin{Bmatrix}n\mend{Bmatrix})表示(n)个不同的球放进(m)个相同盒子的方案数。
- 递推:(egin{Bmatrix}n\mend{Bmatrix}=egin{Bmatrix}n-1\m-1end{Bmatrix}+megin{Bmatrix}n\m-1end{Bmatrix})。易证。
- 一个产生第二类斯特林数的地方:对(f(x)=x^n)进行差分((Delta f(x)=f(x+1)-f(x)),(x)从0开始),我们记(Delta^i f(x))为(i)阶差分,则(Delta^i f(0)=i!egin{Bmatrix}n\iend{Bmatrix})。你可以通过画一画差分的方式随时推出这个式子。这个式子的证明可以看《组合数学》。事实上可以通过这一个事实结合差分相关知识推出很多东西。(反正我是这么记的)
- 一个自然而然的事实:(k^n=sum_{i=0}^{k}i!egin{Bmatrix}n\iend{Bmatrix}inom{k}{i})。可以通过证明组合数的差分的形状证明这个式子(即证明(f(x)=inom{n}{x})的(n)阶差分(Delta^{n}f(x)=inom{0}{x}=[x=0]))。
- 进一步的事实:(m!egin{Bmatrix}n\mend{Bmatrix}=sum_{i=0}^{m}(-1)^{m-i}i^ninom{m}{i}),可以通过上面的事实二项式反演得到。进一步化简,就是(egin{Bmatrix}n\mend{Bmatrix}=sum_{i=0}^{m}frac{(-1)^{m-i}}{(m-i)!}frac{i^n}{i!})。这个式子是第二类斯特林数的通项,可以通过这个式子利用ntt求同一行的斯特林数。
- 另一个视角看待自然而然的事实:(k^n=sum_{i=0}^{k}egin{Bmatrix}n\iend{Bmatrix}k^{underline{i}})。这就给出了利用第二类斯特林数转换下降幂和普通幂的方法。而下降幂非常适合做有限微积分。
- 我们能得到(k^n=sum_{i=0}^{k}(-1)^{n-i}egin{Bmatrix}n\iend{Bmatrix}k^{overline{i}})。这一步不太可以感性理解,但是很好看。
- 既然我们可以通过5计算同一行的第二类斯特林数,那么我们当然想计算同一列的。可以通过构建(F(x)=sum_{igeq 1}frac{x^i}{i!}=e^x-1)表示(i)个不同球放进(1)个不同盒子的方案的指数生成函数(即([igeq 1])的指数生成函数),我们有(egin{Bmatrix}n\mend{Bmatrix}=left[frac{x^n}{n!} ight]frac{F^{m}}{m!})。利用多项式科技可以做到(O(mlog m))。
第一类斯特林数
没看。