斯特林数小结
第一类斯特林数
定义
\(\left[\begin{matrix}n\\m\end{matrix}\right]\) 表示将\(n\)个带标号的元素放入\(m\)个不带标号的环的方案数。
递推式
\[\left[\begin{matrix}n\\m\end{matrix}\right]=\left[\begin{matrix}n-1\\m-1\end{matrix}\right]+(n-1)\left[\begin{matrix}n-1\\m\end{matrix}\right]
\]
证明考虑组合意义,加号前表示第\(n\)个元素放入一个新的环,加号后表示跟在之前某一个数后面加入它所在的环。
初始值为
\[\left[\begin{matrix}n\\0\end{matrix}\right]=[n=0]
\]
因此我们可以\(\mathcal O(n^2)\)递推得到第一类斯特林数。
另一个递推式:
\[\left[\begin{matrix}n\\m\end{matrix}\right]=\sum_{i=1}^{n}\left[\begin{matrix}n-i\\m-1\end{matrix}\right]\binom{n-1}{i-1}(i-1)!
\]
证明考虑枚举第\(n\)号元素所在环的大小。
性质
1.\(\left[\begin{matrix}n\\k\end{matrix}\right]\)可以看作由\(n\)个元素组成的含\(k\)个轮换的排列数,因此总和即为\(n!\)
\[\sum_{k=0}^{n}\left[\begin{matrix}n\\k\end{matrix}\right]=n!
\]
2.第一类斯特林数实际上是\(x^\overline{n}\)的系数,即:
\[x^{\overline{n}}=\sum_{i=0}^{n}\left[\begin{matrix}n\\i\end{matrix}\right]x^i
\]
证明考虑数学归纳法。
利用这一性质,我们可以\(\mathcal O(nlog(n))\)的时间求出第一类斯特林数的一行了,具体参见(一个博客地址)
第二类斯特林数
定义
\(\left\{\begin{matrix}n\\m\end{matrix}\right\}\) 表示将\(n\)个带标号的元素放入\(m\)个不带标号的集合的方案数。
递推式
\[\left\{\begin{matrix}n\\m\end{matrix}\right\}=\left\{\begin{matrix}n-1\\m-1\end{matrix}\right\}+m\left\{\begin{matrix}n-1\\m\end{matrix}\right\}
\]
考虑组合意义,第\(n\)个元素要么自己是一个集合,要么选择之前的一个集合放进去。
边界条件也是
\[\left\{\begin{matrix}n\\0\end{matrix}\right\}=[n=0]
\]
因此也可以\(\mathcal O(n^2)\)递推。
同样考虑枚举第\(n\)个元素所在集合的大小,可以得到递推式:
\[\left\{\begin{matrix}n\\m\end{matrix}\right\}=\sum_{i=1}^{n}\left\{\begin{matrix}n-i\\m-1\end{matrix}\right\}\binom{n-1}{i-1}
\]
通项公式
\[\left\{\begin{matrix}n\\m\end{matrix}\right\}=\dfrac{1}{m!}\sum_{k=0}^{m}(-1)^k\binom{m}{k}(m-k)^n
\]
证明就是先给\(m\)个集合赋一个标号,最后再除\(m!\),然后随机放数,通过容斥有几个集合是空的来得到方案数。
利用这个通项公式,我们直接卷积就能在\(\mathcal O(nlog(n))\)的时间内就是第二类斯特林数的一行了。
性质
我们可以利用第二类斯特林数将次幂转为下降幂:
\[x^n=\sum_{i=0}^{n}\left\{\begin{matrix}n\\i\end{matrix}\right\}x^{\underline{i}}
\]
证明考虑组合意义,左侧的组合意义是在 \(x\) 个数中进行 \(n\) 次选择的方案数,右侧则是枚举一共选了 \(i\) 个不同的数,那么相当于将 \(n\) 次选择分成了 \(i\) 个集合,\(x^{\underline{i}}\)就是从 \(x\) 个数中选出 \(i\) 个的方案。
斯特林数的一些恒等式
上文已经给出的:
\[x^{\overline{n}}=\sum_{i=0}^{n}\left[\begin{matrix}n\\i\end{matrix}\right]x^i\\
x^n=\sum_{i=0}^{n}\left\{\begin{matrix}n\\i\end{matrix}\right\}x^{\underline{i}}
\]
斯特林数与幂的更多关系:
\[x^n=\sum_{i=0}^{n}(-1)^{n-i}\left\{\begin{matrix}n\\i\end{matrix}\right\}x^{\overline{i}}\\
x^{\underline{n}}=\sum_{i=0}^{n}(-1)^{n-i}\left[\begin{matrix}n\\i\end{matrix}\right]x^i
\]
证明考虑将\(x^{\underline{n}}\)展开,并对每一项系数进行\(dp\),发现递归式的转移与斯特林数一样。
将这些公式相互代入得到:
\[\sum_{k=m}^{n}(-1)^{n-k}\left[\begin{matrix}n\\k\end{matrix}\right]\left\{\begin{matrix}k\\m\end{matrix}\right\}=[n=m]\\
\sum_{k=m}^{n}(-1)^{k-m}\left\{\begin{matrix}n\\k\end{matrix}\right\}\left[\begin{matrix}k\\m\end{matrix}\right]=[n=m]
\]
进而得到斯特林反演:
\[f(n)=\sum_k\left\{\begin{matrix}n\\k\end{matrix}\right\}g(k)\Leftrightarrow g(n)=\sum_k(-1)^{n-k}\left[\begin{matrix}n\\k\end{matrix}\right]f(k)\\
f(n)=\sum_k\left[\begin{matrix}n\\k\end{matrix}\right]g(k)\Leftrightarrow g(n)=\sum_k(-1)^{n-k}\left\{\begin{matrix}n\\k\end{matrix}\right\}f(k)\\
\]
另一类重要恒等式:
\[\left[\begin{matrix}n+1\\m+1\end{matrix}\right]=\sum_{k=m}^{n}\left[\begin{matrix}n\\k\end{matrix}\right] \binom{k}{m}
\]
证明考虑第一类斯特林数的一个环可以看作是一个循环置换,可以认为前 \(n\) 个 数组成了\(k\)个置换,然后第\(n+1\)个数将其中\(k-m\)个置换接上最终变成了一个循环置换。
\[\left\{\begin{matrix}n+1\\m+1\end{matrix}\right\}=\sum_{k=m}^{n}\left\{\begin{matrix}k\\m\end{matrix}\right\} \binom{n}{k}\\
\left[\begin{matrix}n+1\\m+1\end{matrix}\right]=\sum_{k=m}^{n}\left[\begin{matrix}k\\m\end{matrix}\right] n^{\underline{n-k}}
\]
证明考虑枚举最后一个数所在的集合/环。
\[\left\{\begin{matrix}n+1\\m+1\end{matrix}\right\}=\sum_{k=m}^{n}\left\{\begin{matrix}k\\m\end{matrix}\right\} (m+1)^{n-k}\\
\]
考虑将\(n+1\)个数依次选择是新建一个集合还是加入之前集合,设在第\(k+1\)个数插入时,第一次出现了\(m+1\)个集合,剩下的\(n-k\)个数就可以随意选择集合插入了。
斯特林数的求法
下篇博客再讲。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步