特殊的数
特殊的数
前言:
我之前是对每个特殊的数都各开一个博客的,但是这些数用生成函数的视角下看,似乎有一些关系,感觉分开写就太杂了,于是我把这些特殊的数整合到了一起。
卡特兰数
定义
\(Catalan\) 数列 \(H_n\) 是以下问题的方案数:
- 有一个大小为 \(n × n\) 的方格图,左下角为 \((0, 0)\) 右上角为 \((n, n)\),从左下角开始 每次都只能向右或者向上走一单位,不走到对角线 \(y = x\) 上方(但可以触碰) 的情况下到达右上角有多少可能的路径?
- 在圆上选择 \(2n\) 个点,将这些点成对连接起来使得所得到的 \(n\) 条线段不相交的 方法数?
- 一个栈的进栈序列为 \(1, 2, 3, · · · , n\) 有多少个不同的出栈序列?
- \(n\) 个结点可构造多少个不同的二叉树?
- \(n\) 对括号能组成的括号序列数?
- ......
这些问题的方案数可以证明是相等的。我们先以第一个命题来具体研究 \(Catalan\) 数

图片有点抽象还请各位海涵一下。
我们从(1,1)走到(n,n)的方案数可以递推来求。
设我们第一次接触到对角线时的横坐标为i,前面的方案数可看为从(2,1)走到(i,i-1)的方案数,后面的方案数可看为从(i,i)走到(n,n)的方案数。
对 \(i\) 求和有:\(H_n = \sum^{n}_{i=1}H_{i-1}H_{n-i}\),这就是卡特兰数的递推式。初值为 \(H_0 = 1\)。
我们还可以看为总方案数减去超过对角线(触碰到红线)的方案数。
我们对最后一次触碰到红线后的部分进行翻转,则原来的每一条不合法路径(如蓝色)就一一对应了一条终点为(n-1,n+1)的路径(如绿色)。
所以卡特兰数的组合意义是 \(H_n = {2n \choose n} - {2n \choose n-1}\)。
综上:
再看卡特兰数的第二个和第四个定义,可以发现它们的递推式与该递推式相同。对于第三个和第五个定义,可以认为就是在走网格,并且横向步数不超过纵向步数。
生成函数:\(\dfrac{H(x)-1}x =H^2(x) \Rightarrow H(x)=\dfrac{1-\sqrt{1-4x}}{2x}\)
可以推导出 \(\sum_n\dbinom {2n}n x^n = \sqrt{(1-4x)}\).
通项公式:\(H_n = \dfrac{\binom{2n}{n}}{n + 1}\)。这个使用递推公式的生成函数搞出来的,证明比较麻烦,这里不再赘述 。你也可以把该式子带入组合意义中来验证其正确性。
递推式2:\(H_n = \dfrac{H_{n - 1}(4n - 2)}{n + 1}\) ,这个可以直接带入验证。
因为上课讲的例题都没怎么听懂,这里就不放题了。
斯特林数
第二类斯特林数
定义 :
\(n \brace m\) 表示将n个有标号数放在m个非空无标号集合的方案数(注:斯特林数写作大括号)
递推式:
其组合意义是:把最后一个数单开一列 \({n - 1 \brace m - 1}\) 加上把最后一个数放入 \(m\) 个集合中的其中一个 \(m \times{n - 1 \brace m}\)
递推边界:${n\brace n} = {n \brace 1} = 1(n \ge 0) $, \({n \brace 0} = [n = 0]\)
还有其他一些特值: \(\ \begin{array}{l} \left\{\begin{matrix}n\\2\end{matrix}\right\}=2^{n - 1}-1(n>0), \left\{\begin{matrix}n\\n - 1\end{matrix}\right\}=\binom{n}{2} \end{array} \)
通项公式:
证明:设将 n 个有标号物品放到 k 个有标号盒子(允许空盒子)的方案数为 \(G_k\);将 n 个有标号物品放到 k 个有标号盒子(不允许空盒子)的方案数为 \(F_k\)
第二个式子表示从 n 个盒子选 i 个必须放物品,然后对 i 求和。
然后二项式反演,得到:
因为 \(F\) 的物品有标号,所以 :
带回去就得到:
题意 : 把\(1...n\)分割成若干个集合,集合之间有顺序,问所有不同的分割方法之中,集合个数的期望。
相当于求 \(\dfrac{\sum_i{n\brace i}i!i}{\sum_i{n\brace i}i!}\) .
对于分母:
对于分子:
分子分母取 n 次项系数后相除即可。
第一类斯特林数
定义:
\(n \brack m\):表示将 n 个元素排成 m 个轮换的方案数。也即所有 n! 个排列中,构成的置换有 m 个无标号环的排列数。
递推式:
其组合意义是:考虑最后一个元素,可以加入任意一个轮换并且可以插入任意一个位置,相当于可以任选一个数,插在其后面 \((n-1){n-1\brack m}\),也可以新开一个轮换 \({n-1\brack m-1}\)。
递推边界以及特殊值:
两种斯特林数的大小关系:
由定义和递推式容易看出 :\({n \brace m} \le {n \brack m}\)。当 m 等于 n,n-1,0 时等号成立。
定理
我们知道一个有 n 个元素的排列和一个 n 个元素的置换一一对应,于是对所有置换 中的轮换个数求和,我们有:
斯特林数与三种幂(很重要!)
先复习一下上升幂,下降幂:
下降幂
\(n^{\underline{m}}=n(n - 1)(n - 2)\cdots(n - m + 1)\)
上升幂
\(n^{\overline{m}}=n(n + 1)(n + 2)\cdots(n + m - 1)\)
相关结论
- \(n^{\overline{m}}=(n + m - 1)^{\underline{m}}\),用于处理上升幂
- \(n^{\underline{m}}=(n - m + 1)^{\underline{m}}\),用于处理 \(n < 0\) 情况
- \(x^{\underline{n}}=(-1)^{n}(-x)^{\overline{n}}\),用于上升下降幂的转换
- \(\binom{n}{m}=\frac{n^{\underline{m}}}{m!}\)
上升下降幂与普通幂的转换
注意到,上升幂和下降幂本质上也是多项式,所以一个多项式也可以用上升幂和下降幂来表示。
他们的关系如下:
可以简记为第二类斯特林数对应下降幂,第一类斯特林数对应上升幂
因为下降幂的组合意义比上升幂更好,所以更常用第一个式子来转换普通幂
对于第一个式子,考虑组合意义证明:
\(x^n\) 表示 x 个有标号盒子放 n 个有标号球的方案数,盒子可以为空。
现在枚举非空盒子数 i,先从 x 个盒子里面选 i 个盒子,\(\dbinom xi\),
然后发现第二类斯特林数的定义是把 n 个球放入 i 个无标号盒子的方案数,
注意到这里的盒子是有标号的,所以 \({n\brace i}i!\) 就是有标号球放到有标号盒子的数量,所以:(个人感觉这里和第二类斯特林的通项公式证明几乎一致)
当然也可以使用数学归纳法证明第一个式子:
首先观察到:\(x^{\underline{k + 1}}=x^{\underline{k}}(x - k)\Longrightarrow x\cdot x^{\underline{k}}=x^{\underline{k + 1}}+kx^{\underline{k}}\)。
那么:
第二个式子也可以用数学归纳法证明:
不过这次的观察是 : \((x+n-1) \cdot x^{k}=x^{k+1}+(n-1) x^{k}\)
观察到,注意到上升幂和下降幂的多项式展开后,系数是有交错的符号,比如:
形式化的表示为:
由
和
得到:
用 \(-x\) 替换 \(x\),然后合并 \(-1\) 的系数后易得:
推论 : \(\sum\limits_{i=0}^ni^k=\sum\limits_{j=0}^m\begin{Bmatrix}k \\ j\end{Bmatrix}*j!*\dbinom{n+1}{j+1}\) (设\(0^0=1\))
左边 \(=\sum\limits_{i=0}^n\sum\limits_{j=0}^m\begin{Bmatrix}k \\ j\end{Bmatrix}*j!*\dbinom{i}{j}\)
\(=\sum\limits_{j=0}^m\begin{Bmatrix}k \\ j\end{Bmatrix}*j!*\sum\limits_{i=0}^n\dbinom{i}{j}\)
\(=\sum\limits_{j=0}^m\begin{Bmatrix}k \\ j\end{Bmatrix}*j!*\dbinom{n+1}{j+1}\)
反转公式
由上总结,我们能感受到两类斯特林数密不可分的关系,接下来我们就来探究它们的关系。
我们把普通幂转上升幂再转普通幂得:
把 \(\sum_{k = j}^{n}(-1)^{n-k}\left\{\begin{matrix}n\\k\end{matrix}\right\}{k\brack j}\) 作为 \(x^j\)的系数,只有 \(j = n\) 时右边的系数为1,其余的系数为0。
所以得到第一个反转公式:
同理我们把普通幂转下降幂再转普通幂得:
斯特林反转
带入用反转公式可以验证。
总结一下:
上升下降幂的互相转换: \(n^{\overline{m}}=(n + m - 1)^{\underline{m}}\) 和 \(x^{\underline{n}}=(-1)^{n}(-x)^{\overline{n}}\)
普通幂转下降幂:\(x^n=\sum_{k = 0}^{n}\left\{\begin{matrix}n\\k\end{matrix}\right\}x^{\underline{k}}\)
下降幂转普通幂(由斯特林反演得):\(x^{\underline n} = \sum^n_{k=0}(-1)^{n-k}{n\brack k}x^k\)
上升幂转普通幂:\(x^{\overline n} = \sum^n_{k=0}{n\brack k}x^k\)
普通幂转上升幂(由斯特林反演得):\(x^n=\sum_{k = 0}^{n}(-1)^{n-k}\left\{\begin{matrix}n\\k\end{matrix}\right\}x^{\overline{k}}\)
斯特林数与生成函数
第一类斯特林数的二元生成函数:
这里盒子无标号,数字有标号,所以是 x 的 EGF,y 的 OGF。
证明:
主要思路是先得到只有一个置换环时的的生成函数,然后用 exp 的惊天组合意义得到 y 行的生成函数。
一个环排列的 EGF 为 \(F(x)=\sum\limits_{i=0}\begin{bmatrix}i\\1 \end{bmatrix}\dfrac{x^i}{i!}=\sum\limits_{i=1}\dfrac{x^i}{i}=-\ln(1-x)\) 。
现在要把圆排列组合成置换,由于用 \(y\) 的次数来记录环的个数,因为现在之统计单个环,只有 \(y = 1\) 时有系数,所以单个环排列的生成函数变为 \(yF(x)\)。
根据 exp 的组合意义,置换的生成函数即为 \(\exp\big(yF(x)\big)=\exp\big(-y\ln(1-x)\big)=(1-x)^{-y}\)。
第一类斯特林一行的生成函数
也就是固定上指标,求下指标的生成函数。所以要取 \(n![x^n]\) ,得到的是关于盒子的 OGF:
这相当于证明了之前我们用数学归纳法凑出来的式子:\(x^\overline n=\sum {n\brack i}x^i\),上升幂转普通幂。
如果要求 \(y^\overline n\) 的系数,可以使用分治 FFT \(O(n\log^2n)\),也可以使用多项式平移 \(O(n\log n)\). 详见这里
第一类斯特林一列的生成函数
也就是盒子(置换环)数固定,小球数不定的方案数,得到的时关于球的 EGF。这里要提取 \(y^n\) 项系数,而 y 在指数上,所以可以转化成 exp 的形式
第二类斯特林数的二元生成函数
小球有标号,用 EGF,盒子无标号,用 OGF。
推导:只有一个无标号非空盒子方案的生成函数:\(\sum_{i=1} \dfrac{x^i}{i!} = e^x-1\).
然后因为 y 是盒子数,一个盒子的时候是 \(y(e^x-1)\) ,又根据 exp 惊天组合意义,得到最终的答案:
补充
高阶差分与第二类斯特林数有奇妙的性质:
伯努利数
我们可用有限积分求自然数下降幂的和,结果发现自然数普通幂的和我们居然还不会求?
我们定义 S:
可以发现这可以表示为 \(m + 1\) 次的多项式,可以拉差出它的系数,发现它的系数似乎很有规律。
假设 \(B(x) = \dfrac x{e^x - 1}\),用 \(B_i\) 表示 \(i![x^i]B(x)\) 则有:
序列 B 就是伯努利数,然后 \(B(x)\) 被称为伯努利数的 EGF。
推论:\(\sum_i^m \dbinom{m+1}iB_i =[m = 0]\).其实就是带入 \(n = 1\) 即可得到。不过没有用。
小小变化一下式子还可以得到:
给一个生成函数的证明:
为了方便使用生成函数,定义 \(F_n(x) = \sum\limits_{i}(\sum\limits_c^{n-1}c^i)\dfrac{x^i}{i!}\),则有 \(S_m(n)=m![x^m]F_n(x) = \sum\limits_{i=0}^{n-1} i^m\),继续推导 \(F\) 的式子:
其实如果只求自然数幂的和的话到这一步就可以了,但是为了装逼证明前面那个式子的正确性,还可以继续推导:
令 \(B(x) = \dfrac x{e^x-1},G(x)=\dfrac {e^{nx}-1}x\),则 \(F_n(x)=B(x)G(x)\).
所以有:
这里的 \(B[k-i]\) 表示 \(x^{k-i}B(x)\).
这玩意最大的用处就是 k 很小 n 很大的时候可以把求和上界从 n 变成 k,还有一个用是把枚举上界从 n - 1 改为 k + 1,方便推式子。不过话说这玩意如果只求一个数的话可以直接拉差,如果要求多个数的话可以多项式多点求值。综上所述,学这玩意大概率八辈子都用不到。
总结:自然数 k 次方和问题 \(f_k(n)=\sum_{i=0}^{n-1}i^k\)
当 k 足够小(比如 1,2,3,4 这种小常数)的时候,可以暴力把普通幂拆成下降幂,然后用有限积分做。例如 \(x^2=x^\underline 2 + x^\underline 1\).
如果 k 不能当成常数,但是 n 远大于 k 时,那么可以推一下式子得到 \(f_k(n)=\sum_{j=0}^k\dfrac{k\brace j}{j+1}n^\underline{j+1}\),可以花 \(O(k\log k)\) 的时间预处理出一行的斯特林数,然后 \(O(k)\) 地得到一个 \(f_k(n)\),聪明一点的会发现上式可以当成 n 的 k + 1 次多项式,可以拉差出 f 的第 n 项。还更快。
如果需要求出多个甚至每一个 k 时的答案,可以考虑用伯努利数,或者直接莽一个多项式多点求值,不过前者是但 log,后者是双 log
小推一下式子可以得到 f 在 k 上的 EGF 是 \(\dfrac{e^{nx} - 1}{e^{x}-1}\),取 \(k![x^k]\) 即可得到答案。
如果 k 固定,对不同的 n 求这个东西,那么显然有 \(f_k(n)=f_k(n-1)+(n-1)^k\),如果 n 连续并且从 0 开始,直接递推就可以了,如果 n 连续但是不从 0 开始,可以先拉差出第一项。如果 n 不连续应该可以多项式多点求值,不过我没试过,理论可行。
欧拉数
这个更是没用
定义 \(\left\langle\begin{matrix}n\\k\end{matrix}\right\rangle\) 为有 \(k\) 个升高的,长度为 \(n\) 的排列的个数。其中“升高”定义为让 \(p_i<p_{i+1}\) 成立的 \((p_i,p_{i+1})\)。
递推式:
解释:不妨从小到大地插入数字。考虑最后插入的数,如果插到一个升高的中间,原本的升高没了,但是又多一个升高,总个数还是不变 \(k\left\langle\begin{matrix}n-1\\k\end{matrix}\right\rangle\)。如果插入到最开始的位置,升高肯定不变 \(\left\langle\begin{matrix}n-1\\k\end{matrix}\right\rangle\)。因为最后插入的数字最大,所以插入到其他地方一定升高加 1 \((n-k)\left\langle\begin{matrix}n-1\\k-1\end{matrix}\right\rangle\)。加起来就是原式。
推导欧拉数·行的生成函数
这里有个模板题:P5825 排列计数 - 洛谷。
设 \(g(k)\) 表示长度为 n 的排列恰好 k 个升高的方案数,也就是答案 \(\left\langle\begin{matrix}n\\k\end{matrix}\right\rangle\) ,\(f(k)\) 表示长度为 n 钦定 \(k\) 个升高的方案数,容易得到:
考虑这么搞 f。
我们把连续的上升叫做一个 "段",现在相当于求钦定了 \(n-i\) 个段的方案数。
先考虑只有一个段,个数到方案的函数是 \(P(n)= [n\neq 0]\).思考该用 OGF 还是 EGF。
如果有两个段,那么方案数 \(P'(n)=\sum \dbinom niP(i)P(n-i)\),这里要乘上一个分配数的方案 \(\dbinom ni\) ,所以其组合意义是 EGF。
容易得到 P 的 EGF 是 \(e^x-1\),那么 k 个段的 EGF 就是 \((e^x-1)^k\),然后再取 n 次项系数得到:
(注意:欧拉数没有要求内部是连续的,所以有一个选数的过程,肯定会乘上一个归并的系数,要用 EGF,而之前的 queue2 要求内部连续,这里 的组合意义是有序拼接,所以只用在最后乘上一个外部排列方案数,用 OGF。)
然后带入 g 得到:
最后一步范德蒙德卷积的范围可以仔细推一下,可以发现在后面表达式在 \(i< max(k,j)\) 时,值都是零。
把组合数拆了,然后设 \(f(j)=j^n,g(k+j)=(-1)^{n-k-j}\dbinom {n+1}{k+j+1}\),然后做差卷积就行了。
欧拉数还满足如下恒等式 :
欧拉数的二元生成函数为 :
分拆数
定义:记 \(P_n\) 为将 n 拆分成若干个若干无序正整数的和的方案数。
如 \(3\) 可以拆分成 \(1+1+1\) 或 \(1+2\) (和 \(2+1\) 视为同种方案)或 \(3\)。于是 \(P_3=3\)。
可以发现,分拆数本质上是所有种类的质量的物品都有的完全背包方案数,于是按照背包套路能写出它的 OGF:
然后 ln,exp:
发现后面暴力求解的复杂度是调和级数,再套一个 exp 板子即可。
五边形数定理
用处1. 在没有 ntt 模数时,而且你有懒得写 mtt 时,但是你要求分拆数时,并且时间有比较充裕够根号的复杂度时,而且时间又不太充裕不能暴力时用。
用处2. 在每个数的使用次数有统一上界时用。例如上界为 k 时有 : $$P(x)=\prod_{k=1}\sum_{i=0}{K-1}x=\prod_{k=1}\dfrac{1-x{kK}}{1-xk}$$。
对于刚才式子分母的展开后发现:
然后合理猜测发现:
证明过于鬼畜,我不会。然后上面的等式叫做五边形数定理,名字来于 x 的次数为五边形套娃后合法点数构成的递推式拓展到整数后的数列。、
Ferrers 图(又称杨表)
在分拆数的基础上,要求拆分出来的数不超过 m 个。
有一个非常人类智慧的做法,就是对于每个正确的方案,用柱状图来表示,例如:
拆分 \(1+1+2+4+5\) 的 Ferrers 图如下所示 :
然后竖着看这个图(也就是把原来的一列当成一排):
然后非常神奇的事情发生了!你发现惊奇地问题变成统计每个数都小于 m,但是不限制拆分的数的个数时的方案数!而且仔细想一下发现这甚至是意义对应的的!然后就可以快乐地转化问题了。
这只是做一个改了一下上界的分拆数,外重循环的上界是 m ,即:\(\exp \sum_{k=1}^m\sum_{i=1}\frac {x^{ki}}i\) 复杂度显然还是 \(O(n\log n)\).
神秘结论:对于 \(n\) 的分拆, 各个分拆方案中出现至少 \(k\) 次的数的个数和,等于所有方案中 \(k\) 出现的总次数。证不来,根本证不来!

浙公网安备 33010602011771号