卡特兰数与折线法

问题举例:元素1,2,3,4,5,6,7入栈,有多少种出栈的可能性?

要点:卡特兰数,折线法

这个问题分三种类型问,都是一样的处理方法

 

 

 

解法

整个过程认为是从坐标(0,0)走到(2n,0),入栈记为向右上方移动单位长度,出栈记为向右下方移动单位长度。栈内必须要有元素,不能为负值,所以,曲线不能在X轴下方,这样才是合法的。

卡特兰数与折线法_第1张图片

那么我们要求的就是:合法步骤 = 全部步骤 - 非法步骤

 

那么全部步骤必须满足入栈次数等于出栈次数,即曲线能回到X轴上,到达(2n,0)。

如果不限制合法性,即可以跨越X轴,折线种数为C(2n,n)。

 

那么非法步骤就是跨越了X轴,最终还是到达了(2n,0)。那么我们可以发现,就算你跨过了X轴,如果将K点的折线之后根据y=-1做对称,那么折线必然终点是在(2n,-2)处,那么非法步骤就是到达(2n,-2)的数量。那么它需要满足的条件是出栈次数比入栈次数多2次,即入栈为n-1,那么出栈为n+1,折线种数为C(2n,n-1)。

卡特兰数与折线法_第2张图片

好了,所有步骤有了,非法步骤有了

合法步骤为C(2n,n)-C(2n,n-1) = C(2n,n)/(n+1)

当n=7时,次数为429次。

 

顺带补充一下基本知识

排列

排列,一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(Arrangement)。特别地,当m=n时,这个排列被称作全排列(Permutation)。

公式

 

组合

从m个不同元素中,任取n(n≤m)个元素并成一组,叫做从m个不同元素中取出n个元素的一个组合;从m个不同元素中取出n(n≤m)个元素的所有组合的个数,叫做从m个不同元素中取出n个元素的组合数。

公式

 

推荐一个网址:http://blog.sina.com.cn/s/blog_6917f47301010cno.html

你可能感兴趣的:(算法)