• [学习笔记] 斯特林数


    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\)

  • 相关阅读:
    ZOJ 3631 Watashi's BG(dp+dfs)
    hdu 1506 Largest Rectangle in a Histogram(单调栈)
    csu 1392 Number Trick (数论)
    ACM 奋斗的小蜗牛
    ACM 16进制的简单运算
    ACM 交换输出
    ACM Longest Repeated Sequence
    ACM Arithmetic Expression
    ACM 素数
    ACM 无线网络覆盖
  • 原文地址:https://www.cnblogs.com/AWhiteWall/p/14418121.html
Copyright © 2020-2023  润新知