斯特林数学习笔记
注:本篇只为作者自己看懂,方便以后复习。
注意:如无特殊说明,以下公式的范围皆为 \(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)\) 的复杂度内求出两种斯特林数的某一行、某一列,总共四种算法。
我不会,摆了
标签:begin,end,bmatrix,斯特林,sum,笔记,学习,Bmatrix From: https://www.cnblogs.com/One-coder/p/17110839.html