CSP初赛复习-03栈与卡特兰数
栈与卡特兰数
栈是数据结构中一种常用的结构。可以想象成一个没有盖的圆桶。只有两个操作:入栈和出栈。
概念:入栈、出栈、栈顶。入栈和出栈都是针对栈顶元素操作的。具体如下图:

1) 卡特兰数
明安图数,又称卡塔兰数,英文名Catalan number,是组合数学中一个常出现于各种计数问题中的数列。以中国蒙古族数学家明安图 (1692-1763)和比利时的数学家欧仁·查理·卡塔兰 (1814–1894)的名字来命名,
其前几项为(从第零项开始) : 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862
卡特兰数就是一个有规律的数列,在坐标图中可以表示为:从原点(0,0)出发,每次向x轴或者y轴正方向移动1个单位,直到到达(n,n)点,且在移动过程中不越过第一象限平分线的移动方案总数

2) 卡特兰数公式
-
\(H_n=C_{2n}^n- C_{2n}^{n-1}\)
-
\(H_n=C_{2n}^n/(n+1)\)
-
\(H_n=(4n+2)/(n+2) * H_{n-1}\) -递推
3) 卡特兰数公式推导
1 我们暂且先不考虑移动过程中不越过第一象限平分线这个约束条件,那么从(0,0)点到(n,n)点的过程中,我们总共需要向右移动n步,向上移动n步,一共2n步。我们可以理解为在2n步里面选出n步来向上移动,那么剩下的n步就是向右移动的步数,那么方案总数就是\(C_{2n}^n\)
2 我们来看看如何解决不越过第一象限平分线这个问题。仔细想想,不越过第一象限平分线也就等价于不触碰到y = x + 1 这条直线。而我们如果把触碰到了直线y = x + 1的路线的第一个与y = x + 1的触碰点之后的路线关于直线y = x + 1对称,并画出对称后的路线

3 我们会发现触碰到了直线y = x + 1 的路径的终点都变成了点(n-1,n+1)。也就是说,从(0,0)点到(n,n)点的路线当中触碰了直线y = x + 1 的路线条数与从(0,0)点到(n-1,n+1)点的路线条数的数量是相等的。于是从(0,0)点到(n,n)点的非法路径条数为\(C_{2n}^{n-1}\)
4 因此,从(0,0)点到(n,n)点满足条件的路径数为:\(C_{2n}^n\)- \(C_{2n}^{n-1}\)
4) 简化公式推导

5) 递推公式推导

例题
设栈S的初始状态为空,元素a, b, c, d, e 依次入栈,以下出栈序列有多少种可能( 42 )。
解析:
出栈可能性满足卡特兰数,可以使用如下公式:
\(C_{2n}^n/(n+1)\)
代入n=5,答案为42
CSP初赛复习-03栈与卡特兰数-练习题
https://www.cnblogs.com/myeln/articles/17529595.html
作者:newcode 更多资源请关注纽扣编程微信公众号

从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习

浙公网安备 33010602011771号