Loading

斯特林数学习笔记

第一类斯特林数

基础

  • 符号:\(\begin{bmatrix}n\\m\end{bmatrix}\)
  • 定义:把 \(n\) 个不同元素分成 \(m\) 个环的方案数。环可以旋转。
  • 递推:\(\begin{bmatrix}n\\m\end{bmatrix} = \begin{bmatrix}n-1\\m-1\end{bmatrix} + (n-1) \begin{bmatrix}n-1\\m\end{bmatrix}\)
  • 解释:考虑新加进来一个元素,第一种是单独成环,方案数是 \(\begin{bmatrix}n-1\\m-1\end{bmatrix}\);第二种是在一个环内插入,方案数是 \((n-1) \begin{bmatrix}n-1\\m\end{bmatrix}\)

恒等式

  1. \(\sum\limits_{i = 1}^{n} \begin{bmatrix}n\\m\end{bmatrix} = n!\)
    长度为 \(n\) ,有 \(i\) 个循环的置换个数为 \(\begin{bmatrix}n\\i\end{bmatrix}\),所以表达的是长度为 \(n\) 的所有置换,个数为 \(n!\)

  2. \(x^{\overline{k}} = \sum\limits_{i=0}^{k} \begin{bmatrix}k\\i\end{bmatrix} x^i\)
    归纳发证明:
    \(x^{\overline{k+1}} = (x+n) x^{\overline k} \\ = (x+n) \sum\limits_{i=0}^{k} \begin{bmatrix}k\\i\end{bmatrix} x^i \\ = \sum\limits_{i=0}^{k} \begin{bmatrix}k\\i\end{bmatrix} x^{i+1} + n \sum\limits_{i=0}^{k} \begin{bmatrix}k\\i\end{bmatrix} x^i \\=\sum\limits_{i=0}^{k + 1} \begin{bmatrix}k\\i-1\end{bmatrix} x^{i} + n \sum\limits_{i=0}^{k} \begin{bmatrix}k\\i\end{bmatrix} x^i \\=\sum\limits_{i=0}^{k + 1}( \begin{bmatrix}k\\i-1\end{bmatrix} + k \begin{bmatrix}k\\i\end{bmatrix})x^i \\ = \sum\limits_{i = 0}^{k + 1} \begin{bmatrix}k+1\\i\end{bmatrix}x^i\)

第二类斯特林数

基础

  • 符号:\(\begin{Bmatrix}n\\m\end{Bmatrix}\)
  • 定义:把 \(n\) 个不同元素丢进 \(m\) 个相同盒子,无空盒的方案数
  • 递推:\(\begin{Bmatrix}n\\m\end{Bmatrix} = \begin{Bmatrix}n-1\\m-1\end{Bmatrix} + m \begin{Bmatrix}n-1\\m\end{Bmatrix}\)
  • 解释:考虑新加进来一个元素,第一种是单独建盒,方案数是 \(\begin{Bmatrix}n-1\\m-1\end{Bmatrix}\);第二种是在一个盒内放入,方案数是 \(m \begin{Bmatrix}n-1\\m\end{Bmatrix}\)

恒等式

  1. \(m^n = \sum\limits_{i =0}^{m}\begin{Bmatrix}n\\i\end{Bmatrix} m^{\underline i}\)
    \(m^n\) 就是有 \(n\) 个球,放在 \(m\) 个盒子里。考虑枚举放哪几个盒子,盒子是有顺序地放的。因此是 \(m^{\underline i}\); 然后在这些盒子里面放球,所以是 \(\begin{Bmatrix}n\\i\end{Bmatrix}\)

  2. \(\begin{Bmatrix}n\\m\end{Bmatrix} = \frac{1}{m!} \sum\limits_{i = 0}^{m} (-1)^{m - i} \binom{m}{i} i^n\)
    对原式二项式反演就行了。(后面会详细讲)

快速求斯特林数

P5395 第二类斯特林数·行

\(m^n = \sum\limits_{i =0}^{m}\begin{Bmatrix}n\\i\end{Bmatrix} m^{\underline i}\)
\(m^n = \sum\limits_{i =0}^{m}\begin{Bmatrix}n\\i\end{Bmatrix} \binom{m}{i} i!\)
\(F_i = i^n\)\(G_i = \begin{Bmatrix}n\\i\end{Bmatrix} i!\),那么

\[F_i = \sum\limits_{j = 0}^{i} F_i \binom{i}{j}\Leftrightarrow G_i = \sum\limits_{j = 0}^{i} F_i \binom{i}{j} (-1)^{i - j} \]

