直接开始
关于卡特兰数有三个公式
这里会解析一下第二个公式的含义
直接上公式
C n = C 2 n n − C 2 n n − 1 或者是 C n = C 2 n n − C 2 n n + 1 C_n = C_{2n}^n - C_{2n}^{n-1} 或者是 C_n = C_{2n}^n - C_{2n}^{n+1} Cn=C2nn−C2nn−1或者是Cn=C2nn−C2nn+1
解析
我们都知道使用卡特兰数的时候是在我们发现了问题符合一种数学模型的时候使用
即给定一个2进制数,前任意k个数字中0的个数一定大于等于1的个数,问这样的字符串有多少种
这时我们就能想到利用卡特兰数的规律,根据不同的数据范围,利用相应的公式完成题目
可是此时你可能用的不太安心,这个公式到底是怎么得到的呢?
这就不得不提起一个棋盘问题了
有一个n行n列的棋盘 , 我们要从左下角走到右上角,再不穿过主对角线的前提下,有多少种走法?
当然暴力枚举肯定是不现实的(卡特兰数的增长是很快的)
我们进一步剖析来看这个问题
棋盘问题解析
首先我们不难发现所有的走法大致分为三个部分
-
A : 不穿过对角线,且对角线以下的走法
-
B : 不穿过对角线,且对角线以上的走法
-
C : 穿过对角线的走法
那么根据题意进一步简化一共就两种走法
- X: 不穿过对角线,且对角线以下的走法
- Y: 部分或者是全部的路线在对角线以上的走法(这个就等于B + C)
接下来分析一下题意
我们要想走到终点,一定会走n次右,n次上
而且如果你不想穿过对角线,在任意一个点处,走右的次数一定大于等于走上的次数(这不很符合卡特兰数的定义嘛)
如果没有限制条件一共有多少种走法呢?
答 : C 2 n n C_{2n}^n C2nn
也就是从2n次行走次数中任意选择n次上或者是n次右就行
这是全部的走法,那么接下来怎么解决Y的走法呢?
这就要提到Andre‘s Reflection Method惊为天人的做法了
我们把穿过对角线以后的部分以新的对角线对称过去,你就会惊奇的发现,他们所有的终点都会是(n-1,n+1)
(这里借用《算法竞赛》下册的图片进行展示)
所以,那么这种情况就是 C 2 n n − 1 或者是 C 2 n n + 1 C_{2n}^{n-1} 或者是 C_{2n}^{n+1} C2nn−1或者是C2nn+1因为上n+1次或者是右n-1次,总数目减去就行了