【卡塔兰数】假定有A,B,C,D依次进栈,进栈过程中允许出栈,写出所有可能的出栈序列

母题:N个数依次入栈,出栈顺序有多少种?

答案:Catalan number 卡塔兰数

Catalan number

常规分析

  1. 首先,我们设f(n)代表序列个数为n的出栈序列种数。
f(1) = 1     //即 1
f(2) = 2     //即 12、21
f(3) = 5     //即 123、132、213、321、231
  1. 第一个出栈的序数k将1~n的序列分成两个序列:其中一个是1 ~ k-1,序列个数为k-1;另外一个是k+1~n,序列个数是n-k。
1 2 3 4 5   6   7 8 9
1 2 3 4 5  //其中一个是1 ~ k-1,序列个数为k-1;   6-1=5
7 8 9        //另外一个是k+1~n,序列个数是n-k。   9-6=3
  1. 此时,我们若把k视为一个确定的序数,那么根据乘法原理,f(n)的问题就等价于序列个数为k-1的出栈序列种数乘以序列个数为n - k的出栈序列种数,即选择k这个序数的出栈组合为f(k-1)×f(n-k)。
f(4) = f(0)*f(3) + f(1)*f(2) + f(2) * f(1) + f(3)*f(0)  //f(0)=1, f(1)=1
  1. 而k可以选1到n,所以再根据加法原理,将k取不同值的序列种数相加,得到的总序列种数为:
f(n) = f(0)*f(n-1) + f(1)*f(n-2) + ... + f(n-1)*f(0)  //f(0)=1, f(1)=1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容