[学习笔记] 斯特林数
- 1. 第一类斯特林数
- 1.1. 定义与递推式
- 1.2. 上升幂、下降幂转普通幂
- 1.3. 一些题目
- 2. 第二类斯特林数
- 2.1. 定义与递推式
- 2.2. 普通幂转上升幂、下降幂
- 3. 下降幂
- 3.1. 基础性质
- 3.1.1. 性质一
- 3.1.2. 性质二
- 3.1.3. 性质三
- 3.1. 基础性质
1. 第一类斯特林数
1.1. 定义与递推式
\(\text{s}(n,m)\) 表示将 \(n\) 个互异的数划分成 \(m\) 个无标号的圆排列的方案数("无标号" 也就是圆排列互不区分)。
\[\text{s}(n,m)=\text{s}(n-1,m-1)+(n-1)\cdot \text{s}(n-1,m) \]边界是 \(\text{s}(n,0)=[n=0]\).
注:对于每个圆排列,插入数字的方案就是其大小,所以系数是 \((n-1)\).
1.2. 上升幂、下降幂转普通幂
构造第 \(n\) 行第一类斯特林数的生成函数 \(F_n(x)=\sum_{i=0}^n \text{s}(n,i)\cdot x^i\). 那么有
\[F_n(x)=x\cdot F_{n-1}(x)+(n-1)\cdot F_{n-1}(x) \]所以从 \(F_0(x)=1\) 开始累乘可以得到 \(F_n(x)=\prod_{i=0}^{n-1}(x+i)=x^\overline n\),称为 \(x\) 的 \(n\) 次上升阶乘幂。
现在我们得到 \(x^\overline n=\sum_{i=0}^n \text{s}(n,i)\cdot x^i\),不妨代入 \(-x\) 得
\[(-x)^\overline n=\sum_{i=0}^n \text{s}(n,i)\cdot (-1)^i\cdot x^i \]由于 3.1.3. 性质三
,我们可以得到 \(x^\underline n=\sum_{i=0}^n (-1)^{n-i}\cdot \text{s}(n,i)\cdot x^i\).
1.3. 一些题目
例 1.
\(\text{HDU - 4372 Count the Buildings}\)
题目描述:有 \(n\) 栋楼,请问将其排列有多少种方案使得从左边看有 \(a\) 栋楼,从右边看有 \(b\) 栋楼。保证所有楼房高度 互不相同。
不妨先找到最高的那栋楼,它可以天然地将序列分成两个部分:左部能看到 \(a-1\) 栋楼,右部能看到 \(b-1\) 栋楼。
只考虑左部,发现每栋能看见的楼是单增的,我们把能看见的楼和它后面紧跟的不能被看见的楼看作一坨(这是为了不重不漏)。那么对于大小为 \(m\) 的坨,内部方案是 \((m-1)!\).
现在考虑将 \(n-1\) 个数分成 \(a-1+b-1\) 坨,再用组合数选择 \(a-1\) 个放在左部。问题是,怎么 "分坨"?这和大小有关啊!事实上,你会发现这个方案数就是第一类斯特林数,问题就解决了!
2. 第二类斯特林数
2.1. 定义与递推式
\(\text{S}(n,m)\) 表示将 \(n\) 个互异的数划分成 \(m\) 个无标号的非空集合的方案数。
\[\text{S}(n,m)=\text{S}(n-1,m-1)+m\cdot \text{S}(n-1,m) \]边界是 \(\text{S}(n,0)=[n=0]\).
2.2. 普通幂转上升幂、下降幂
观察 \(x^n\) 的组合意义:对于 \(n\) 个互异元素,将每个元素染成 \(x\) 种颜色中的一种的方案数。
我们还可以这样考虑:枚举最终染的颜色数 \(k\),在 \(x\) 种元素中选择 \(k\) 种,计算将 \(n\) 个元素划分成 \(k\) 个带标号 非空 集合的方案数。这个方案数实际上就是 \(\text{S}(n,k)\cdot k!\).
所以
\[x^n=\sum_{k=0}^{\min\{x,n\}}\binom{x}{k}\cdot k!\cdot \text{S}(n,k)=\sum_{k=0}^{\min\{x,n\}}x^{\underline k}\cdot \text{S}(n,k) \]事实上,我们可以把 \(\min\{x,n\}\) 的范围改写成 \(n\),因为当 \(k>x\) 时,下降幂为零。
普通幂转上升幂的操作和上面一毛一样(但是就不能用组合意义理解了,不过我也懒得再证明了),可以得到 \(x^n=\sum_{k=0}^n (-1)^{n-k}\cdot \text{S}(n,k)\cdot x^\overline k\).
3. 下降幂
3.1. 基础性质
3.1.1. 性质一
\[x^\underline n=\frac{x!}{(x-n)!} \]3.1.2. 性质二
\[\binom{n}{k}\cdot k^\underline m=\binom{n-m}{k-m}\cdot n^\underline m \]这个柿子有啥用处呢?一般情况下,\(n\) 为已知,\(k,m\) 都是枚举量,所以前面的柿子是妥妥的平方复杂度。但是如果进行转换,将 \(m\) 放在第一个循环枚举,此时 \(n^{\underline m}\) 就可以放在第一个循环,而组合数可以利用一些恒等变换快速计算。从而降低复杂度。当然,我从来没有实践过。
3.1.3. 性质三
\[(-x)^\overline n=(-1)^n\cdot x^{\underline n}\\ (-x)^\underline n=(-1)^n\cdot x^{\overline n} \]其它的东西可能就随缘更了,不知道还有没有机会。(别立 \(\rm flag\) 啊