卡特兰数&斯特林数
卡特兰数
引入
不妨从找规律开始。
下标从\(0\)开始,卡特兰数的前几项为:
1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012,742900,2674440,9694845,35357670,129644790…
那么通过认真的瞪眼观察,会发现它们满足递推关系。
关于
卡特兰数是一个很常见的数列。它并没有一个足够具体的意义,但诸多问题中都出现了与之相符的数学规律。
比起组合数的用形式规范问题,它更像是用诸多例子来勾勒出的形式。
下面根据几个实际的问题模型来讨论卡特兰数。
通项公式
问题
- 给定\(n\times n\)的网格图。问,从左下角走到右上角,且不越过\(x=y\)对角线的方案数。
等价问题
-
\(n\)个左括号和\(n\)个右括号的括号匹配的方案数。
括号匹配:任意前缀中,左括号数量不小于右括号数量。 -
\(1\)到\(n\)依次入栈,可能的不同出栈序列数量。
-
\(n\)个无编号节点构成的区别左右儿子的有根二叉树数量。
-
\(2n+1\)个无编号节点构成的左右儿子有区别的有根真二叉树数量。
证明:因为懒得写了(其实是不会),所以推荐参考%%%sto这篇otz%%%
变形
递推公式
对于\(n \ge 2\),有:
问题
尤其是一些凸多边形问题
-
已知一个凸\(n\)边形,将其三角剖分,问可能的方案数。
-
已知一个凸\(n\)边形,在其顶点上插入钉子,在钉子间缠绕若干橡皮筋,问使橡皮筋不相交的方案数。
等价问题
-
\(n\)个无编号节点构成的区别左右儿子的有根二叉树数量。
-
用若干个矩形构成\(n\)级楼梯,且每个矩形的右下角都作为一级楼梯的组成,问可能的方案数。
证明
类似动态规划中的转移方程,略。
另一个递推公式
斯特林数
就是斯特林数。
第一类斯特林数
记作\(s(n,m)\),或者\({n}\brack{m}\)。
表示将\(n\)个不同元素划分为\(m\)个相同的非空轮换的方案数。
轮换:首尾相接的环形排列,例如\([A,B,C,D]=[B,C,D,A]\)。
性质
考虑等式左边表示排列数,右边表示轮换数。
一个排列可以唯一对应一个置换(也就是唯一对应一组轮换),故等式成立。
递推式
对于\(m>0\),有:
特别地,
- 当\(n>0\),则\({n\brack 0} = 0\);
- 当\(n=0\),则\({0\brack 0} = 0\)。
通过考虑第\(n\)个元素的状况来推导:
Case1:第\(n\)个元素为单独的一个轮换。
Case2:第\(n\)个元素加入前面某个轮换,此时有\(n-1\)种加入方式。
计算同行
构造出一行中斯特林数的生成函数。
也就是\(x\)的\(n\)次上升幂。
关于写这篇的时候,还不太会NTT,所以先放博客在这里,学会了回来补充细节,。
计算同列
类似求同行的办法,单个轮换的生成函数为:
第二类斯特林数
记作\(S(n,m)\),或者\(n\brace m\)。
表示将\(n\)个不同的元素划分为\(m\)个相同非空集的方案数。
性质
考虑等式左边表示\(m\)个不同元素放入\(n\)个不同集合
等式右边枚举非空集的数量为\(i\),再\(i!\)区分非空集,然后把\(m\)个元素放入\(i\)个“相同”非空集。
故等式成立。
递推式
特别地,
- 当\(n>0\),则\({n\brace 0} = 0\);
- 当\(n=0\),则\({0\brace 0} = 0\)。
类似第一类斯特林数的递推式推导:
考虑第\(n\)个元素是否单独为一个非空集合。
通项公式
也就是:
利用容斥原理。
枚举空集的数目\(i\),剩下的集合可以随意放置。
考虑到集合相同,最后要除\(m!\)。
本文来自博客园,作者:_kilo-meteor,转载请注明原文链接:https://www.cnblogs.com/meteor2008/p/17882189.html