简单数学类问题及其数学构造方法_第1页
简单数学类问题及其数学构造方法_第2页
简单数学类问题及其数学构造方法_第3页
简单数学类问题及其数学构造方法_第4页
简单数学类问题及其数学构造方法_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数学类问题数学类问题 精度处理(高精度、实数处理) 组合数学问题(fibonacci数列、第二类数、卡特兰数、polya原理、排列组合计数、加法原理与乘法原理) 进制问题(特定二进制串的统计、二分查找、利用二进制进行路径、状态描述、二进制转换)数学类问题数学类问题 递推与递归关系(递推关系式、通项公式、数列、博弈问题) 数位、数字、特定数值的查找、统计(数值处理、质因子分解、幂次分解、数值表达式、添加运算符、分式与实数运算) 数学杂题(回文数字、矩阵处理、约瑟夫与反约瑟夫问题) 数学剪枝(无解判定、解线性方程组、限定搜索范围)数学类问题的思维过程 相关公式、定理、原理的应用 寻找规律、归纳整理

2、递归与递推关系式 按照数学方法构造、二进制转化等技巧性处理 注意事项: 规律准确(小数据手工推算、搜索程序验证) 数据类型是否合理、数据范围是否超界(大数据处理)整数划分问题(一)最优分解方案 将一个整数n分成若干个互不相同互不相同的数的和,使得这些数的乘积最大。其中1=n=1000。分析 初看此题,最容易相到的算法是搜索,但此题的最大可以达到1000,搜索肯定会超时,而本题所给的限制条件也不多,即便是加上一些剪枝也起不到很好的效果。一般遇到这种情况我们可以从简单的数据分析起。 在解一些问题的时候(特别是用数学方法解的问题),当我们无从解决时,可以从简单的数据考虑起,以便发现其中的一些规律,这

3、种作法对解题是很有帮助的。 n 分解方案 mul 5 2,3 6 6 2,4 8 7 3,4 12 8 3,5 15 9 2,3,4 24 10 2,3,5 30 观察这几组数据,不难发现所有的分解方案的数的个数都等于可以分出的最多个数最多个数,其实我们并不难想到,要想使乘积最大,应尽量使分得的数多。 另一方面,我们在初中数学中就已经证明过当数(正数)的和相等时,数的差越小,数的积也就越大,因此我们可以在分的数的个数最多的情况下使数之间的差尽量小差尽量小,这样得出来的方案必定是最优的。整数分划(二):若干个正整数之和为n,其中:n=1,j=1,2,,k,k=1 1=n1=n2=1,mn) 初始

4、(边界条件)为f(0,m)=1 (m0) 目标状态为f(n,n)。:极值问题(最高时限15s)已知m、n为整数,且满足下列两个条件: m、n1,2,k,(1k109) (n 2mnm2)21编一程序,由键盘输入k,求一组满足上述两个条件的m、n,并且使m2n2的值最大。例如,若k1995,则m987,n1597,则m、n满足条件,且可使m2n2的值最大。方法一方法一从初等数学的角度考虑:由条件(n 2mnm2)21得出:n 2mnm2 + 1 = 0n 2mnm21 = 0根据求根公式n1,2(m1,2)/2 n3,4(m1,2)/2其中:1sqrt(5*m24); 2sqrt(5*m24);

5、再考虑条件。由于n1,因此排除了n3和n4存在的可能性.又由于n和m是整数,因此1和2应为整数。由于m2n2单调递增,从mk出发,按递减方向将m值代入n的求根公式。只要1(或2)为整数、n1(或n2)为整数且小于k,则得出的一组m和n一定使 m2n2的值最大。算法描述算法描述 mk;while mi do begin 求1 if 1为整数 then begin 求n1; if (n1为整数) and (n1k) then begin 输出m和n1;halt; end end; then 求2; if 2为整数 then begin 求n2; if(n2为整数)and(n2k) then beg

6、in 输出m和n2; halt; end end;then mml; end;while上述算法从数学意义上来说,是一定可以出得出正确解的。但是该算法疏漏了一个重要条件 1k109 。如果k值超过105,上述算法不可能在限定的15秒内出解。方法二方法二分析小数据会发现:m,n是fibonacci数列的相邻两项。因为: (n 2mnm2)2 1故: ( m2 + mn n 2 )2 1又: m 2mnn2(mn)2mn2n2 (mn)2(mn)nn2 故: (m2mnn2)2(mn)2(mn)nn22 即: (n2mnm2)2(mn)2(mn)nn22由上述数学变换式可以得出,如果m和n为一组满

7、足条件和条件的解,设nmn,m n那么n,m 也是一组满足条件和条件的一组解。将所有满足条件和条件的m和n 按递增顺序排成一个fibomacci数列 1,1,2,3,5,8, 数列中小于k的最大两个相邻数即为试题所要求的一组m和n。算法算法:利用fibomacci数列顺推m,n,求出在条件范围内的m,n最大值,此时m2n2的值最大。:kathy函数函数(hncoi) tiger非常喜欢数学,所以他参加了学校组织的数学课外兴趣小组。在兴趣小组的学习当中,老师向tiger介绍了kathy函数,kathy函数是这样定义的:)(2) 12(3)34()() 12(2) 14()()2(3)3(1) 1

8、 (nfnfnfnfnfnfnfnfff:kathy函数函数(hncoi)tiger对kathy函数产生了浓厚的兴趣,他通过研究发现有很多的数n都满足f(n)=n,对于一个给定的数m,他希望你求出所有的满足f(n)=n (n=m)的自然数n的个数,其中m=10100。kathy函数满足其二进制数为回文数例:f(1)=1,f(3)=11,f(5)=101,f(7)=111组合计数catalan数定义:一个凸n边形通过不相交于n边形内部的对角线把n边形拆分成若干三角形的不同拆分数。分析 设cn表示凸n边形的拆分方案总数。由题目中的要求可知一个凸n边形的任意一条边都必然是一个三角形的一条边,边p1

9、pn也不例外,再根据“不在同一直线上的三点可以确定一个三角形”,只要在p2,p3,pn-1点中找一个点pk(1k=0的数列个数。 catalan数的应用(加括号) 序列a1a2.ak的元素顺序保持不变,按不同结合方式插入合法圆括号对的方案数。n=4(a(bc)d)(a(b(cd)(ab)(cd)(ab)c)d)(a(bc)d) 一个操作数序列,从一个操作数序列,从1,2,一直到,一直到n,栈,栈a的深度大于的深度大于n。现在可以进行两种操作:。现在可以进行两种操作:1将一个数,从操作数列的头端移至栈的头端(对应栈的将一个数,从操作数列的头端移至栈的头端(对应栈的push操作)操作)2将一个数,

10、从栈将一个数,从栈的头端移至输出序列的尾端(对应栈的的头端移至输出序列的尾端(对应栈的pop操作)。使用这两种操作,由一个操作数序列操作)。使用这两种操作,由一个操作数序列就可以得到一系列的输出序列,下表为由就可以得到一系列的输出序列,下表为由1 2 3 生成序列生成序列2 3 1 的过程。的过程。步骤0123456操作数序列1232333栈1211311输出序列2223231catalan数的应用(栈 noip2003)结合定义我们很容易能发现:如果进栈看成1,出栈看成0,在任何一位上累计的“0”的个数不大于累计的“1”的个数,因为必须在栈里有数的情况下才能向外弹数。原题转化为n个1和n个0

11、组成一个2n位的二进制数,要求从左到右扫描,“0”的累计数不大于“1”的累计数,求满足条件的数有多少。任务:你的程序将对给定的n,计算并输出由操作数序列1,2,n经过操作可能得到的输出序列总数。分析n个数,分别为1n,排成一个长度为n的排列。若每一个数的位置都与数的本身不相等,则称这个排列是一个错排。例如,n=3,则错排有231、312。编写程序,求n的错排个数。错排问题(经典问题)组合计数我们设k个元素的错位全排列的个数记做:w(k)。四个元素的错位排列w(4)我们用穷举法可以找到如下9个:(4,3,2,1)(3,4,1,2)(2,1,4,3)(4,1,2,3)(3,4,2,1)(3,1,4

12、,2)(4,3,1,2)(2,4,1,3)(2,3,4,1)它们有什么规律呢?分析通过反复的试验,我们发现事实上有两种方式产生错位排列:a.将k与(1,2,k1)的某一个数互换,其他k2个数进行错排,这样可以得到(k1)w(k-2)个错位排列。b.另一部分是将前k1个元素的每一个错位排列(有w(k-1)个)中的每一个数与k互换,这样可以得到剩下的(k1)w(k-1) 个错位排列。根据加法原理,我们得到求错位排列的递推公式w(k):w(k) = (k1) * w(k1)+w(k2)分析构造法 “构造法”解题,就是构造数学模型解决问题。包括直接构造问题解答的模型,图论模型,网络流模型以及组合数学模

13、型。 构造法解题的思路或步骤构造法解题的思路或步骤构造法解题的类型:构造法解题的类型:v直接构造问题解答直接构造问题解答。这只是构造法运用的一种简单类型。它只能针对问题本身,探索其独有性质,不具备可推广性。v数学建模。数学建模。通过沿用经典的数学思想建立起模型;或者提取现实世界中的有效信息,用简明的方式表达其规律,这种规律可以是一条代数公式、一幅几何图形,一个物理原理、一个化学方程式,等等。无论是直接构造问题解答还是构造数学模型,都要通过算法实现。如何设计一个有较低编程复杂度和时空复杂度且结构清晰的算法,十分重要。通常考虑的因素有v选择的模型必须尽量多地体现问题的本质特征。但这并不意味着模型越

14、复杂越好,累赘的信息会影响算法的效率。v模型的建立不是一个一蹴而就的过程,而是要经过反复地检验、修改,在实践中不断完善。v数学模型通常有严格的格式,但程序编写形式可不拘一格。利用数学方法进行构造例1:求fibonacci数列 定义:f0=f1=1,fn=fn-1+fn-2(n=2)。fi称为fibonacci数列。输入n,求fnmodq。其中1=q=30000。n=109【解题分析】简单的模拟显然不能满足题目的要求,我们考虑构造解答。定义矩阵0111为a,发现(x,y)a=(y,x+y),恰好与数列性质相似。于是有,有(1,1)a=(1,2),(fi,fi+1)a=(fi+1,fi+fi+1)

15、=(fi+1,fi+2),即(1,1)an=(fn,fn+1) 在(n)的时间内即可出解。二分的解决方式例题2: 毛毛虫是含n个节点的一棵树,它包含一条主链,所有点要么在链上,要么和主链上某点相邻。我们希望给毛毛虫的每个顶点标号1,2,3,n,使得所有边的两端节点标号差的绝对值恰好包含了1,2,3,n-1,每个数正好一次(n=10000)。815294863726358147 这个题目初看上去,似乎无从下手。由于题目中所给的这种特殊的树以及顶点标号的约束条件都是我们以前没有见到过的,再加上数据的规模很大,最大可以达到n=10000。使得我们不得不朝着贪心或者构造的方向去思考。首先观察样例,再进

16、行了一些尝试后,我们找到了对于样例的很多种合法的标号,其中有一种引起了我们的注意,如下图所示:19234876512345678 很容易发现,图中边的权值,也就是边的两端顶点标号差的绝对值,是从左向右依次递减的。这个发现使我们不由得想到,是不是对于所有的毛毛虫都存在一种这样的合法标号方式。 权值差值递减是可以的(对于所有)例题分析 一序列(见文本) 见sum解题报告利用图论模型进行构造例题3:圆桌吃饭问题 n个人围着一张圆桌吃饭,每个人都不愿意两天与同一人为邻,问最多能坐多少天,并给出一种排列方案?转化为图论模型 设g=(v,e)为一完全图,|v|=n。图中的每个顶点代表一个人,连结顶点的边表

17、示人之间的相邻关系。因此,每种围绕圆桌的吃饭方案就成为图中的一条哈密尔顿回路。设l=为g中的一条哈密尔顿回路,其中所含的边的集合记为e(l)。问题转化为: 求m与l1,l2,lm,使得e(li)e(lj)=, 并且m达到最大值。构造方法 作一圆,把圆周分成n-1等分,标上n-1个刻度,将顶点1至n-1依次排列在圆周上,顶点n放在圆心。先从圆心出发,向任意点连一条线,再从这点出发,沿圆周向左右两个方向迂回连线,直到连完圆周上所有的点,再连回圆心。这样就构造出一条哈密尔顿回路。保持所有的顶点位置不变,把所有连线围绕圆心逆时针方向旋转一个刻度,得到一条新的哈密尔顿回路。这样连续旋转(n-1)div

18、2次,就得到了(n-1)div 2条回路。 n=5当n=5时124536234516构造图象,充分展示各变量之间的关系构造图象,充分展示各变量之间的关系 【例二】01串问题(noi99) 给定n,l0,a0,b0,l1,a1,b1,设计一个长度为n的01串,使得对于任何连续的长度为l0的子串,0的个数大于等于a0,且小于等于b0,对于任何连续的长度为l1的子串,1的个数大于等于a1且小于b1。 【解题分析】模式1分析不等式设hi为01子串s0.si(1=i=n)中1的个数,其中s0=0,h0=0。显然,由hi的定义可以得出不等式0=hi-1=hi,hi=hi-1+1,移项即得: 0=hi-hi-1-1=hi-1-hil0-b0=l0时,根据条件,si-l0+1si中0的个数(l0-(hi-hi-l0)在a0b0之间,即a0=l0-(hi-hi-l0)=b0a0-l0=hi-l0-hi-b1=l1时,根据条件,si-l1+1si中1的个数(hi-hi-l1)在a1b1之间,即a1=hi-hi-l1=b1。a1=hi-hi-l1一旦有了h序列,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论