得到 \(\begin{Bmatrix}n\\m\end{Bmatrix} = \frac{1}{m!} \sum\limits_{i = 0}^{m} (-1)^{m - i} \binom{m}{i} i^n\)
这个东西把组合数拆开来就可以卷了。

P5408 第一类斯特林数·行

设第 \(n\) 行的式子是 \(S_n(x)\)。那么 \(S_n(x) = \sum\limits_{i = 0}^{n} \begin{bmatrix} n \\ i \end{bmatrix} x^i\)

看看第一类斯特林数的递推公式:\(\begin{bmatrix}n\\m\end{bmatrix} = \begin{bmatrix}n-1\\m-1\end{bmatrix} + (n-1) \begin{bmatrix}n-1\\m\end{bmatrix}\)

\(S_n = S_{n - 1} \times x + S_{n - 1} \times (n - 1) = (x + n - 1) S_{n - 1}\)

要算 \(\prod\limits_{i=1}^{n} (x+n-i)\) ,就是 \(x^{\overline {n}}\)。显然可以分治 + \(FFT\)。时间复杂度 \(\Theta(n \log ^2 n)\)

您会惊奇地发现您 \(\tt TLE\) 了,因为还有更优的做法。

是分治这件事在浪费时间,那么如果我们知道了左边( \(f(x)=x^{\overline n}\) ),能否就知道右边( \(f(x+n)=(x +n)^{\overline n}\)) 呢?

让左边多项式为 \(\sum\limits_{i=0}^{n} a_i x^i\)

\((x+n)^{\overline n} = \sum\limits_{i=0}^{n} a_i (x+n)^i\)
\(= \sum\limits_{i=0}^{n} a_i \sum\limits_{j=0}^{i} x^j n^{i-j} \binom{i}{j}\)
\(= \sum\limits_{j=0}^{n} \frac{1}{j!} x^j \sum\limits_{i = j}^{n} n^{i - j} a_i i! \frac{1}{(i - j)!}\)

发现很不方便,那么让 \(g_j = \sum\limits_{i = j}^{n} n^{i - j} a_i i! \frac{1}{(i - j)!}\)\(p_j = a_{n - j} \times (n-j)!\)

\(reverse\) 一下 \(g\),然后 \(g_x = \sum\limits_{i=n-x}^{n} n^{i -n+x} a_{i} i! \frac{1}{(i-n+x))!} = \sum\limits_{i=0}^{x} n^{i} a_{i + n - x} (i+n-x)! \frac{1}{i!} = \sum\limits_{i=0}^{x} n^i \frac{1}{i!} p_{x - i}\)

发现可以直接卷积得到右边。时间复杂度 \(\Theta (n \log n)\) 的。


其实直接生成函数也是可以推出来的

一个环排列的 EGF\(F(x) = \sum\limits_{i = 0} \begin{bmatrix}i\\1\end{bmatrix} \frac{x^i}{i!} = \sum\limits_{i = 0} \frac{x^i}{i} = - \ln (1 - x)\)

我们用二元 \(GF\) 对他生成集合( \(\exp(y F(x)) = \exp( - y \ln(1 - x)) = (1-x)^{-y}\) )

那么一行斯特林数的 OGF 就是

\([x^n] n! (1-x)^{-y} = n! \sum\limits_{i=0}^{-y} \binom{-y}{i} (-x)^{-y}\)
\(= (-1)^n n! \binom{-y}{n} = (-1)^n (-y)^{\underline {n}} = y^{\overline{n}}\)

P5396 第二类斯特林数·列

那么设第 \(m\) 列的式子是 \(S_m(x)\)。那么 \(S_m(x) = \sum\limits_{i = 0} \begin{Bmatrix}i\\m\end{Bmatrix} x^i\)

看看第二类斯特林数的递推式:\(\begin{Bmatrix}n\\m\end{Bmatrix} = \begin{Bmatrix}n-1\\m-1\end{Bmatrix} + m \begin{Bmatrix}n-1\\m\end{Bmatrix}\)

\(S_m(x) = \sum\limits_{i = 0} \begin{Bmatrix}i-1\\m-1\end{Bmatrix} x^i + m \sum\limits_{i = 0} \sum\limits_{i = 0} \begin{Bmatrix}i-1\\m\end{Bmatrix} x^i\)

\(S_m(x) = S_{m - 1}(x) x + m S_{m}(x) x\)

\((1 - mx) S_m(x) = S_{m - 1}(x) x\)

\(S_m(x) = \frac{x}{1 - mx} S_{m - 1}(x)\)

