您的位置:首页 > 编程语言 > Python开发

Python常用辅助安全测试6个代码例子

2010-05-17 19:43 429 查看
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
本文出自 “青禾” 博客,请务必保留此出处http://snowteng17.blog.51cto.com/1532294/410737
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: