关于卡特兰数的一点感悟

关于卡特兰数,有两种理解

第一种:可以理解为从任意一个地方卡一条线,两边的结果相乘。

第二种:有两种数字0,1,各有n个,进行排列,对任意前k个数字中,要求0的个数大于等于1的个数。

之前有一道面试题,说有2n个人排队,要求排成两排,每排从左到右身高依次增高,前后的两个人,后面的人比前面的高。问有多少种排列方式?

之前的想法一直是从2n中选n个放一排,剩下的放一排,但这有个问题,没法保证后面的人比前面的人高,也不知道怎么解决。

从卡特兰数理解为前排的人标记为0,后排的人标记为1。对这12个人进行标记,第i个0和第i个1进行配对,对任意前k个数,0的个数大于1的个数。这样即满足了每一排的人从高到低,也满足了后面的人比前面的高。想想怎么输出所有的序列。

变形问法:

1、如果是有n个0,m个1,(n>m),要求任意前k个数中0的个数大于1的个数?

     可以看作是n*m的矩阵,从(0,0)到(n,m)有多少种方案,如果第一步走(0,1),必然会经过对角线,如果第一步走(1,0),可能会经过对角线,可能不会,对于经过对角线的情况,和第一步走(0,1)可以形成一一映射,比如第一次经过的对角线是 (i,i),从(0,1)走到(i,i)必然有从(1,0)走到(i,i)的对称走法。所以结果是C(n+m,m) - 2*C(n+m-1, m-1)

2、把第一问的大于改成大于等于?

    可以变形成(n+1)*m的矩阵,依然是前k个数中0的个数大于1的个数的求法,这时候刚好可以经过n*m的对角线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值