斯特林数相关

1. 基础

1.1 第一类斯特林数

1.1.1 定义

第一类斯特林数 \({n \brack k}\),指将 \(n\) 个数放入 \(k\) 个环中(环无区分)的方案数。

1.1.2 递推式

\[{n \brack k}=(n-1){n-1 \brack k}+{n - 1 \brack k - 1} \]

说明:

我们考虑最后一个数的位置,独立成环则为后一项,否则我们可以加到 \(n-1\) 个数中的某个数后面去,得到这个递推式。

1.2 第二类斯特林数

1.2.1 定义

第二类斯特林数 \({n \brace k}\),指将 \(n\) 个数放入 \(k\) 个盒子(盒子无区分)的方案数。

1.2.2 递推式

\[{n \brace k}=k{n-1 \brace k}+{n - 1 \brace k - 1} \]

说明:

我们考虑最后一个数的位置,自己一个盒子则为后一项,否则我们可以加到 \(k\) 个盒子中的某个盒子中。

1.2.3 通项公式

第二类斯特林数通项公式:

\[{n \brace k}=\frac{1}{k!}\sum_{t=0}^k(-1)^k\binom{k}{t}(k - t)^n \]

证明:

见容斥原理学习笔记。

2. 常用公式

2.1 第一类斯特林数与阶乘

\[\sum_{k=0}^n {n \brack k}=n! \]

证明:

double counting,考虑计算有多少个 \(1 \sim n\) 的置换,显然有 \(n!\) 个。如果我们枚举置换中环的个数,就是 \(\sum_{k=0}^n {n \brack k}\),所以二者相等。

2.2 上下阶乘幂与普通数幂的关系

\[x^n = \sum_{k=1}^n {n \brace k}x^{\underline{k}} \]

\[x^n = \sum_{k=1}^n(-1)^{n-k}{n \brace k}x^{\overline{k}} \]

\[x^{\underline{n}} = \sum_{k=1}^n (-1)^{n-k} {n \brack k}x^k \]

\[x^{\overline{n}} = \sum_{k=1}^n{n \brack k}x^k \]

证明:

先证第一个,double counting,将 \(n\) 个数放入 \(x\) 个盒子中(盒子有区别),显然可以是 \(x^n\),枚举哪些盒子非空,再用算这些盒子的情况,答案是 \(\sum_{k=1}^n {n \brace k}x^{\underline{k}}\)

剩下的三个式子可以由 \(x^{\overline{k}}=(-1)^{k}(-x)^{\underline{k}}\) 推出。

3. 斯特林数快速计算

前置知识:多项式学习笔记

3.1 第一类斯特林数·行

题目链接

不妨设 \(f_n(x) = x^{\overline{n}}\),根据上面的公式,我们要求的就是这个多项式的系数。

注意到 \(x^{\overline{2n}} = x^{\overline{n}}(x + n)^{\overline{n}}\),考虑倍增,我们得到:\(f_{2n}(x) = f_n(x)f_n(x + n)\)

由于多项式的卷积和平移都是可以在 \(O(n \log n)\) 内完成的,所有总时间复杂度也是 \(O(n \log n)\)

3.2 第二类斯特林数·行

题目链接

两种方法。

我们可以考虑 \(f(x) = x^n\) 的下降幂系数,可以用快速幂在 \(O(n \log n)\) 内求出 \(f(0) \sim f(n)\),然后用下降幂多项式的插值在 \(O(n \log n)\) 插回去得到答案。

我们也可以直接用通项公式来做,推一下式子可以得到:

\[{n \brace k} = \sum_{t = 0}^k\frac{(-1)^t}{t!}\frac{(k-t)^n}{(k-t)!} \]

这就是一个卷积就完事儿了。这也是为什么只有这道题是紫题。

3.3 第一类斯特林数·列

题目链接

考虑到第一类斯特林数实际上是若干个原排列的组合,我们先考虑圆排列的指数型生成函数,即:

\[A(x) = \sum_{n > 0}\frac{x^n}{n!}(n - 1)! = \sum_{n > 0}\frac{x^n}{n} = \ln(\frac{1}{1 - x}) \]

所以我们只要求出下面这个多项式的系数即可:

\[\frac{(\ln(\frac{1}{1-x}))^k}{k!} \]

然而由于这个快速幂时常数项为 \(0\),所以需要快速幂加强版的技巧来做。

3.4 第二类斯特林数·列

题目链接

同样,考虑 EGF 会发现其实就是 \(e^x - 1\),所以我们要求的就是 \(\frac{(e^x - 1)^k}{k!}\) 即可,和上面类似。

4. 题目

CF932E Team Work

\(n \le 10^9, k \le 5000\),计算

\[\sum_{i=1}^n\binom{n}{i}i^k \]

