下降幂及斯特林数杂谈
定义
第一类斯特林数
给出定义:
通常把 \(c(n,k)\) 称为无标号第一类斯特林数,\(s(n,k)\) 称为有标号第一类斯特林数。
会发现容易推出递推公式:
而实际上 \(c(n,k)\) 也存在组合意义,即长度为 \(n\) 的排列中轮换个数为 \(k\) 的排列个数。
这是很容易从递推公式中推导出来的。
第二类斯特林数
记 \(S(n,k)\) 表示 \(n\) 个不同的元素分成 \(k\) 个互不区分的非空集合的方案数,称之为第二类斯特林数。
至于和斯特林数沾边的原因,则是因为有:
这里从组合的意义考虑可以从下式(其实也等于上式)出发:
考虑 \(x^n\) 的组合意义其实是对于一个长度为 \(n\) 的序列,每个位置上可以取 \(\{1,2,\cdots,x\}\) 时总共的序列数。
考虑序列中只包含 \(k\) 个不同的数,那么数集有 \({n\choose k}\) 种,而要把这 \(k\) 个互不相同的数填入 \(n\) 个不同的位置上,要求每个数至少出现一次,那么方案数有 \(k!S(n,k)\) 种。因此通过枚举 \(k\) 得到上式。
可以发现和第一类斯特林数有种对应的感觉,实际上它们之间的联系非常紧密。
由 \(S(n,k)\) 的组合意义可以轻易推导出它的递推公式:
另外很明显,从组合意义上来说第一类是包含了第二类,因此有 \(c(n,k)\ge S(n,k)\)。
性质
顺序与内容无关。
P-1 第二类斯特林数的通项公式
上式通过容斥得到。考虑组合意义,若我们把 \(n\) 个不同的元素放入 \(m\) 个互相区分的集合中,且允许存在空集,那么方案数为 \(m^n\),然后为了去掉空集而减去 \(m\) 个互相区分的集合中钦定存在某个空集的情况,这样容斥,最后得到上述的和式。除以 \(m!\) 就可以得到集合互不区分的情况。
P-2 上升/下降幂对素数 p 取模
上式中 \(p\) 为素数。证明非常巧妙。
考虑费马小定理,对于 \(x\in\{0,1,\cdots,p-1\}\) 有 \(x^p-x\equiv 0\mod p\)。
而 \(x^{\underline p}=x(x-1)(x-2)\cdots(x-p+1),x^{\bar p}=x(x+1)(x+2)\cdots (x+p-1)\),两者在 \(x\in\{0,1,\cdots,p-1\}\) 时均被 \(p\) 整除。
所以明显同余。
P-3 普通幂和下降幂的转换
这里在上文提到过,这里不过多介绍。
P-4 多项式的正常系数表示和上升/下降幂表示
对于多项式 \(f(x)=f_0+f_1x+f_2x^2+\cdots\),应该有唯一的 \(g\) 使得 \(f(x)=g_0x^{\underline 0}+g_1x^{\underline 1}+g_2x^{\underline 2}\cdots\)。考虑可以从 \(f(x)\) 的最高项开始分别除本次项的 \(x\) 的下降幂,发现会除出唯一的多项式。
而且也可以使用第二类斯特林数来求。
上升幂同理。
这里的唯一表示可以继续推广,记 \(h_x(i)\) 是关于 \(x\) 的恰好 \(i\) 次多项式,则任何多项式 \(f(x)\) 一定可以被唯一表示成:
基于除法很容易得到上述性质。
P-5 第一类和第二类斯特林数的联系
一件感觉很对的事是第一类斯特林数和第二类斯特林数各自构成的矩阵是互逆的。这是两类斯特林数定义的自然推论。
因为 \(\sum_j s(n,j)S(j,k)\) 实际上是求出了 \(x^{\underline n}\) 这一多项式中 \(x^{\underline k}\) 的系数,明显若 \(n\ne k\) 则为 \(0\),否则为 \(1\)。
反过来乘:
也是一样,是求 \(x^n\) 中 \(x^k\) 的系数。
P-6 反转公式
就是 P-5 中的两个式子。
P-7 下降幂-组合数的常用公式
应用
求某一行的第一类斯特林数
考虑可以分治或者多项式平移等等多项式手段求得 \(x^{\overline n}\) 或 \(x^{\underline n}\),时间复杂度 \(O(n\log_2 n)\)。
EX. 求某一行的一段连续的第一类斯特林数之和
要求模数 \(p\) 较小。
如果 \(n<p\),存在 \(O(p)\) 的做法:
使用下述公式:
而 \(f(g^l)\) 的求值可以很快地求出。
若 \(n\ge p\),则需要用到 P-2,具体参考 QOJ #1285.Stirling Number
求某一行的第二类斯特林数
套用 P-1 通项公式:
可以使用多项式乘法在 \(O(n\log_2 n)\) 时间复杂度内解决。
求某一列的第一类斯特林数
考虑求无标号的第一类斯特林数,因此考虑组合意义。
考虑环的指数生成函数为 \(f(x)=\sum_{j\ge 0} \frac{(j-1)!}{j!}x^j=\sum_{j\ge 0} \frac{1}{j}x^j=\ln (\frac{1}{1-x})\)。
因此要求恰好 \(k\) 个环,生成函数为 \(g(x)=\frac{f^k(x)}{k!}\)。
均为简单多项式操作,时间复杂度 \(O(n\log_2 n)\)。
求某一列的第二类斯特林数
考虑非空集合指数生成函数为 \(f(x)=e^x-1\)。
同理,要求恰好 \(k\) 个集合,生成函数为 \(g(x)=\frac{f^k(x)}{k!}\)。
可以做到 \(O(n\log_2 n)\)。
第二类斯特林数对幂次期望的妙用
因此考虑 \(E\left[{x\choose k}\right]\) 的组合意义即可。
当然,如果要继续代数方面的考虑,也可以使用:
然后另一方面有关于 \(x\) 整数取值的概率生成函数 \(g(x)\),则存在以下结论:
可以在某些时候派上用场。
通过点值快速得到多项式的下降幂幂级数形式
对于一个 \(m\) 次多项式 \(f\),已知 \(f(0),f(1),\cdots f(m)\),求 \(g_i\) 使得 \(f(x)=\sum_{k=0}^m g_k x^{\underline k}\)。
根据定义:
这是典型的卷积形式,因此有:
因此对应点值的指数生成函数 \(F_f(x)\equiv g(x) \mathrm e^x\mod x^{m+1}\)。
把 \(\mathrm e^x\) 移到另一边可以求出 \(g(x)\),反之也可以快速求点值。
斯特林反演
性质中的 P-5 已经提到了两类斯特林数的关系是在矩阵上互为逆矩阵,这点是斯特林数定义的自然推论。
而更进一步,有:
这点其实也是自然推论,但为什么说是更进一步,则是因为他们具有的相似性。
而在 P-5 中已经提到 \(\sum_i S(n,i)s(i,j)=\delta _{nj}\),因此有:
反之亦然。
而 \((1)(2)\) 式则是根据证明做的额外形式,但是本质都是一样的。
而另一方面,和许多反演一样,还存在另一种形式:
其实这个和上式是一样的,考虑:
而同样地,可以拆开 \(S(k,n)\) 得到下两式:
本质上还是来源于 \((3)\) 的变换,或者说是反转公式。
举一个最基础的例子,存在不同元素之间的二元等价关系 \(R\),我们需要求出 \(f(n)\) 表示有多少种长度为 \(n\) 的序列使得两两元素均不满足等价关系 \(R\)。
那可以记 \(g(n)\) 表示有多少种长度为 \(n\) 的序列,并不做其它限制。
而根据等价关系可以对序列的元素划分等价类,因此枚举 \(i\) 表示序列中的元素可以划分成 \(i\) 个等价类,则有:
然后进行反演,得到:
就可以进行计算了。
下降幂多项式加速二项式反演
对于 \(f(x)\) 和 \(F(x)\),设满足 \(f(n)=\sum_{m\le n} {n\choose m} F(m)\)。
则应该有:
我们可以通过 \(f(0),f(1),\cdots,f(n)\) 快速求出 \(F(0),F(1),\cdots, F(n)\) 的值。
因为 \(F(x)\) 在只考虑 \(x=0,1,\cdots,n\) 时等效于一个 \(n\) 次多项式,因此我们可以认为:
考虑 \((-1)^x F(x)\) 的下降幂多项式形式其实就是上式。
众所周知,对于多项式 \(g\):
注意第二个式子并非下降幂多项式形式,而是把下降幂多项式形式下的系数当作普通多项式形式下的系数进行卷积。那么让 \(g(x)=(-1)^x F(x)\)
而我们发现 \(g_m=\frac{(-1)^m f(m)}{m!}\)。所以直接普通多项式乘法就可以求出 \(g(0),g(1),\cdots,g(n)\),进而求出 \(F(0),F(1),\cdots,F(n)\)。
目前已知的应用:「2020-2021 集训队作业」Tour
本文作者:imcaigou
本文链接:https://www.cnblogs.com/imcaigou/p/18238793
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步