




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、浅谈信息学中状态的合理设计与应用l在日常生活中,工作时间与工作数量、在日常生活中,工作时间与工作数量、单位效率的关系可以用下面的这个式子单位效率的关系可以用下面的这个式子来表达:来表达:l在信息学中,程序的运行时间是由两个在信息学中,程序的运行时间是由两个因素决定的,程序中所处理的状态的总因素决定的,程序中所处理的状态的总数目和处理每个状态所花费的时间。数目和处理每个状态所花费的时间。程序运行时间程序运行时间=状态总数状态总数*单位效率单位效率 l信息学中的状态总数有时隐藏着许多冗信息学中的状态总数有时隐藏着许多冗余状态。我们对状态的合理设计与应用余状态。我们对状态的合理设计与应用不仅能优化的
2、算法效率,还能够帮助编不仅能优化的算法效率,还能够帮助编程人员理清思路,降低思维难度。程人员理清思路,降低思维难度。例一 Square Root状态分析合理地分析状态数目例二 Banal Tickets状态优化对状态进行优化例三 Shoot Your Gun状态设计重新设计状态l定义边平行于坐标轴的简单多边形为定义边平行于坐标轴的简单多边形为矩形多边形。l已知在一个大的已知在一个大的矩形多边形M中有两个小的中有两个小的矩形多边形G和和T。G边上的任意一点可以向其左边上的任意一点可以向其左上、左下、右上、右下四个方向发射出射线。上、左下、右上、右下四个方向发射出射线。射线在遇到射线在遇到M的边时
3、会发生光的镜面反射。的边时会发生光的镜面反射。l求从求从G边上的任意一点发出一条射线到边上的任意一点发出一条射线到T所需所需要的最少反射次数。要的最少反射次数。l矩形多边形最多包含最多包含50条边,顶点坐标为整数条边,顶点坐标为整数在在0,4000之内。之内。下图左描绘出了一个例子,下图中描述了在特殊点时的反射规则。射线方向如下图右。l题目中题目中G边上的任意一点都可以发射出边上的任意一点都可以发射出射线。射线。枚举?l只需要处理整点和只需要处理整点和1/2点即可。点即可。l使用普通的状态表示法,将每个点发射出的4个方向分别做为4个点,进行构图并使用最短路算法进行求解。l这样的状态数是O(n2
4、)级别的,不能很好的解决此题。l题目条件:路线轨迹遵循光的传播路线 光是沿直线传播的,只有在遇到障碍物时才会发生反射 l只有发生反射时,路线方向才会发生改变。也就是说,只有在边上才可能使方向发生变化。如下图,图中加粗的边为射线的轨迹。l因此我们不妨将边上的点作为状态因此我们不妨将边上的点作为状态l使用使用spfa算法则可以满足题目时间和空算法则可以满足题目时间和空间的要求。间的要求。l用用spfa算法解决此题效果并不好。算法解决此题效果并不好。l光路是不会部分重叠的,要么完全不重光路是不会部分重叠的,要么完全不重叠,要么完全重叠。叠,要么完全重叠。l只需要枚举起点,然后每次遇到多边形只需要枚举
5、起点,然后每次遇到多边形的边的时候模拟反射,直到到达的边的时候模拟反射,直到到达T集合。集合。 l这样做之后,程序实现起来十分简单,这样做之后,程序实现起来十分简单,运行效率也很高。至此,我们很好地解运行效率也很高。至此,我们很好地解决了此题。决了此题。l对状态优化的方法是基于对状态的表示对状态优化的方法是基于对状态的表示和对题目条件的深入分析而设计的。和对题目条件的深入分析而设计的。 l在很多时候,对单位效率进行优化难以在很多时候,对单位效率进行优化难以奏效,对状态进行合理地优化与设计却奏效,对状态进行合理地优化与设计却能大显身手,取得良好的效果。能大显身手,取得良好的效果。l对状态进行合理
6、地分析及设计能帮助我对状态进行合理地分析及设计能帮助我们更好的理清头绪并设计出简洁的算法。们更好的理清头绪并设计出简洁的算法。谢谢 谢谢l若整数若整数x满足满足 x2 a (mod n),则称,则称x 是以是以n为为模时模时a的平方根,记的平方根,记root(a,n)为满足以上条件为满足以上条件的的x的集合。题目包含的集合。题目包含k个询问,每次询问给出个询问,每次询问给出a和和n,其中,其中n为质数,且为质数,且a与与n互质,要求出所互质,要求出所有在有在(0,n-1)区间内的区间内的root(a,n)。l数据范围数据范围1=a,n=32767,n为质数,为质数,a与与n互质互质1=k=10
7、0000l不难想到如下算法:不难想到如下算法:枚举枚举x,然后算出,然后算出value(x)=x2 mod n,如果如果value(x)等于等于a,那么就称这个,那么就称这个xRoot(a,n)。l每次枚举复杂度为每次枚举复杂度为O(N),总复杂度为,总复杂度为O(KN),因此这个算法是十分低效的。,因此这个算法是十分低效的。 重要条件n为质数,a与n互质如何利用?lK最多为最多为100000lN最多为最多为32767l根据鸽巢原理即可知根据鸽巢原理即可知N不同的询问最多只不同的询问最多只有有32767个。个。l事实上,由于事实上,由于n为质数,因此当为质数,因此当N为为32767时最多只有时
8、最多只有3500多个取值。多个取值。l我们在使用枚举法的时候,是对x进行枚举,然后判断x是否Root(a,n)。l仔细分析,不难发现,在求Root(a,n)的同时,我们可以顺便求出Root(m,n) (0=mn)l因此,我们可以在对询问进行分类后,对于因此,我们可以在对询问进行分类后,对于n相同的询问,花相同的询问,花O(N)的时间对第的时间对第1个询问进行个询问进行枚举,这样剩下的询问就可以用枚举,这样剩下的询问就可以用O(1)的时间得的时间得出结果了。出结果了。l时间复杂度变成时间复杂度变成O(prime(n)*n+klogk)l给定一个长度为给定一个长度为2n(n=18)的数字串,数字串
9、的数字串,数字串中有的位置的数字是已知的,以中有的位置的数字是已知的,以0,9的数字表的数字表示;有的位置的数字是未知的,以示;有的位置的数字是未知的,以?表示。表示。l当且仅当一个数字串满足以下条件时,称这个当且仅当一个数字串满足以下条件时,称这个数字串数字串interesting,否则为,否则为banal:l要求求出所有要求求出所有interesting串和所有串和所有banal串的串的个数。个数。 2 *11 nniins is il求求interesting串的个数和求串的个数和求banal串的个串的个数这两个问题是等价的,两者为互补关数这两个问题是等价的,两者为互补关系。这样,就可以
10、通过求其中的一个命系。这样,就可以通过求其中的一个命题,来直接得到另一命题的解。而求题,来直接得到另一命题的解。而求interesting串的个数明显比求串的个数明显比求banal串的串的个数简单,因此只考虑求个数简单,因此只考虑求interesting串串的个数的命题。的个数的命题。 l不难得出这样的一组方程:不难得出这样的一组方程:l边界条件边界条件当当 时时当当 时时10 , 0dp? is) 0mod(0) 0mod(, 1,isjisjisjidpjidp?is)9 , 0, 0mod(0)9 , 0, 0mod(, 1,lljlljljidpjidpldpi,j表示前表示前i位,乘
11、积为位,乘积为j时的方案数。时的方案数。设设dpa表示对前半部分进行动态规划所表示对前半部分进行动态规划所得出的结果,得出的结果,dpb表示后半部。表示后半部。则则interesting串的个数为:串的个数为:l其中,其中,m为最大的状态数。为最大的状态数。0 , * , midpa n idpb n il当当s每位都取每位都取9时,总乘积达到最大时,总乘积达到最大189 =150094635296999121天文数字!需要优化!l状态状态j只可能是只可能是0,9这这10个数的乘积,而个数的乘积,而这几个数字只包含这几个数字只包含2,3,5,7这这4个质数。个质数。l因此可以将状态改为因此可以
12、将状态改为dpi,a,b,c,d,表示,表示前前i位,乘积为位,乘积为2a3b5c7d的方案数。的方案数。l因为因为0无法用无法用2a3b5c7d表示,所以用表示,所以用2(-1)替代。替代。 l状态总数状态总数a最多为最多为3n(考虑全部数字为考虑全部数字为8的情况的情况),b最多为最多为2n(全部为全部为9),c最多为最多为n(全部为全部为5),d最多为最多为n(全部为全部为7)。当。当n=18时,状时,状态数目达到最大,为态数目达到最大,为2*3*2*184=1259712(使用滚动数组使用滚动数组)。l但是本题需要使用高精度计算,这种做但是本题需要使用高精度计算,这种做法并不能令人满意
13、。法并不能令人满意。l用用2a3b5c7d这样的状态表示仍然含有许多这样的状态表示仍然含有许多冗余状态!冗余状态!l例如,例如,23n32n5n7n这个状态就不可能出现,这个状态就不可能出现,因为因为23n就已经决定了就已经决定了n位数字全为位数字全为8,所,所以其他质数的个数不可能大于以其他质数的个数不可能大于0l我们可以使用我们可以使用hash,通过一个,通过一个BFS的过的过程,遍历出所有的可用状态,并建立一程,遍历出所有的可用状态,并建立一一对应的映射关系一对应的映射关系l经实践发现,对于极限状态,使用经实践发现,对于极限状态,使用hash可以将原来的可以将原来的62万左右的状态数减少到万左右的状态数减少到5万以下,这样我们就可以有效地剔除冗万以下,这样我们就可以有效地剔除冗余了。余了。图中从A点向右下方向发射的射线与方格的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中学学科教学模式计划
- 行业保安工作的经济效益分析计划
- 2025年电子型多功能电动机保护器项目合作计划书
- 学校班主任的心理健康教育计划
- 建立有效的库存预警机制计划
- 职位晋升中的秘书职业规划计划
- 和谐共处品德赞歌计划
- 三年级上册数学教案 六 平移、旋转和轴对称苏教版
- 肾血流动力检查相关知识
- 八年级语文下册 35《天目》教学实录 沪教版
- 临床护理实践指南2024版
- 2024年重庆市中考道德与法治试卷(AB合卷)附答案
- 拼音生字本模板
- 高中物理高频考点电磁感应中的双杆模型问题分析与强化训练附详细参考答案
- GB∕T 10544-2022 橡胶软管及软管组合件 油基或水基流体适用的钢丝缠绕增强外覆橡胶液压型 规范
- 建筑工程施工质量控制PPT课件
- 拉沙热预防控制技术指南、拉沙热诊断和治疗方案
- 半导体微电子专业词汇中英文对照
- 氢化物(蒸气)发生-原子荧光讲义
- 国家二字码大全--253个国家
- (完整版)螺旋钻孔灌注桩施工工艺
评论
0/150
提交评论