\(S_m(x) = \frac{x^m}{\prod\limits_{i = 1}^{m} (1 - ix)}\)

因此现在要求出 \(\prod\limits_{i=1}^{m} (1-ix)\)

这个分治 + \(FFT\) 算就是 \(\Theta(n \log^2 n)\) 的了。

您可能会很惊讶为什么这样就过了,而且跑得飞快。

小编也很惊讶,但是事实就是这样。

好吧这题也是有 \(\Theta(n \log n)\) 做法的。

可以利用计算 \(\prod\limits_{i=1}^{m} (1+ix)\) 来得到答案。

把系数翻转一下就变成了\(\prod\limits_{i=1}^{m} (i+x)\)

就是 \((x+1)^{\overline{m}}\)。按照第一类斯特林数·行的方法求出即可。

P5409 第一类斯特林数·列

一个环排列的 EGF\(F(x) = \sum\limits_{i = 0} \begin{bmatrix}i\\1\end{bmatrix} \frac{x^i}{i!} = \sum\limits_{i = 0} \frac{x^i}{i} = - \ln (1 - x)\)

\(k\) 个环连在一起就是 \(\sum\limits_{i = 0} \begin{bmatrix}i\\k\end{bmatrix} \frac{x^i}{i!} = \frac{ (- \ln(1 - x))^k }{k!}\)

要除以 \(k!\) 是因为 EGF 是有序的

所以答案的 EGF\(\frac{(- \ln(1 - x))^k}{k!}\)

例题

P4827 [国家集训队] Crash 的文明世界

这题有个非常显然的 \(n \log^2 n\) 的点分 + 卷积做法,可惜出题人不讲 wood,不给 NTT 模数,还把 \(k\) 开那么小。

既然这个 \(k\) 那么小,就把他拆成第二类斯特林数!

(设目前处理的节点为 \(now\))

记录 \(P_i\) 为和 \(now\) 距离为 \(i\) 的点数。

\(\sum\limits_{i = 1}^{n} P_i ^ k\)
\(= \sum\limits_{i = 1}^{n} \sum\limits_{j = 0}^{k} \begin{Bmatrix} k \\ j \end{Bmatrix} P_i ^ {\underline{j}}\)
\(= \sum\limits_{j = 0}^{k} j! \begin{Bmatrix} k \\ j \end{Bmatrix} \sum\limits_{i = 1}^{n} \binom{P_i}{j}\)

\(f_{now, i} = \sum\limits_{j = 1}^{n} \binom{dis(now, j)}{i}\),那么第 \(now\) 个点的答案是 \(\sum\limits_{i = 0}^{n} f(now, i) S_{k}^i i!\)

\(g_{now, i}\) 为子树的贡献和。这里主要是 把组合数拆开

