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

posted @ 2023-07-05 19:09  new-code  阅读(86)  评论(0)    收藏  举报