【学习笔记】斯特林数

注:本文中第一类斯特林数均指无符号第一类斯特林数。
括号一家:

  • 组合数:\(\left(\begin{matrix}n\\m\end{matrix}\right)\)
  • 第一类斯特林数:\(\left[\begin{matrix}n\\m\end{matrix}\right]\)
  • 第二类斯特林数:\(\left\{\begin{matrix}n\\m\end{matrix}\right\}\)

第一类斯特林数

定义

第一类 \(\operatorname{Stirling}\) 数表示将 \(n\) 个不同元素划分成 \(m\) 个圆排列的方案数。
记为 \(\left[\begin{matrix}n\\m\end{matrix}\right]\)\(s(n,m)\)\(S_1(n,m)\)

递推式

根据定义进行推导:
加入第 \(n\) 个元素后所有元素被划分成 \(m\) 个圆排列,考虑第 \(n\) 个元素的情况:

  • 若第 \(n\) 个元素单独构成一个圆排列,则方案数为:\(\begin{bmatrix}{n-1\\m-1}\end{bmatrix}\)

  • 若第 \(n\)个元素至少与另外一个元素构成一个圆排列,则方案数为:\((n-1)\cdot\begin{bmatrix}{n-1\\ \ \ \ m}\end{bmatrix}\)

综上:\(\begin{bmatrix}{n\\m}\end{bmatrix}=\begin{bmatrix}{n-1\\m-1}\end{bmatrix}+(n-1)\cdot\begin{bmatrix}{n-1\\ \ \ \ m}\end{bmatrix}\)

性质

  • \(\begin{bmatrix}{0\\0}\end{bmatrix} = 1\)
  • \(\begin{bmatrix}{n\\0}\end{bmatrix} = 0 \ (n>0)\)
  • \(\begin{bmatrix}{n\\n}\end{bmatrix} = 1\)
  • \(\begin{bmatrix}{n\\1}\end{bmatrix}= (n- 1)!\)
  • \(\begin{bmatrix}{\ \ \ n\\n-1}\end{bmatrix}=\begin{pmatrix}{n\\2}\end{pmatrix}\)
  • \(\begin{bmatrix}{n\\2}\end{bmatrix} = (n-1)!\sum\limits_{i=1}^{n-1}{1\over i}\)
  • \(\begin{bmatrix}{\ \ \ n\\n-2}\end{bmatrix}=2\cdot \begin{pmatrix}{n\\3}\end{pmatrix} + 3\cdot\begin{pmatrix}{n\\4}\end{pmatrix}\)
  • \(\sum\limits_{k=0}^{n}\begin{bmatrix}{n\\k}\end{bmatrix} = n!\)

现证明最后四条性质:(下面编号按顺序)
\(1.\) 根据抽屉原理,必有:

  • \(2\) 个数在同一个集合里,方案数为 \(\begin{pmatrix}{n\\2}\end{pmatrix}\)
  • 剩下 \(n-2\) 个数各自单独在一个集合里,方案数为 \(1\)

 
综上: \(\begin{bmatrix}{\ \ \ n\\n-1}\end{bmatrix}=1\cdot\begin{pmatrix}{n\\2}\end{pmatrix}=\begin{pmatrix}{n\\2}\end{pmatrix}\)
注:证明时由于是先确定在同一集合中的两个数,故剩余数的方案数为 \(1\)
  也可以先选出 \(n-2\) 个数,剩下两个数方案数为 \(1\)\(\begin{pmatrix}{\ \ \ n\\n-2}\end{pmatrix}=\begin{pmatrix}{n\\2}\end{pmatrix}\),结果相同。
\(2.\)