\(g_{now, i} = \sum\limits_{v \in son_u} \sum\limits_{t is v's son} \binom{dis(t, i)}{i}\)
\(= \sum\limits_{v \in son_u} \sum\limits_{t is v's son} \binom{dis(v, i) + 1}{i}\)
\(= \sum\limits_{v \in son_u} \sum\limits_{t is v's son} \binom{dis(v, i)}{i} + \binom{dis(v, i)}{i - 1}\)
\(= \sum\limits_{v \in son_u} g_{v, i - 1} + g_{v, i}\)

考虑 \(f\) 怎么转移。差不多,就直接列式子了:\(f_{now, i} = g_{now, i} + (f_{fa, i} - g_{now, i - 1} - g_{now, i}) + (f_{fa, i - 1} - g_{now, i - 1} - g_{now, i - 2})\)

CF960G Bandit Blues

手模发现最大值位置非常特殊,把序列分成了两半,第一半要求前缀最大值,后一半要求后缀最大值。

我们枚举最大数的位置

然后变成要求 \(A - 1\) 个前缀最大值(后缀最大值同理)

从大往小填数,\(dp_{i, j}\) 表示填了 \(i\) 个数,有 \(j\) 个前缀最大值。

\(dp_{i, j} = dp_{i - 1, j - 1} + dp_{i - 1, j} \times (i - 1)\)

和第一类斯特林数的转移方程一模一样!!!!!!!!!!!!

于是直接用第一类斯特林数就好了

(可以理解为一个环我们钦定最大值作为第一个,那么一个前缀最大值 \(a\) 和到下一个前缀最大值 \(b\) 的区间内,\([a, b)\) 都属于 \(a\) 的环内。这样子,填了 \(n\) 个数,有 \(m\)个前缀最大值就相当于把 \(n\) 个数划分成 \(m\) 个环)

把数分配给两边,答案就是 \(\sum\limits_{i=0}^{n-1} \binom{n-1}{i} \begin{bmatrix} i \\ A-1 \end{bmatrix} \begin{bmatrix} n-i-1 \\ B-1 \end{bmatrix}\)

对这两个 \(A - 1\) 列和 \(B - 1\) 列做一遍 第一类斯特林数·列即可。

事实证明我 naive 了,这个东西是有组合意义的。把 \(n-1\) 个数分成 \(A+B-2\) 个环,然后取出 \(A-1\) 个作为左边的,那不就是上面的那个式子了吗?

因此答案是 \(\begin{bmatrix} n-1 \\ A+B-2 \end{bmatrix} \binom{A+B-2}{A-1}\)

P4609 [FJOI2016]建筑师 是同一道题,把斯特林数换成递推的就行了。

CF961G Partitions

法 1

对于一个数对大小为 \(S\) 的集合算贡献,得到大小为 \(S\) 的权值总和 \(\sum\limits_{i = 1}^{n} w_i \binom{n-1}{S-1}\)

剩下的要对剩余 \(n-S\) 的数划分成 \(k - 1\) 个集合,就是 \(\begin{Bmatrix} n-S \\ k-1\end{Bmatrix}\)。求一列第二类斯特林数即可。

\(all\) 是所有数的和,整个式子就是 \(all \times \sum\limits_{i = 1}^{n} \begin{Bmatrix} n-i \\ k-1\end{Bmatrix} \times i \times \binom{n - 1}{n - i}\)

但是这个出题人不讲 wood,不给 NTT 模数。

看起来不是很好推,就把斯特林数给拆开。

\(all \times \sum\limits_{i = 1}^{n} i \times \binom{n - 1}{i - 1} \frac{1}{(k-1)!} \sum\limits_{j = 0}^{k-1} (-1)^{k - 1 - j} \binom{k - 1}{j} j^{n - i}\)

\(\frac{all}{(k-1)!} \sum\limits_{j = 0}^{k-1} (-1)^{k - 1 - j} \binom{k - 1}{j} \sum\limits_{i = 1}^{n} i \times \binom{n - 1}{i - 1} j^{n - i}\)

蒟蒻推到这里就不会了啊,考虑 \(\sum\limits_{i = 1}^{n} i \times \binom{n - 1}{i - 1} j^{n - i}\) 怎么算。

\(\sum\limits_{i = 1}^{n} i \times \binom{n - 1}{i - 1} j^{n - i}\)
\(\sum\limits_{i = 1}^{n} \times \binom{n - 1}{i - 1} j^{n - i} + \sum\limits_{i = 1}^{n} (i-1) \times \binom{n - 1}{i - 1} j^{n - i}\)
对后面做吸收公式。
\(\sum\limits_{i = 1}^{n} \times \binom{n - 1}{i - 1} j^{n - i} + (n-1) \sum\limits_{i = 1}^{n} \times \binom{n - 2}{i - 2} j^{n - i}\)
\(\sum\limits_{i = 0}^{n-1} \times \binom{n - 1}{i} j^{n-(i+1)} + (n-1) \sum\limits_{i = 0}^{n-2} \times \binom{n - 2}{i} j^{n - (i+2)}\)
\((j+1)^{n-1} + (n-1) (j+1)^{n - 2}\)

于是答案就是 \(\frac{all}{(m-1)!}\sum\limits_{i = 0}^{m - 1} (-1)^{m - 1 - i} \binom{m-1}{i} ((1+i)^{n-1} + (n - 1) (1+i)^{n-2})\)

法2

考虑其组合意义。组合意义 yyds!

考虑 \(|S| \sum\limits_{x\in S} w_x\) 的组合意义。

可以理解为两个点可以配对当且仅当他们在同一个集合,贡献为两个结点的 \(w\) 值和。

那么现在直接考虑一个点的贡献,第一种是自己和自己匹配,贡献是 \(\begin{Bmatrix} n \\ k \end{Bmatrix}\)
第二种是和别的数匹配。可以把这两个点缩成一个点。贡献是 \((n-1) \begin{Bmatrix} n - 1 \\ k \end{Bmatrix}\)

于是答案就是 \((\sum\limits_{i=1}^{n} w_i) (\begin{Bmatrix} n \\ k \end{Bmatrix} + (n-1) \begin{Bmatrix} n - 1 \\ k \end{Bmatrix})\)

这个可以用第二类斯特林数的通项式快速做。

posted @ 2021-01-12 20:44  zhoukangyang  阅读(214)  评论(1)    收藏  举报