编程之美4.3扩展问题(卡特兰数)

2013.7.14修正

这里有个帖子对卡特兰数描述得比较详尽

http://blog.csdn.net/jtlyuan/article/details/7440591


编程之美4.3的题目讲的是买票找零问题,属于Catalan数的范畴,详细细节不表,书中自有。其中书后的扩展问题1、2、3都是卡特兰数的经典应用[1]。


卡特兰数原理:

h(0)=1;h(1)=1;当n>=2时,满足以下递归公式

h(n)=h(0)*h(n-1)+h(1)*h(n-2)+h(2)*h(n-3)+...+h(n-1)*h(0)

省略递推过程,最后的结果是

h(n) = c(2n,n)-c(2n,n-1)= c(2n,n)/(n+1);



1、给定n个结点可构造多少个不同的二叉树

这个比较明显了,设f(n)为n个结点可构造的不同二叉树。那选择第k个结点为根节点,则此种情况下f(n)=f(k-1)*f(n-k).所以所有情况下,f(n)=f(0)*f(n-1)+f(1)*f(n-2)+...+f(n-1)*f(0)

明显f(n) = h(n) = c(2n,n)/n+1

2、一个无穷大的栈,进栈次序为1,2,3,4,5...,它的出栈次序有多少种?

选择第一次出栈的数为k,然后方法同上了

3、凸多边形三角划分:求一个凸多边形区域划分为三角形区域的方法

稍微有些不一样,参看[1]

类似的问题

(1)一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果她从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?

(2)在圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?(同买票找零)

4、矩阵连乘问题:P=a1xa2xa3x...an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?

/*个人理解(似乎有点问题):设f(n)是n个矩阵相乘总括号方案数。每一种方案那我们取一种方案,取到第k个矩阵,从其左右分开相乘
这种方案的括号数是f(k-1)*f(n-k)。k可以从1取到n
因此f(n)=f(0)*f(n-1)+f(1)*f(n-2)+...+f(n-1)*f(0)
同上了*/



References

[1] 卡特兰数百度百科http://baike.baidu.com/view/2499752.htm?fromId=1163998

你可能感兴趣的:(编程之美4.3扩展问题(卡特兰数))