首页 > 代码库 > 卡特兰数问题

卡特兰数问题

堆栈的出栈种数:

一般思路:

在这里堆栈有一个特点,对于任意一个数字,比之小的数字在其之前出栈,所以对于任意一个数字k最后一个出栈的模型为:

在k入栈之前,小于k的k-1个数字入栈并出栈,在k入栈之后,其余n-k个数字入栈并出栈,最后k出栈。so:

每一个k最后出栈的种数为:f(k)=f(k-1)*f(n-k)  然后求和即可。

建模:(与买票等等一个模型)

对于每一次进栈或者50块相当于数字‘1’,出栈或者100相当于数字‘0’,则要求对于2n个数组包含n个1,且任意前n个数字中1的个数比0的个数多,则通过算出所有排列,减去不合要求的种数即可:

合适:从2n个数字中选个n个位置放置1:C(2n,n)

不合适:对于奇数位2m+1,前2m+1位第一次出现0比1多,即m+1个0和m个1,(1.)则后面2n-2m-1个数字当中有n-m-1个0,以及n-m个1,(注意了)把1,0互换,则后面有n-m-1个1,以及n-m个0,则总体有n+1个0,和n-1个1,每个不合要求的排列对于一个由n+1个0,n-1个1对于的排列

对于任意一个由n+1个0以及n-1个1构成的2n个数字组成的任意一个排列都存在从第2m+1位开始第一次出现0比1多的现象,对于后面的n-m个0,与n-m-1个1互换,(变!)变成不合要求的的排列(n个1,n个0),总结:两者一一对应!

不合适的为:C(2n,n-1)

则:种类为f(n)=C(2n,n)-C(2n,n-1)  卡特兰数

卡特兰数问题