卡特兰数的数学解释和分析

关于卡特兰数,我也是最近才接触到,是在一份笔试的代码题里,题目大致是这样的:

   16个人去饼店买饼,其中8个人身上有5块钱,8个人身上有10块钱,饼5块钱一个,老板一开始没有零钱可找,问有多少种方案可以让每个人都买到饼。


一开始我也没想到(毕竟高中数学学得烂),后来百度之后百度到一个关键字——卡特兰数;

卡特兰数的问题和上面的类似,最典型的就是出入栈的问题,对于一个容量为2n的栈,n个入栈,n个出栈,有多少种合法的方案。

一开始我在很多人的博客里都看到了卡特兰数的通项公式,或者直接给了公式,很少人讲数学推导过程,直到我看到了一个递归公式。


这里我们把入栈操作看做1,出栈看做0,即1的个数必须大于0.

总共2n次操作,n次入栈,n次出栈,所以可以得出,总的操作方案数即是C(2n,n).

我们把1和0平铺, 即变成11011100.。。0这样的数列。对于所有合法的方案,假设,在第k位,这时1的数量和0的数量相等,由此可以得出,在k位之前,1的数量应该大于0 的数量,并且在k位之后,1的数量也应该大于0的数量,这样才能构成一个合法的序列。

那么,一个总的合法序列就应该所以k的可能位置之和,并且k的位置是对称的。即我们可以对一个合法序列进行分开统计,分成k前后两部分,然后对这两部分再分 ,即进行一次次递归,直到最小单位为止,然后再把所有的相加。

那么次数可以写成f(2n) = f(0)*f(n-1)+f(1)*f(n-2)+....+f(n-2)*f(1)+f(n-1)*f(0) ;

其中f(1)=1;那么可以得出f(0)=1;

用程序递归之后即可解得总数。


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值