一、关于卡特兰数
卡特兰数是一种经典的组合数,经常出现在各种计算中,其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...
二、卡特兰数的一般公式
卡特兰数满足以下公式:
<1>.h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2,h(0)=h(1)=1)。
<2>.h(n)=c(2n,n)-c(2n,n+1)(n=0,1,2,...)
<3>.h(n)=C(2n,n)/(n+1)。
也就是说,如果能把公式化成上面这种形式的数,就是卡特兰数。
三、卡特兰数的应用
1、进出栈问题
Q:一个足够大的栈的进栈序列为1,2,3,⋯,n时有多少个不同的出栈序列?
A:我们可以这样想,假设k是最后一个出栈的数。比k早进栈且早出栈的有k-1个数,一共有h(k-1)种方案。
比k晚进栈且早出栈的有n-k个数,一共有h(n-k)种方案。所以一共有h(k-1)*h(n-k)种方案。
显而易见,k取不同值时,产生的出栈序列是相互独立的,所以结果可以累加。
k的取值范围为1至n,所以结果就为h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0)。