卡特兰(Catalan)数来源于卡特兰解决凸
n
+
2
n+2
n+2边形的剖分时得到的数列,在数学竞赛、信息学竞赛、组合数学、计算机编程等方面都会有其不同侧面的介绍.卡特兰问题的解决过程应用了大量的映射方法,堪称计数的映射方法的典范.为了便于读者理解,我们先介绍一些卡特兰问题的简单变形,再介绍卡特兰问题及其解法.
问题一 进出栈
栈是一种先进后出(FILO,First In Last Out)的数据结构.
那么一个足够大的栈的进栈序列为时有多少个不同的出栈序列?
首先,每一种进出栈的顺序都与出栈序列一一对应,如果我们用push
,用pop
表示进栈,表示出栈,那么出栈序列231对应的进出栈顺序
(push,push,pop,push,pop,pop)
那么对个n数的序列,总的进出栈序列有 c ( n , 2 n ) c(n,2n) c(n,2n)种。是这样吗?
答案是否定的,这是因为出栈的前提是有进栈动作,于是要求每个排列中的前若干项和均不为负数,也就是说排列
是无效的.
那么无效的排列到底有多少呢?