卡特兰数问题

卡特兰数问题

卡特兰数组:1,1,2,5,14,42,132 。。。。。。
公式:

f(n) =  f(0)*f(n-1) + f(1)*f(n-2) + ... + f(n-1)*f(0)
     =  C(2n,n) / (n+1)
     =  C(2n,n) - C(2n,n-1)
f(0)=1,
f(1)=1,
f(2)=2,
f(3)=5

问题一 出栈问题

已知进栈顺序ABCD,那么可能的出栈顺序多少种?
答案:f(4) = 14;
解析:
以A为最后一个出栈的元素时,A先进栈,然后将剩下的3个元素的出栈顺序看成子问题(求BCD的出栈顺序),故共有f(3) 种。
以B为最后一个出栈的元素时,B之前的元素先进栈然后出栈,只有1个A,共有f(1)种。然后将B之后的2个元素的出栈顺序看成子问题(求CD的出栈顺序),共有f(2)种。故共有f(1)*f(2) 种。
以C为最后一个出栈的元素时,C之前的元素先进栈然后出栈,有2个元素,共有f(2)种。然后将B之后的1个元素的出栈顺序看成子问题(求D的出栈顺序),共有f(1)种。故共有f(2)*f(1) 种。
以D为最后一个出栈的元素时,D之前的元素先进栈然后出栈,有3个元素,共有f(3)种。然后将D最后出栈。故共有f(3) 种。
总共

f(4) = f(3) + f(1)*f(2) + f(2)*f(1) +f(3)
     = f(0)*f(3) + f(1)*f(2) + f(2)*f(1) + f(3)*f(0)
     = C(2*4,4) / (4+1) 
     = 14

问题二 满二叉树的个数

求个(n+1)个叶子的满二叉树的个数
这里的满二叉树(full binary tree)是指除根节点外的节点要么有2个要么有0个节点·。有些教材把完美二叉树(perfect binary tree)叫做满二叉树。完美二叉树指所有内部节点都有两个子节点,且所有叶子节点深度相同。
答案:f(n)
(3+1)个叶子的满二叉树的个数 : f(3) = C(2*3,3)/(3+1) = 20/4 = 5
在这里插入图片描述

问题三 购票问题

电影票每50张元,如果有个人排队买票,其中个n人各持有100元面值的钞票张,另外个m人各持有50元面值的钞票张,而票房没有预备找零.有多少种方法可以将这个人排成一列,顺序购票?
答案:C(m+n,n) - C(m+n,n-1)
当m=n时,C(m+n,n) - C(m+n,n-1) = C(2n,n)/(n+1)

问题四 圆内连弦

圆周上有2n个点,以这些点为端点连互不相交的n条弦,求不同的连法总数
答案:C(2n,n)/(n+1)

问题五 凸多边形的剖分(卡特兰问题)

求凸(n+2)边形用其(n-1)条对角线分割为互不重叠的三角形的分法总数.
答案:C(2n,n)/(n+1)
凸6边形用其3条对角线分割为互不重叠的三角形的分法总数为f(4) = 14
卡特兰数问题_第1张图片

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