斯特林数学习笔记

斯特林数学习笔记

注:本篇只为作者自己看懂,方便以后复习。

注意:如无特殊说明,以下公式的范围皆为 \(n\ge0\)\(n\) 为整数。

因为我太菜啦,所以很多东西都只有最浅显的部分。

Part 1.定义

斯特林数分为两种,分别是第一类、第二类。其中第二类较为常用。

第二类斯特林数

定义:第二类斯特林数\(\begin{Bmatrix} n \\k \end{Bmatrix}\)表示把 \(n\)不同元素划分成 \(m\)相同的集合中(不能有空集)的方案数。

通项公式:

1.1 第二类斯特林数通项

\[\begin{Bmatrix}n\\k\end{Bmatrix}=\begin{Bmatrix}n-1\\k-1\end{Bmatrix}+(k-1)\begin{Bmatrix}n-1\\k\end{Bmatrix} \]

推导的话考虑第 \(n\) 个数独立放在新的集合,此时系数为 \(1\)。或者放在新的集合,有 \(k-1\) 种可能。

第一类斯特林数

定义:第一类斯特林数\(\begin{bmatrix}n\\ m\end{bmatrix}\)表示将 \(n\)不同元素构成 \(m\)轮换的数目。

其中,轮换也可称作原排列,既如果两个排列可以通过旋转相等,那么他们就是相等的。感性理解一下就好。

通项公式:

1.2 第一类斯特林数通项

\[\begin{bmatrix}n\\k\end{bmatrix}=\begin{bmatrix}n-1\\k-1\end{bmatrix}+(n-1)\begin{bmatrix}n-1\\k\end{bmatrix} \]

对比一下的话,发现这两个式子十分的相像。实际上,这两类斯特林数关系非常紧密(不然为啥名字一样呢)

推导的话类似,考虑第 \(n\) 个数。然后插入的话考虑轮换对应排列就差不多。

注意:轮换与排列是双射关系,考虑排列 \(a_i\)\(i\) 连边组成的连通块组成的环即为不同的轮换。


注意,斯特林数通常出现在各种神秘推式子题,所以各种恒等式才是最重要的。

Part 2.恒等式

2.1

\[\sum_{k=0}^n \begin{bmatrix}n\\k\end{bmatrix}=n! \]

轮换与排列双射。

2.2

\[x^n=\sum_{k=0}\begin{Bmatrix}n\\k\end{Bmatrix}x^\underline{k} \]

证明的话考虑有 \(x\) 种颜色,\(n\) 个格子,那么两边的意义都是给 \(n\) 个格子染成 \(x\) 种颜色的方案数。当然,用数学归纳法证明也是可以的。

\(k\) 得有意义范围为 \(\operatorname{min}(n,x)\),因此这个式子常常用来优化一些 \(n\) 很大的问题,把枚举上限优化。

2.3

\[x^\overline{n}=\sum_{k=0}\begin{bmatrix}n\\k\end{bmatrix}x^k \]

\(x^\overline{n}=x(x+1)(x+2)...(x+n-2)(x+n-1)\),然后考虑这个多项式的系数,发现刚好就是第一类斯特林数。证明的话可以归纳法证明,但是我们直接设 dp \(f_{i,j}\) 表示 \([x^j]x^\overline{i}\),然后推一下递推式发现刚好是第一类斯特林数,就证完了。这里感谢码学长教我这个方法。

2.2 和 2.3 两个式子的样子很是相似。实际上,他们也可以作为斯特林数的定义式,人们需要研究上升幂、下降幂以及正常幂运算的关系,然后发现可以用斯特林数来将他们连接起来。

2.4

\[x^n=\sum_{k=0}\begin{Bmatrix}n\\k\end{Bmatrix}(-1)^{n-k}x^\overline{k} \]

这个式子不会,开摆

2.5

\[x^\underline{n}=\sum_{k=0}\begin{bmatrix}n\\k\end{bmatrix}(-1)^{n-k}x^k \]

发现与 2.3 很相似。原因:

\[x^\underline{4}=x(x-1)(x-2)(x-3)=x^4-6x^3+11x^2-6x \]

\[x^\overline{4}=x(x+1)(x+2)(x+3)=x^4+6x^3+11x^2+6x \]

发现相差的只有符号,因此改一下符号即可。

以上四个属于较为常见的。

从通常幂转换到上下降次幂一般用第二类,反之则用第一类。然后从小的转换到大的则需要加符号。

斯特林反演

2.6

\[f(n)=\sum_{k=0}^n\begin{Bmatrix}n\\k\end{Bmatrix}g(k)\Longleftrightarrow g(n)=\sum_{k=0}^n\begin{bmatrix}n\\k\end{bmatrix}(-1)^{n-k}f(k) \]

证明的话参考这个

首先由结论:

2.6.1

\[\sum_{k=0}\begin{Bmatrix}n\\k\end{Bmatrix}\begin{bmatrix}k\\m\end{bmatrix}(-1)^{n-k}=[n=m] \]

证明:

2.6 证明

\[\begin{aligned} f(n)&=\sum_{i=0}^n[i=n]f(i)\\ &=\sum_{i=0}^nf(i)\sum_{j=i}^n\begin{Bmatrix}n\\j\end{Bmatrix}\begin{bmatrix}j\\i\end{bmatrix}(-1)^{n-k}\\ &=\sum_{j=0}^n\begin{Bmatrix}n\\j\end{Bmatrix}\sum_{i=0}^j \begin{bmatrix}j\\i\end{bmatrix}(-1)^{j-i}f(i)\\ &=\sum_{k=0}^n\begin{Bmatrix}n\\k\end{Bmatrix}g(k) \end{aligned} \]

建议不要看这个证明,有错误。只是给我自己看的

Part 3.求法

首先,我们可以 \(O(nk)\) 暴力递推,一些题目是可以的。

但是我们可以在 \(O(n\log n)\) 的复杂度内求出两种斯特林数的某一行、某一列,总共四种算法。

我不会,摆了

posted @ 2023-02-11 08:21  编程客  阅读(61)  评论(0编辑  收藏  举报