\[\begin{align} \begin{bmatrix}{n\\2}\end{bmatrix} &={1\over 2}\sum\limits_{i=1}^{n-1}({n\choose i}\begin{bmatrix}{i\\1}\end{bmatrix}\begin{bmatrix}{n-i\\ 1}\end{bmatrix}) \tag{1} \\ &={1\over 2}\sum\limits_{i=1}^{n-1}({n!\over i!(n-i)!}(i-1)!(n-i-1)!)\tag{2}\\ &={1\over 2}\sum\limits_{i=1}^{n-1}{n!\over i(n-i)}\\ &={1\over 2}\sum\limits_{i=1}^{n-1}(n-1)!{n\over i(n-i)}\\ &={1\over 2}(n-1)!\sum\limits_{i=1}^{n-1}({1\over i}+{1\over n-i})\tag{3}\\ &= (n-1)!\sum\limits_{i=1}^{n-1}{1\over i} \end{align} \]

注:\((1)\) :拆成大小为 \(i\)\(n-i\) 的两个圆排列,
  实际上第一类斯特林数不区分两圆排列,故 \(*{1\over 2}\)
  \((2)\) :运用性质 \(\begin{bmatrix}{n\\1}\end{bmatrix}= (n- 1)!\)
  \((3)\) :对和式意义进行理解,会发现其实就是对 \({1\over i}\) 进行了两次求和,即 \(2\sum\limits_{i=1}^{n-1}{1\over i}\)
\(3.\)\(1\) 证明类似,分为 \((n-4)+2+2\)\((n-3)+3\) 两种组合,
  结合性质 \(\begin{bmatrix}{n\\1}\end{bmatrix}= (n- 1)!\) 求解 。
\(4.\) 下面提供两种证明方法。
法一:
构造问题:求 \(n\) 个数的全排列数。
答案: \(P=n!\)
一个排列可以对应一个置换,即:

\[\begin{pmatrix} 1 & 2 & ... & n \\ p_1 & p_2 & ... & p_n \end{pmatrix} \]

任意一个置换都可以分解为若干不相交的循环置换的乘积。
如果把元素视为图的节点,映射关系视为有向边,则每个节点的入度和出度都为 \(1\)
因此形成的图形必定是若干个环的集合,而一个环即可用一个循环置换表示。
故全排列数等价于 \(n\) 个元素组成环(圆排列)的方案数,则有:

\[P=n!=\sum\limits_{k=1}^n \begin{bmatrix}{n\\k}\end{bmatrix} \]

\[\begin{aligned} \because \ &\begin{bmatrix}{n\\0}\end{bmatrix}=0\\ \therefore \ &P=n!=\sum\limits_{k=0}^n \begin{bmatrix}{n\\k}\end{bmatrix} \end{aligned} \]

法二:
同行第一类斯特林数的生成函数:\(x\)\(n\) 次上升阶乘幂记为 \(x^{\overline{n}}\) ,等于\(\prod\limits^{n-1}_{i=0}(x+i)\)
有结论:

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

用数学归纳法证明:

  • \(n=1\) 时该结论显然成立。
  • 现证明 \(n\) 时成立,则 \(n+1\) 时也成立:

 

\[\begin{align} x^{\overline{n+1}}&=x^{\overline{n}}\cdot(x+n)\\ &=(x+n)\cdot \sum\limits_{i=0}^n\left[\begin{matrix}n\\i\end{matrix}\right] x^i\\ &=\sum\limits_{i=1}^{n+1}\left[\begin{matrix}n\\i-1\end{matrix}\right]x^i+ \sum\limits_{i=0}^n\left(n\cdot\left[\begin{matrix}n\\i\end{matrix}\right]x^i\right) \tag{1}\\ &=\sum\limits_{i=0}^{n+1}\left(\left[\begin{matrix}n\\i-1\end{matrix}\right]+ n\cdot\left[\begin{matrix}n\\i\end{matrix}\right]\right)x^i\\ &=\sum\limits^{n+1}_{i=0}\left[\begin{matrix}n+1\\i\end{matrix}\right]x^i \end{align} \]

注:\((1)\) : 当 \(i=n+1\) 时,\(n\cdot\left[\begin{matrix}n\\n+1\end{matrix}\right]x^i= 0\)
故原命题成立 。
故当 \(x=1\) 时,\(x(x+1)(x+2)\ldots(x+n-1)=n!=\sum\limits_{k=0}^{n}\begin{bmatrix}{n\\k}\end{bmatrix}\)