\[\begin{aligned} \sum_{i=1}^n\binom{n}{i}i^k &= \sum_{i=1}^n\binom{n}{i}\sum_{j=1}^k{k \brace j}i^{\underline{j}}\\ &= \sum_{i=1}^n\binom{n}{i}\sum_{j=1}^{\min\{k,i\}}{k \brace j}i^{\underline{j}}\\ &= \sum_{i=1}^n\binom{n}{i}\sum_{j=1}^{\min\{k,i\}}{k \brace j}\binom{i}{j}j!\\ &= \sum_{j=1}^{\min\{k,n\}}j!{k \brace j}\sum_{i=j}^n\binom{n}{i}\binom{i}{j}\\ &= \sum_{j=1}^{\min\{k,n\}}j!{k \brace j}\sum_{i=j}^n\binom{n}{j}\binom{n-j}{i-j}\\ &= \sum_{j=1}^{\min\{k,n\}}j!{k \brace j}\binom{n}{j}\sum_{i=j}^n\binom{n-j}{i-j}\\ &= \sum_{j=1}^{\min\{k,n\}}j!{k \brace j}\binom{n}{j}\sum_{i=0}^{n-j}\binom{n-j}{i}\\ &= \sum_{j=1}^{\min\{k,n\}}j!{k \brace j}\binom{n}{j}2^{n-j}\\ \end{aligned} \]

再结合第二类斯特林数递推式便能计算。

P8143 [JRKSJ R4] Stirling

\(\sum_{2|k}{n \brack k}\)

很妙,要用函数的思维。

我们已知:\( x^{\overline{n}} = \sum_{k=1}^n{n \brack k}x^k \)。现在将 \(x = 1\)\(x=-1\) 分别带入,得到的就是偶数项与奇数项的差,显然差是 \(0\),和是 \(n!\),所以答案就是 \(n!\) 的一半。

有限制置换

求所以满足要求的 \(n\) 长度置换:

  1. \(1\) 不是独立的环。
  2. 环的个数不超过 \(k\)

我们先枚举有多少个环,假设有 \(j\) 个环,则 \({n \brack j}-{n-1 \brack j-1}\) 就是所有情况减去 \(1\) 单独成环的情况。最后累加即可。

P4609 [FJOI2016] 建筑师

容易发现,整个序列必然是中间是 \(n\),然后左右两边分别是 \(A-1\) 个递增的和 \(B-1\) 个下降的。

我们不妨把 \(1 \sim n-1\) 分成 \(A+B-2\) 组(非空)。

首先我们要计算将这些组分别分到前面和后面。

然后分完后显然是每组最大的作为递增或递减,并且剩下的数可以随便填,不同的填法等价于圆排列的个数。

所以我们可以用第一类斯特林数与组合数,答案就是 \(\binom{A+B-2}{A-1}{n-1 \brack A+B-2}\)

CF960G Bandit Blues

和上道题完全一样,但是数据范围更大,第一类斯特林数需要用多项式来求。

P4091 [HEOI2016/TJOI2016] 求和

\(g_n = \sum_{i=0}^n{n \brace i}i!2^i\)

考虑组合意义,\(g_n\) 相当于把 \(n\) 个球放入若干盒子,盒子有顺序,且有两种颜色。

这样我们考虑枚举最后一个盒子,可以得到递推式:

\[g_n =\sum_{i=1}^n2\binom{n}{i}g_{n-i} \]

将其变化一下得到:

\[\frac{g_n}{n!} = \sum_{i=1}^n\frac{2}{i!}\frac{g_{n-i}}{(n-i)!} \]

\(G(x) = \sum_n\frac{g_n}{n!}x^n\)\(F(x) = \sum_{n}\frac{2}{n!}\),则我们就可以知道 \(G(x) = G(x)F(x) + 1\),所以 \(G(x) = \frac{1}{1 - F(x)}\),多项式求逆即可。

QOJ1285 Strling Number

首先我们考虑 \(S_n(x) = x^{\overline{n}}\) 这个函数的系数就是第一类斯特林数。

我们显得出 \(S_n(x)\) 的一个递归形式。

\(q = \lfloor \frac{n}{p}\rfloor\)\(r = n \bmod p\),则:

\[S_n(x) = \prod_{u=0}^{q-1}(x+up)^{\overline{p}} \times \prod_{v = 0}^{r - 1}(x + qp + v) \]

我们需要一个强有力的引理:\(x^{\overline{p}} \equiv x^p - x \pmod p\)\(p\) 是素数。

证明考虑构造 \(S(x) = x^{\overline{p}}\)\(F(x) = x^P - x\),则 \(F(x) - S(x)\) 的邻点个数大于这个多项式的次数,所以这个多项式恒等于 0,所以 \(F(x) = S(x)\)

根据这个引理容易得到:

\[S_n(x) = x^q(x^{p-1}-1)^qS_r(x) \]

根据这个式子,我们得到第一类斯特林数的简化公式:

\[{n \brack k} = [x] \]

posted @ 2024-01-20 14:42  rlc202204  阅读(23)  评论(0编辑  收藏  举报