Catalan Numbers 是组合数学中一种应用很广的数学模型,今天又复习了一遍。
着重体会了Catalan Numbers的本质约束,求解推导过程,常见的符合Catalan Numbers的模型。
1,Catalan Numbers的本质约束
我觉得碰到一个模型要判别是否能用Catalan Numbers这种递推模型来求解,不能光记住那些常见的模型,虽然记忆有助于我们理解。我想了想Catalan Numbers最本质的约束,最终的得出了一个结论。那就是Catalan Numbers对应的模型一定与一个从1到n的自然数序列的入栈出栈序列同构(对应)。仔细思考一下出栈入栈序列的限制,可以分为以下几点:
a,入栈一定要在出栈前,且入栈时一定是从1-n的顺序。
b,入栈只能一次。
c,入栈后一定要出栈。即一定要匹配。
2,符合Catalan递推模型的解释
a, dyck word
模型叙述:Cn表示长度2n的dyck word的个数。Dyck word是一个有n个X和n个Y组成的字串,且所有的部分字串皆满足X的个数大于等于Y的个数。以下为长度为6的dyck words:
XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY
模型解释:把n个X看做1——n的自然数,Y看做#1——#n的序列,其中#i表示i出栈。例如XXXYYY,表示123#3#2#1。也就是X看做入栈,Y看做出栈即可。
b, 买票找零
模型叙述:有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外n人只有10元钞票,剧院无其它钞票,问有多少中方法使得只要有10元的人买票,售票处就有5元的钞票找零?
模型解释:将持5元者到达视作将5元入栈,持10元者到达视作使栈中某5元出栈
C,括号的合法性
模型叙述:给出n对括号(),问有多少种合法的组合。
模型解释:将左括号看做入栈,右括号看做出栈,即可。
d,二叉树的个数
模型叙述:问含有n+1个叶子的二叉树的个数。
模型解释:将左孩子看做左括号,右孩子看做右括号,这里指的孩子包括分支节点和叶子节点。然后先序遍历即对应C。 C(n)。
e,满二叉树的个数
同上。
f, 单调路径
模型叙述:查看图片http://en.wikipedia.org/wiki/File:Catalan_number_4x4_grid_example.svg
一个单调路径从格点左下角出发,在格点右上角结束,每一步均为向上或向右。计算这种路径的个数。
模型解释:将向右看做入栈,将向左看做出栈。
3,困惑
对于凸三角形划分和阶梯填充,我还是找不到很好的切入点,利用自己思考的这个结论来解释。不过我觉得这种结论对于一些浅显模型的解释还是很直白的,很容易发现的。
4,参考资料
维基百科:http://en.wikipedia.org/wiki/Catalan_number
百度百科:http://baike.baidu.com/view/2499752.htm
http://www.cppblog.com/MiYu/archive/2010/08/07/122573.html