求解

通过 \(x^{\overline{n}}\) 进行求解。
分治求解 \(x^{\overline{n}}\)
\(n\) 是奇数,则 \(x^{\overline{n}}=x^{\overline{n-1}}\cdot(x+n-1)\) ,暴力求解。
\(n\) 是偶数,则:

\[x^{\overline{n}}=x^{\overline{{n\over 2}}}\cdot(x+{n\over 2})^{\overline{{n\over 2}}} \]

设前 \({n\over 2}\) 对应的多项式为:

\[x^{\overline{{n\over 2}}}=\sum\limits_{i=0}^{{n\over 2}}a_i x^i \]

则后 \({n\over 2}\) 对应的多项式为:

\[\sum\limits_{i=0}^{{n\over 2}}a_i {(x+{n\over 2})}^i \]

形式化地定义为:

\[f(x+k)=\sum\limits_{i=0}^n a_i {(x+k)}^i \]

对该式进行化简:

\[\begin{align} f(x+k) &=\sum\limits_{i=0}^n a_i{(x+k)}^i\\ &=\sum\limits_{i=0}^n a_i \sum\limits_{j=0}^i{i\choose j}x^j k^{i-j} \tag{1}\\ &=\sum\limits_{j=0}^n x^j \sum\limits_{i=j}^n a_i{i!\over j!(i-j)!}k^{i-j}\tag{2}\\ &=\sum\limits_{j=0}^n {x^j\over j!} \sum\limits_{i=j}^n a_i i!{k^{i-j}\over(i-j)!} \end{align} \]

注:\((1)\) :用二项式定理展开。
  \((2)\) :交换求和次序时,注意保持 \(i\geqslant j\)
\(\sum\limits_{i=j}^n a_i i!{k^{i-j}\over(i-j)!}\) 换成 \(\sum\limits_{i=0}^{n'}g_ih_{n'-i}\) 的形式 。
设:

\[g_i=a_i i!\ \ ,\ \ h_i={n^i\over i!} \]

则:

