斯特林数学习笔记
前置知识
普通生成函数+下降幂+多项式
定义
斯特林数是组合数学概念,分为第一类斯特林数和第二类斯特林数
第一类斯特林数
第一类斯特林数表示为 \(\begin{bmatrix}n\\m\end{bmatrix}\),表示 \(n\) 个不同的人坐 \(m\) 张相同的圆桌的方案数(每张圆桌至少坐一人)。
考虑递推式。当我们新加入一个人的时候,要么坐到一张新的桌子,要么和之前的坐在一起。由于是圆桌,所以我们考虑这个人坐在了哪一个人的左边。于是有递推式:
\[\begin{bmatrix}n\\m\end{bmatrix}=(n-1)\begin{bmatrix}n-1\\m\end{bmatrix}+\begin{bmatrix}n-1\\m-1\end{bmatrix}
\]
递推的复杂度是 \(O(nm)\)。
第二类斯特林数
第二类斯特林数表示为 \(\begin{Bmatrix}n\\m\end{Bmatrix}\),表示 \(n\) 个不同的球放进 \(m\) 个相同的盒子的方案数(每个盒子至少放一个球)。
考虑递推式。当我们新加入一个球的时候,要么放到一个新的盒子,要么放在之前的盒子里。于是有递推式
\[\begin{Bmatrix}n\\m\end{Bmatrix}=m\begin{Bmatrix}n-1\\m\end{Bmatrix}+\begin{Bmatrix}n-1\\m-1\end{Bmatrix}
\]
时间复杂度是 \(O(nm)\) 的。
如果只需要求单点的值,可以考虑容斥,令 \(f(x)\) 表示至少有 \(x\) 个盒子空着的情况数。考虑假设 \(m\) 个盒子互不相同,那么考虑先选出 \(x\) 个盒子不放,剩下的 \(m-x\) 个盒子可以让 \(n\) 个球任意放置,于是有
\[f(x)=\binom{m}{x}(m-x)^n
\]
同时让 \(g(x)\) 表示恰好有 \(x\) 个盒子空着的情况数,于是有
\[f(x)=\sum_{i=x}^{m}\binom{i}{x}g(i)
\]
因为盒子其实本质相同,所以所求即为 \(\frac{g(0)}{m!}\),通过二项式反演可得
\[\begin{aligned}\frac{g(0)}{m!}&=\frac{\sum_{i=0}^{m}(-1)^{i-0}\binom{i}{0}f(i)}{m!}\\&=\frac{\sum_{i=0}^{m}(-1)^i\binom{m}{i}(m-i)^n}{m!} \end{aligned}
\]
所以
\[\begin{Bmatrix}n\\m\end{Bmatrix}=\frac{\sum_{i=0}^{m}(-1)^i\binom{m}{i}(m-i)^n}{m!}
\]
更多的我们尝试求解其生成函数,令 \(F_k(x)=\sum_{i\ge 0}\begin{Bmatrix}i\\k\end{Bmatrix}x^i\)。那么根据递推式有
\[\begin{aligned}&F_k(x)=kxF_k(x)+xF_{k-1}(x)\\\Rightarrow&(1-kx)F_k(x)=xF_{k-1}(x)\\\Rightarrow&F_k(x)=\frac{xF_{k-1}(x)}{1-kx} \end{aligned}
\]
显然 \(F_0(x)=1\),于是可以得到
\[F_k(x)=\frac{x^k}{\prod_{i=1}^{k}(1-ix)}
\]
于是我们得到了 \(F_k(x)\) 的封闭形式。
性质
第一类斯特林数
首先有
\[x^{\overline{n}}=\sum_{i\ge 0}\begin{bmatrix}n\\i\end{bmatrix}x^i
\]
考虑用数学归纳法证明。
当 \(n=0\) 时,原式写作
\[1=1
\]
等式对于任意 \(x\) 均成立。考虑新加入一个数,要么当作自环,有 \(x\) 种染色方案,要么插进之前的一个数字的后面,有 \(n-1\) 种选择。令 \(f_x(n)=\sum_{i\ge 0}\begin{bmatrix}n\\i\end{bmatrix}x^i\),那么则有
\[f_x(n+1)=xf_x(n)+nf_x(n)=(x+n)f_x(n)=(x+n)x^{\overline{n}}=x^{\overline{n+1}}
\]
则对于任意 \(n,x\),等式均成立。
接下来有
\[x^{\underline{n}}=\sum_{i=0}^{n}(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}x^i
\]
可以发现
\[\begin{aligned}x^{\underline{n}}&=(-1)^n(-x)^{\overline{n}}\\&=(-1)^n\sum_{i\ge0}\begin{bmatrix}n\\i\end{bmatrix}(-x)^i\\&=\sum_{i\ge 0}(-1)^{n+i}\begin{bmatrix}n\\i\end{bmatrix}x^i\\&=\sum_{i\ge 0}(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}x^i \end{aligned}
\]
第二类斯特林数
\[x^n=\sum_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}i!\binom{x}{i}=\sum_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}x^{\underline{i}}
\]
考虑组合意义,即 \(n\) 个不同的球放进 \(x\) 个不同的盒子里,盒子可以为空。那么就是枚举具体放进了多少个盒子,从 \(x\) 个盒子中选出来,将 \(n\) 个球放入有多少方案,接着考虑不同的盒子,因此需要乘上 \(i!\)。
然后我们发现我们可以将下降幂转化成普通幂,同时也可以将普通幂转化成下降幂。
斯特林反演
形式上和二项式反演类似
\[f(n)=\sum_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}g(i)\Leftrightarrow g(n)=\sum_{i=0}^{n}\begin{bmatrix}n\\i\end{bmatrix}(-1)^{n-i}f(i)
\]
首先证明一个反转公式
\[\sum_{k=m}^{n}(-1)^{k-m}\begin{Bmatrix}n\\k\end{Bmatrix}\begin{bmatrix}k\\m\end{bmatrix}=[m=n]\\\sum_{k=m}^{n}(-1)^{n-k}\begin{bmatrix}n\\k\end{bmatrix}\begin{Bmatrix}k\\m\end{Bmatrix}=[m=n]
\]
证明在于
\[\begin{aligned}m^n&=\sum_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}m^{\underline{i}}\\&=\sum_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}\sum_{j=0}^{i}(-1)^{i-j}\begin{bmatrix}i\\j\end{bmatrix}m^j\\&=\sum_{i=0}^{n}m^i\sum_{j=i}^{n}(-1)^{j-i}\begin{bmatrix}j\\i\end{bmatrix}\begin{Bmatrix}n\\j\end{Bmatrix} \end{aligned}
\]
为了使得等式两边恒等,只有当 \(i=n\) 时 \(\sum_{j=i}^{n}(-1)^{j-i}\begin{bmatrix}j\\i\end{bmatrix}\begin{Bmatrix}n\\j\end{Bmatrix}=1\),否则结果均为 \(0\)。即
\[\sum_{j=i}^{n}(-1)^{j-i}\begin{bmatrix}j\\i\end{bmatrix}\begin{Bmatrix}n\\j\end{Bmatrix}=[i=n]
\]
换元后即可得到
\[\sum_{k=m}^{n}(-1)^{k-m}\begin{Bmatrix}n\\k\end{Bmatrix}\begin{bmatrix}k\\m\end{bmatrix}=[m=n]
\]
对于下面的式子,则有
\[\begin{aligned}m^{\underline{n}}&=\sum_{i=0}^{n}(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}x^{i}\\&=\sum_{i=0}^n(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\sum_{j=0}^{i}\begin{Bmatrix}i\\j\end{Bmatrix}x^{\underline{j}}\\&=\sum_{i=0}^{n}x^{\underline{i}}\sum_{j=i}^{n} \end{aligned}
\]
接着证明反演公式,如果 \(g(n)=\sum_{i=0}^{n}\begin{bmatrix}n\\i\end{bmatrix}(-1)^{n-i}f(i)\),则
\[\begin{aligned}f(n)&=\sum_{i=0}^{n}[i=n]f(i)\\&=\sum_{i=0}^{n}f(i)\sum_{j=i}^{n}(-1)^{j-i}\begin{Bmatrix}n\\j\end{Bmatrix}\begin{bmatrix}j\\i\end{bmatrix}\\&=\sum_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}\sum_{j=0}^{i}(-1)^{i-j}\begin{bmatrix}i\\j\end{bmatrix}f(j)\\&=\sum_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}g(i) \end{aligned}
\]
而如果 \(f(n)=\sum_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}g(i)\),则
\[\begin{aligned}g(n)&=\sum_{i=0}^{n}[i=n]g(i)\\&=\sum_{i=0}^{n}g(i)\sum_{j=i}^{n}(-1)^{n-j}\begin{bmatrix}n\\j\end{bmatrix}\begin{Bmatrix}j\\i\end{Bmatrix}\\&=\sum_{i=0}^{n}(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}\sum_{j=0}^{i}\begin{Bmatrix}i\\j\end{Bmatrix}g(j)\\&=\sum_{i=0}^{n}(-1)^{n-i}\begin{bmatrix}n\\i\end{bmatrix}f(i) \end{aligned}
\]
由此,我们证明了斯特林反演的公式
\[f(n)=\sum_{i=0}^{n}\begin{Bmatrix}n\\i\end{Bmatrix}g(i)\Leftrightarrow g(n)=\sum_{i=0}^{n}\begin{bmatrix}n\\i\end{bmatrix}(-1)^{n-i}f(i)
\]