组合数学在程序设计中的应用.ppt
《组合数学在程序设计中的应用.ppt》由会员分享,可在线阅读,更多相关《组合数学在程序设计中的应用.ppt(16页珍藏版)》请在点石文库上搜索。
1、组合数学在程序设计中的应用,长沙市第一中学 曹利国,程序设计一直与数学联系得非常的紧密,特别是像组合数学这一分支,与程序设计有着千丝万缕的联系。对于某些题目,我们用正常的做法想法也许无从下手,但是如果我们把题目的全局或者局部与组合数学联系起来,或许就会“柳暗花明又一村”找到了一种特别独特,特别有效率的数学方法,把无从下手的棘手题变得简单易行。这就是组合数学在程序中的运用。 下面使用几个实例说明组合数学在程序中的运用。,引言,Catalan数,定义:一个凸n边形通过不相交于n边形内部的对角线把n边形拆分成若干三角形的不同拆分数。,分析,设Cn表示凸n边形的拆分方案总数。由题目中的要求可知一个凸n
2、边形的任意一条边都必然是一个三角形的一条边,边P1 Pn也不例外,再根据“不在同一直线上的三点可以确定一个三角形”,只要在P2,P3,Pn-1点中找一个点Pk(1kn),与P1、Pn 共同构成一个三角形的三个顶点,就将n边形分成了三个不相交的部分(如图3所示),我们分别称之为区域、区域、区域,其中区域必定是一个三角形,区域是一个凸k边形,区域是一个凸n-k+1边形,区域的拆分方案总数是Ck,区域的拆分方案数为Cn-k+1,故包含P1PkPn的n 边形的拆分方案数为CkCn-k+1种,而Pk可以是P2,P3,Pn-1种任一点,根据加法原理,凸n边形的三角拆分方案总数为, 同时考虑到计算的方便,约
3、定边界条件C2=1,=C( 2n , n ) / ( n + 1),具体实现时,若直接用上述公式计算,对数字的精度要求较高。可将其化为递归式,再进行递推计算,并且注意类型的定义要用comp型。,n个+1,n个-1构成2n项 a1,a2,a3,a4,a2n其部分和满足a1+a2+.ak (k=1,2,3,.2n)=0的数列个数。,序列a1a2.ak的元素顺序保持不变,按不同结合方式插入合法圆括号对的方案数。n=4(a(bc)d)(a(b(cd)(ab)(cd)(ab)c)d)(a(bc)d),一个操作数序列,从1,2,一直到n,栈A的深度大于n。现在可以进行两种操作:1 将一个数,从操作数列的头
4、端移至栈的头端(对应栈的push操作)2 将一个数,从栈的头端移至输出序列的尾端(对应栈的pop操作)。 使用这两种操作,由一个操作数序列就可以得到一系列的输出序列,下表为由1 2 3 生成序列2 3 1 的过程。,你的程序将对给定的n,计算并输出由操作数序列1,2,n经过操作可能得到的输出序列总数。,一 栈(Noip2003 普及组第三题),结合定义我们很容易能发现:如果进栈看成1,出栈看成0,在任何一位上累计的“0”的个数不大于累计的“1”的个数,因为必须在栈里有数的情况下才能向外弹数。,原题转化为n个1和n个0组成一个2n位的二进制数,要求从左到右扫描,“0”的累计数不大于“1”的累计数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 组合 数学 程序设计 中的 应用 利用 运用