\[\begin{align} f(x+k)&=\sum\limits_{j=0}^n {x^j\over j!}\sum\limits_{i=j}^n g_i\cdot h_{i-j}\\ &=\sum\limits_{j=0}^n {x^j\over j!}\sum\limits_{i=0}^{n-j} g_{i+j}\cdot h_i\\ &=\sum\limits_{j=0}^n {x^j\over j!}\sum\limits_{i=0}^{n-j} g'_{n-j-i}\cdot h_i\tag{1} \end{align} \]

注:\((1)\)\(g'\) 表示 \(g\) 反转后的序列。
后一部分的和式用 NTT 优化,计算 \(x^{\overline{{n\over 2}}}\cdot(x+{n\over 2})^{\overline{{n\over 2}}}\) 也用 NTT 优化。
注意 \(x^{\overline{n}}\) 是长度为 \(n+1\) 的多项式。
时间复杂度:\(\operatorname{T}(n) = \operatorname{T}(\frac{n}{2}) + \operatorname{O}(n \log n) = \operatorname{O}(n \log n)\)

第二类斯特林数

定义

第二类 \(\operatorname{Stirling}\) 数表示将 \(n\) 个不同元素划分成 \(m\) 个集合的方案数。
记为 \(\left\{\begin{matrix}n\\m\end{matrix}\right\}\)\(S(n,m)\)\(S_2(n,m)\)

递推式

仍根据定义进行推导:
加入第 \(n\) 个元素后所有元素被划分成 \(m\) 个集合,考虑第 \(n\) 个元素的情况:

  • 若第 \(n\) 个元素单独分配在一个集合中,则方案数为:

    \[\begin{Bmatrix}{n-1\\m-1}\end{Bmatrix} \]

  • 若第 \(n\) 个元素至少与另外一个元素分配在一个集合中,则方案数为:

\[m\cdot\begin{Bmatrix}{n-1\\\ \ \ \ m}\end{Bmatrix} \]

 
综上:

\[\begin{Bmatrix}{n\\m}\end{Bmatrix}=\begin{Bmatrix}{n-1\\m-1}\end{Bmatrix}+m\cdot\begin{Bmatrix}{n-1\\\ \ \ \ m}\end{Bmatrix} \]

性质

  • \(\begin{Bmatrix}{n\\0}\end{Bmatrix} = 0 \ (n>0)\)
  • \(\begin{Bmatrix}{n\\1}\end{Bmatrix}= 1\)
  • \(\begin{Bmatrix}{n\\2}\end{Bmatrix}= 2^{n-1}-1\)
  • \(\begin{Bmatrix}{n\\n}\end{Bmatrix} = 1\)
  • \(\begin{Bmatrix}{\ \ \ n\\n-1}\end{Bmatrix}=\begin{pmatrix}{n\\2}\end{pmatrix}\)
  • \(\begin{Bmatrix}{\ \ \ n\\n-2}\end{Bmatrix}=\begin{pmatrix}{n\\3}\end{pmatrix} + 3\cdot\begin{pmatrix}{n\\4}\end{pmatrix}\)

通项公式

\[\begin{align} \begin{Bmatrix}{n\\m}\end{Bmatrix}&={1\over m!} \sum\limits_{i=0}^m (-1)^i {m\choose i} (m-i)^n \tag{1}\\ &={1\over m!} \sum\limits_{i=0}^m (-1)^i {m!\over i!(m-i)!} (m-i)^n\\ &=\sum\limits_{i=0}^m {(-1)^i \over i!}\cdot {(m-i)^n\over (m-i)!}\tag{2} \end{align} \]

用容斥原理求解:
构造问题:将 \(n\) 个元素染上 \(m\) 种颜色的方案数。
答案: \(\operatorname{ans}=m^n\)
增加条件:每种颜色至少出现一次。
枚举没有出现的颜色种数,容斥得:

\[\operatorname{ans}=\sum\limits_{i=0}^m(-1)^i{m\choose i}(m-i)^n \]

同时问题所求若不区分颜色,即为第二类斯特林数,故:

\[\begin{Bmatrix}{n\\m}\end{Bmatrix}={1\over m!} \sum\limits_{i=0}^m (-1)^i {m\choose i} (m-i)^n \]

\((2)\) 式用于求第二类斯特林数的一行。
\((1)\) 式进行变形,可得到另一种递推公式:

\[\begin{align} \begin{Bmatrix}{n\\m}\end{Bmatrix}&={1\over m!} \sum\limits_{i=0}^m (-1)^i {m\choose i} (m-i)^n \\ &={1\over m!}\sum\limits_{i=0}^m {(-1)}^{(m-i)}{m\choose m-i}i^n\\ &={1\over m!}\sum\limits_{i=0}^m {(-1)}^{(m-i)}{m\choose i}i^n \end{align} \]

求解

第二类斯特林数递推式不是多项式乘法。
把通项公式写成卷积形式:

\[\begin{Bmatrix}{n\\m}\end{Bmatrix}=\sum\limits_{i=0}^m {(-1)^i \over i!}\cdot {(m-i)^n\over (m-i)!} \]

设:

\[g_i={{(-1)}^i \over i!}\ \ ,\ \ h_i={i^n\over i!} \]

对于每个 \(m\) 计算:

\[\left\{\begin{matrix}n\\m\end{matrix}\right\}=\sum\limits_{i=0}^m g_ih_{m-i} \]

卷积:

\[\sum\limits_{m=0}^n\left\{\begin{matrix}n\\m\end{matrix}\right\}x^m=\sum\limits_{i=0}^n g_i x^i\cdot \sum\limits_{i=0}^n h_i x^i \]

可以用 NTT 求解 。

posted @ 2021-03-16 20:34  loctopus  阅读(282)  评论(0)    收藏  举报