国家集训队论文:平衡规划
- 格式:doc
- 大小:258.00 KB
- 文档页数:27
优化,再优化!——从《鹰蛋》一题浅析对动态规划算法的优化安徽省芜湖市第一中学朱晨光目录Ø关键字 (2)Ø摘要 (2)Ø正文 (2)n引言 (2)n问题 (2)n分析 (3)u算法一 (3)u算法二 (4)u算法三 (4)u算法四 (6)u小结 (7)u算法五 (7)Ø总结 (10)Ø结束语 (11)关键字优化动态规划模型摘要本文就Ural 1223 《鹰蛋》这道题目介绍了五种性能各异的算法,并在此基础上总结了优化动态规划算法的本质思想及其一般方法。
全文可以分为四个部分。
第一部分引言,阐明优化动态规划算法的重要性;第二部分给出本文讨论的题目;第三部分详细讨论这道题目五种不同的动态规划算法,并阐述其中的优化思想;第四部分总结全文,再次说明对于动态规划进行优化的重要性,并分析优化动态规划的本质思想与一般方法。
正文引言在当今的信息学竞赛中,动态规划可以说是一种十分常用的算法。
它以其高效性受到大家的青睐。
然而,动态规划算法有时也会遇到时间复杂度过高的问题。
因此,要想真正用好用活动态规划,对于它的优化方法也是一定要掌握的。
优化动态规划的方法有许多,例如四边形不等式、斜率优化等。
但是这些方法只能对某些特定的动态规划算法进行优化,尚不具有普遍的意义。
本文将就《鹰蛋》这道题目做较为深入的分析,并从中探讨优化动态规划的本质思想与一般方法。
问题有一堆共M个鹰蛋,一位教授想研究这些鹰蛋的坚硬度E。
他是通过不断从一幢N层的楼上向下扔鹰蛋来确定E的。
当鹰蛋从第E层楼及以下楼层落下时是不会碎的,但从第(E+1)层楼及以上楼层向下落时会摔碎。
如果鹰蛋未摔碎,还可以继续使用;但如果鹰蛋全碎了却仍未确定E,这显然是一个失败的实验。
教授希望实验是成功的。
例如:若鹰蛋从第1层楼落下即摔碎,E=0;若鹰蛋从第N层楼落下仍未碎,E=N。
这里假设所有的鹰蛋都具有相同的坚硬度。
给定鹰蛋个数M与楼层数N。
体育教育中的平衡发展与长期规划体育教育在学生的综合教育中起着重要的作用,通过体育教育可以培养学生的身体素质、团队协作能力和竞争意识。
然而,在体育教育中,我们需要注重平衡发展与长期规划,以确保学生能够全面发展并持续受益。
首先,平衡发展是体育教育的核心之一。
体育教育不应只注重某一方面的训练,而是要注重全面的身体素质发展。
学生在体育教育中需要获得良好的身体协调能力、柔韧性、耐力和力量等方面的培养。
这就要求我们在体育教育课程中设计多样化的活动,包括有氧运动、力量训练、灵活性训练等,以确保学生能够全面发展。
其次,长期规划是体育教育的基础。
体育教育不应只设置零散的运动课程,而是应该有长期的规划和目标。
我们需要根据学生的年龄和发展阶段,制定相应的体育教育计划,逐步提高课程的难度和深度。
同时,长期规划还可以帮助学生制定个人的体育发展计划,从小培养他们的兴趣爱好并引导他们有意识地参与体育锻炼。
在体育教育中,平衡发展与长期规划的结合是至关重要的。
只有平衡的身体素质发展,并在长期规划下持续进行,才能使学生真正受益。
平衡发展可以防止学生过于专注于某一方面的发展,避免出现身体某些方面得到锻炼,而其他方面得不到锻炼的问题。
同时,在长期规划下进行体育教育,可以使学生的体育发展更具有连续性和稳定性,培养学生的毅力和坚持性。
如何在体育教育中实现平衡发展与长期规划呢?首先,学校和教师需要重视体育教育的重要性,并将其纳入学校的教育体系中。
学校应该为体育教育提供必要的资源和场地,同时为教师提供培训和指导,使其具备良好的体育教育教学能力。
其次,教师应该有计划地选择和设计体育教育课程,确保课程的多样性和全面性。
在选择课程内容时,教师可以根据学生的年龄和发展阶段,选择适合的活动和训练方法,以促进学生的全面发展。
同时,学校和教师应该与家长进行密切合作,让家长参与到体育教育过程中。
家长可以提供支持和鼓励,帮助学生建立正确的体育发展观念,并与学校一起制定学生的体育发展计划。
摘抄自C博客组合数学计数与统计2001 - 符文杰:《Pólya原理及其应用》2003 - 许智磊:《浅谈补集转化思想在统计问题中的应用》2007 - 周冬:《生成树的计数及其应用》2008 - 陈瑜希《Pólya计数法的应用》数位问题2009 - 高逸涵《数位计数问题解法研究》2009 - 刘聪《浅谈数位类统计问题》动态统计2004 - 薛矛:《解决动态统计问题的两把利刃》2007 - 余江伟:《如何解决动态统计问题》博弈2002 - 张一飞:《由感性认识到理性认识——透析一类搏弈游戏的解答过程》2007 - 王晓珂:《解析一类组合游戏》2009 - 曹钦翔《从“k倍动态减法游戏”出发探究一类组合游戏问题》2009 - 方展鹏《浅谈如何解决不平等博弈问题》2009 - 贾志豪《组合游戏略述——浅谈SG游戏的若干拓展及变形》母函数2009 - 毛杰明《母函数的性质及应用》拟阵2007 - 刘雨辰:《对拟阵的初步研究》线性规划2007 - 李宇骞:《浅谈信息学竞赛中的线性规划——简洁高效的单纯形法实现与应用》置换群2005 - 潘震皓:《置换群快速幂运算研究与探讨》问答交互2003 - 高正宇:《答案只有一个——浅谈问答式交互问题》猜数问题2003 - 张宁:《猜数问题的研究:<聪明的学生>一题的推广》2006 - 龙凡:《一类猜数问题的研究》数据结构数据结构2005 - 何林:《数据关系的简化》2006 - 朱晨光:《基本数据结构在信息学竞赛中的应用》2007 - 何森:《浅谈数据的合理组织》2008 - 曹钦翔《数据结构的提炼与压缩》结构联合2001 - 高寒蕊:《从圆桌问题谈数据结构的综合运用》2005 - 黄刚:《数据结构的联合》块状链表2005 - 蒋炎岩:《数据结构的联合——块状链表》2008 - 苏煜《对块状链表的一点研究》动态树2006 - 陈首元:《维护森林连通性——动态树》2007 - 袁昕颢:《动态树及其应用》左偏树2005 - 黄源河:《左偏树的特点及其应用》跳表2005 - 魏冉:《让算法的效率“跳起来”!——浅谈“跳跃表”的相关操作及其应用》2009 - 李骥扬《线段跳表——跳表的一个拓展》SBT2007 - 陈启峰:《Size Balance Tree》线段树2004 - 林涛:《线段树的应用》单调队列2006 - 汤泽:《浅析队列在一类单调性问题中的应用》哈希表2005 - 李羽修:《Hash函数的设计优化》2007 - 杨弋:《Hash在信息学竞赛中的一类应用》Splay2004 - 杨思雨:《伸展树的基本操作与应用》图论图论2005 - 任恺:《图论的基本思想及方法》模型建立2004 - 黄源河:《浅谈图论模型的建立与应用》2004 - 肖天:《“分层图思想”及其在信息学竞赛中的应用》网络流2001 - 江鹏:《从一道题目的解法试谈网络流的构造与算法》2002 - 金恺:《浅谈网络流算法的应用》2007 - 胡伯涛:《最小割模型在信息学竞赛中的应用》2007 - 王欣上:《浅谈基于分层思想的网络流算法》2008 - 周冬《两极相通——浅析最大—最小定理在信息学竞赛中的应用》最短路2006 - 余远铭:《最短路算法及其应用》2008 - 吕子鉷《浅谈最短径路问题中的分层思想》2009 - 姜碧野《SPFA算法的优化及应用》欧拉路2007 - 仇荣琦:《欧拉回路性质与应用探究》差分约束系统2006 - 冯威:《数与图的完美结合——浅析差分约束系统》平面图2003 - 刘才良:《平面图在信息学中的应用》2007 - 古楠:《平面嵌入》2-SAT2003 - 伍昱:《由对称性解2-SAT问题》最小生成树2004 - 吴景岳:《最小生成树算法及其应用》2004 - 汪汀:《最小生成树问题的拓展》二分图2005 - 王俊:《浅析二分图匹配在信息学竞赛中的应用》Voronoi图2006 - 王栋:《浅析平面Voronoi图的构造及应用》偶图2002 - 孙方成:《偶图的算法及应用》树树2002 - 周文超:《树结构在程序设计中的运用》2005 - 栗师:《树的乐园——一些与树有关的题目》路径问题2009 - 漆子超《分治算法在树的路径问题中的应用》最近公共祖先2007 - 郭华阳:《RMQ与LCA问题》划分问题2004 - 贝小辉:《浅析树的划分问题》数论欧几里得算法2009 - 金斌《欧几里得算法的应用》同余方程2003 - 姜尚仆:《模线性方程的应用——用数论方法解决整数问题》搜索搜索2001 - 骆骥:《由“汽车问题”浅谈深度搜索的一个方面——搜索对象与策略的重要性》2002 - 王知昆:《搜索顺序的选择》2005 - 汪汀:《参数搜索的应用》启发式2009 - 周而进《浅谈估价函数在信息学竞赛中的应用》优化2003 - 金恺:《探寻深度优先搜索中的优化技巧——从正方形剖分问题谈起》2003 - 刘一鸣:《一类搜索的优化思想——数据有序化》2006 - 黄晓愉:《深度优先搜索问题的优化技巧》背包问题2009 - 徐持衡《浅谈几类背包题》匹配2004 - 楼天城:《匹配算法在搜索问题中的巧用》概率概率2009 - 梅诗珂《信息学竞赛中概率问题求解初探》数学期望2009 - 汤可因《浅析竞赛中一类数学期望问题的解决方法》字符串字符串2003 - 周源:《浅析“最小表示法”思想在字符串循环同构问题中的应用》多串匹配2004 - 朱泽园:《多串匹配算法及其启示》2006 - 王赟:《Trie图的构建、活用与改进》2009 - 董华星《浅析字母树在信息学竞赛中的应用》后缀数组2004 - 许智磊:《后缀数组》2009 - 罗穗骞《后缀数组——处理字符串的有力工具》字符串匹配2003 - 饶向荣:《病毒的DNA———剖析一道字符匹配问题解析过程》2003 - 林希德:《求最大重复子串》动态规划动态规划2001 - 俞玮:《基本动态规划问题的扩展》2006 - 黄劲松:《贪婪的动态规划》2009 - 徐源盛《对一类动态规划问题的研究》状态压缩2008 - 陈丹琦《基于连通性状态压缩的动态规划问题》状态设计2008 - 刘弈《浅谈信息学中状态的合理设计与应用》树形DP2007 - 陈瑜希:《多角度思考创造性思维——运用树型动态规划解题的思路和方法探析》优化2001 - 毛子青:《动态规划算法的优化技巧》2003 - 项荣璟:《充分利用问题性质——例析动态规划的“个性化”优化》2004 - 朱晨光:《优化,再优化!——从《鹰蛋》一题浅析对动态规划算法的优化》2007 - 杨哲:《凸完全单调性的加强与应用》计算几何立体几何2003 - 陆可昱:《长方体体积并》2008 - 高亦陶《从立体几何问题看降低编程复杂度》计算几何思想2004 - 金恺:《极限法——解决几何最优化问题的捷径》2008 - 程芃祺《计算几何中的二分思想》2008 - 顾研《浅谈随机化思想在几何问题中的应用》圆2007 - 高逸涵:《与圆有关的离散化》半平面交2002 - 李澎煦:《半平面交的算法及其应用》2006 - 朱泽园:《半平面交的新算法及其实用价值》矩阵矩阵2008 - 俞华程《矩阵乘法在信息学中的应用》高斯消元2002 - 何江舟:《用高斯消元法解线性方程组》数学方法数学思想2002 - 何林:《猜想及其应用》2003 - 邵烜程:《数学思想助你一臂之力》数学归纳法2009 - 张昆玮《数学归纳法与解题之道》多项式2002 - 张家琳:《多项式乘法》数形结合2004 - 周源:《浅谈数形结合思想在信息学竞赛中的应用》黄金分割2005 - 杨思雨:《美,无处不在——浅谈“黄金分割”和信息学的联系》其他算法遗传算法2002 - 张宁:《遗传算法的特点及其应用》2005 - 钱自强:《关于遗传算法应用的分析与研究》信息论2003 - 侯启明:《信息论在信息学竞赛中的简单应用》染色与构造2002 - 杨旻旻:《构造法——解题的最短路径》2003 - 方奇:《染色法和构造法在棋盘上的应用》一类问题区间2008 - 周小博《浅谈信息学竞赛中的区间问题》序2005 - 龙凡:《序的应用》系2006 - 汪晔:《信息学中的参考系与坐标系》物理问题2008 - 方戈《浅析信息学竞赛中一类与物理有关的问题》编码与译码2008 - 周梦宇《码之道—浅谈信息学竞赛中的编码与译码问题》对策问题2002 - 骆骥:《浅析解“对策问题”的两种思路》优化算法优化2002 - 孙林春:《让我们做得更好——从解法谈程序优化》2004 - 胡伟栋:《减少冗余与算法优化》2005 - 杨弋:《从<小H的小屋>的解法谈算法的优化》2006 - 贾由:《由图论算法浅析算法优化》程序优化2006 - 周以苏:《论反汇编在时间常数优化中的应用》2009 - 骆可强《论程序底层优化的一些方法与技巧》语言C++2004 - 韩文弢:《论C++语言在信息学竞赛中的应用》策略策略2004 - 李锐喆:《细节——不可忽视的要素》2005 - 朱泽园:《回到起点——一种突破性思维》2006 - 陈启峰:《“约制、放宽”方法在解题中的应用》2006 - 李天翼:《从特殊情况考虑》2007 - 陈雪:《问题中的变与不变》2008 - 肖汉骏《例谈信息学竞赛分析中的“深”与“广”》倍增2005 - 朱晨光:《浅析倍增思想在信息学竞赛中的应用》二分2002 - 李睿:《二分法与统计问题》2002 - 许智磊:《二分,再二分!——从Mobiles(IOI2001)一题看多重二分》2005 - 杨俊:《二分策略在信息学竞赛中的应用》调整2006 - 唐文斌:《“调整”思想在信息学中的应用》随机化2007 - 刘家骅:《浅谈随机化在信息学竞赛中的应用》非完美算法2005 - 胡伟栋:《浅析非完美算法在信息学竞赛中的应用》2008 - 任一恒《非完美算法初探》提交答案题2003 - 雷环中:《结果提交类问题》守恒思想2004 - 何林:《信息学中守恒法的应用》极限法2003 - 王知昆:《浅谈用极大化思想解决最大子矩形问题》贪心2008 - 高逸涵《部分贪心思想在信息学竞赛中的应用》压缩法2005 - 周源:《压去冗余缩得精华——浅谈信息学竞赛中的“压缩法”》逆向思维2005 - 唐文斌:《正难则反——浅谈逆向思维在解题中的应用》穷举2004 - 鬲融:《浅谈特殊穷举思想的应用》目标转换2002 - 戴德承:《退一步海阔天空——“目标转化思想”的若干应用》2004 - 栗师:《转化目标在解题中的应用》类比2006 - 周戈林:《浅谈类比思想》分割与合并2006 - 俞鑫:《棋盘中的棋盘——浅谈棋盘的分割思想》2007 - 杨沐:《浅析信息学中的“分”与“合”》平衡思想2008 - 郑暾《平衡规划——浅析一类平衡思想的应用》。
关于平衡议论文(通用21篇)标题:平衡议论文文档模板范本前言:平衡议论文旨在通过对于争议问题的客观分析和探讨,提出平衡和谐的观点,达到解决问题的目的。
为了促进平衡议论文的撰写和理解,本文特提供最新最全的文档模板范本,供参考使用。
一、概述平衡议论文是一种讨论争议性话题并提供平衡观点的论文,通常涉及社会、政治、文化、科技等方面的话题。
平衡议论文不仅需要分析和概述争议问题的双方观点和证据,还需要提出能够平衡双方观点的方案或建议。
在撰写平衡议论文时,需要注意以客观、中立、逻辑、有说服力为原则,以合理、清晰、明确的表述为目标,尽可能排除情感化和偏见化的语言和论调。
二、模板范本(1)引言部分引言部分应概述本文所要讨论的争议问题,介绍相关背景和资料,指出本文的目的和意义,提出研究或讨论的问题,概述本文的结构和方法。
(2)争议问题部分争议问题部分应分别阐述争议问题的双方观点和证据,做到客观地评价双方论点的长处和短处,揭示双方论点的偏颇和缺陷,提出自己中立平衡的观点和证据,并提出解决问题的方案或建议。
(3)中立平衡观点部分中立平衡观点部分应详细阐述自己的观点和证据,并分别回应双方论点的批评和反驳,说明自己的论点和证据的合理性和优势性,更好地体现平衡议论文的特点。
(4)解决问题方案或建议部分解决问题方案或建议部分应结合自己的观点和证据,提出解决问题的方案或建议,同时适当地考虑双方利益和权益,达到平衡双方立场和解决问题的目的。
(5)总结部分总结部分应概括本文所要阐述的内容和结论,并提出进一步研究和讨论的方向和建议。
三、附件本文涉及的附件如下:(1)调研报告:详细记录和概括本文所讨论的争议问题的各方观点、证据和资料,为分析和解决问题提供基础和依据。
(2)调查问卷:对于争议问题的双方进行有针对性、客观而全面的调查,了解双方的态度、看法和情况。
(3)相关统计数据:收集有关争议问题的统计数据和分析报告,为作出中立平衡的观点提供支持和补充。
回到起点——一种突破性思维南京市外国语学校朱泽园[关键字] 起点类比分离集合森林[摘要]高层次的信息学竞赛已经不是单纯一个算法、一种数据结构间的较量,而是对思维方法、创新能力的考验。
本文旨在深刻剖析一种突破性思维——回到起点,亦即敢于放弃当前成果,回到初步分析处展开理性思考的可贵品质。
本文第一章提出一个已被经典算法解决的普通题。
第二章对这道题展开讨论,简述了经典的解决方案,而后模拟本文主线描绘的思维方式进行思考,提出一个被遗忘的简单算法,并进行优化和类比,精确计算复杂度后问题被完美解决。
第三章对本思维方式在两个例题中的应用作了对比和升华,辩证地以前进性和曲折性的统一阐述了这类思想的重要性。
§1 问题的提出§1.1 问题描述§1.2 问题的初步分析——离散化§1.3一个朴素的想法§2 问题的解决§2.1 经典算法§2.2 另类算法§2.3通过完整的路径压缩完善算法§2.4秩的建立§2.5 小结§3 总结§1 问题的提出§1.1 问题描述 [USACO 2.1 Shaping Regions改编]N个不同颜色的不透明长方形(1≤N≤3000)被放置在一张长宽分别为A、B 的白纸上。
这些长方形被放置时,保证了它们的边与白纸的边缘平行。
所有的长方形都放置在白纸内,所以我们会看到不同形状的各种颜色。
坐标系统的原点(0,0),设在这张白纸的左下角,而坐标轴则平行于纸边缘。
输入:第1行:A , B 和N, 由空格分开。
第2~N+1行:按照从下往上的顺序,每行输入的是一个长方形的放置。
为五个数llx, lly, urx, ury, color这是长方形的左下角坐标,右上角坐标和颜色。
其中color为整数。
0<=llx,urx<=A,0<=lly,ury<=B。
关于平衡议论文社会需要平衡,个人的情感与思想也需要平衡,平衡是既不偏激,也不畏缩了。
平衡体现了一个人理性情感的表达。
懂得平衡的人,能够感知周围事物的环境状态,有着强的调控能力。
如果社会,或者人失去了这种平衡,社会的体制会解体,人的精神会崩溃。
我想这种平衡应当是建立在人与人之间相互信任与理解的基础上的,而不是相互的恶性竞争与无节制的攻击上。
平衡是一个极大的命题,也许你一辈子浑浑噩噩,就是因为找不到某种生命的平衡,为人因这个或那个的原因,而一直有着不符合孔子所谓“中庸”的行为方式,大部分原因是他无法适应所处的环境。
由于连这本身所处的环境都无法适应的话,那么此人即使如何有过人的才智,也只能找上帝去表达去了。
人可以有一些不切实际的想法,但终究摆脱不了环境的束缚,如果拼命又不记后果的想要挣脱这种束缚的话,那就会打破这种平衡,伤害到整个环境的集体利益。
从更细致的地方讲,平衡也是一个人调整自我心态的过程,如果在心理的天平上有所偏倚,寻找平衡也就是寻找一条正确的道路,寻求一种最合适的方法。
人都是需要一个感情寄托的,也就是能有一个完全属于自己个人的世界可以毫无顾忌地使自己全身心地投入。
投入到忘却自己的地步,人在忘却一切的过程中也能达到一种平衡的状态。
其实归根结底,保持心态的平衡就是有相信的东西,而且这最好是被大家都认同的价值观念,而不是你自己独创的一套理念。
如果你是在强制别人接受你的这一套特殊的价值理念,那么你已经失去了情感上的平衡。
唯有平衡的心态能够承载万物,事物不偏不倚方能长久,若偏向一方,则立刻如大厦倾倒。
默默地在心里无限地重复告诉自己一些美好的事,也就远离了烦恼,远离了这些本不必要的外界的烦恼,我们也就离自己的本心更近了一步。
所以,在任何时候都要能很清晰、很清晰地告诉自己到底是喜欢什么,否则你会发现你很容易就会迷失方向。
一旦你又是无限将自己孤立之人,那么最终的结果是一切苦果都将自己来品尝,无人可怜。
维持平衡就要抱着不去打破一些为大家所认同的东西,如果要那么做,也要认为自己是正确的,或者需要有另外一些人来认同你,总之不能在情感上这样的单打独斗。
浅析信息学中的“分”与“合”福建省福州第三中学杨沐目录【摘要】..................................................................... 错误!未定义书签。
【关键字】................................................................. 错误!未定义书签。
【正文】..................................................................... 错误!未定义书签。
一、引言............................................................... 错误!未定义书签。
二、例题分析 ...................................................... 错误!未定义书签。
[例一]牛奶模版 ............................................ 错误!未定义书签。
[例二]树的重建 ............................................ 错误!未定义书签。
[例三]最优序列 ............................................ 错误!未定义书签。
三、总结............................................................... 错误!未定义书签。
【感谢】..................................................................... 错误!未定义书签。
【参考文献】............................................................. 错误!未定义书签。
线段树的应用广西柳铁一中林涛【摘要】在竞赛解题中,常遇到与区间有关的操作,比如统计若干矩形并的面积,记录一个区间的最值、总量,并在区间的插入、删除和修改中维护这些最值、总量。
线段树拥有良好的树形二分结构,能够高效的完成这些操作,本文将介绍线段树的各种操作以及一些推广。
本文通过3个例子:《蛇》、《空心长方体》、《战场统计系统》,讲述线段树中基本的插入、删除、查找操作,和不规则的修改和删除操作,以及到二维的推广。
关键字:线段树二分子树收缩叶子释放面积树【正文】1. 线段树的定义及特征定义1:线段树一棵二叉树,记为T (a,b),参数a,b表示该节点表示区间[a,b]。
区间的长度b-a记为L。
递归定义T[a,b]:若L>1 :[a, (a+b) div 2]为T的左儿子[(a+b) div 2,b]为T的右儿子。
若L=1 :T为一个叶子节点。
表示区间[1, 10]的线段树表示如下:(以下取对数后均向上取整)定理1:线段树把区间上的任意一条线段都分成不超过2log L条线段证明:(1)在区间(a,b)中,对于线段(c,d),如果(c<=a) 或(d>=b),那么线段在(a,b)中被分为不超过log(b-a)。
用归纳法证明,如果是单位区间,最多被分为一段,成立。
如果区间(a,b)的左儿子与右儿子成立,那么如果当c<=a时,1.若d<=(a+b)div2那么相当与其左儿子分该线段,所分该线段数树不超过log((a+b)div 2-a),即不超过log(b-a),成立。
2.若d>(a+b) div 2那么相当于该线段被分为它左儿子表示的线段,加上右儿子分该线段,线段数不超过1+log(b-(a+b) div 2),也不超过log(b-a),成立。
对于d>=b的情况证明类似,不再赘述。
(2)在区间(a,b)中,对于任意线段也用归纳法证明。
对于单位区间,最多分为一段,成立。
平衡规划——浅析一类平衡思想在信息学竞赛中的应用福建省福州市第八中学郑暾【目录】●摘要 2 ●关键字 2 ●正文 2◆引言 2◆应用平衡思想的几类问题 3●经典算法的非典型实现 3⏹例题一、警卫安排问题 3⏹例题二、Jackpot 6●效果优秀的非完美算法 8⏹例题三、追捕盗贼 8●复杂问题的简单化构造 12⏹例题四、数列维护 12⏹例题五、树的维护 14◆总结 17 ●感谢 18 ●参考文献 18 ●附录 18【摘要】应用计算机解题的核心是算法设计。
但算法设计方面涉及的领域十分丰富。
我们不能奢求能完美地应用所有的算法,所以我们关注的通常是如何合理运用已学知识,并在所掌握算法间构建一种平衡,在限定的时间内尽可能多地解决问题。
本文尝试讨论一类平衡思想应用于算法构造、算法实现的模式。
【关键字】平衡思想、平衡点、时空效率、编程复杂度【正文】一、引言平衡通常指物体或系统的一种状态。
处于平衡状态的物体或系统,除非受到外界的影响,它本身不会有任何自发的变化。
多种状态达到平衡通常是我们所追求的目标。
平衡思想是一种奇妙的思想,它的应用十分广泛。
在算法设计,数据结构设计甚至程序设计中都能发现它的身影。
计算机竞赛就是一场博弈,寻找这场博弈中的平衡点,合理应用平衡思想辅助算法设计与程序实现,往往能起到化腐朽为神奇的作用。
在信息学竞赛中,平衡思想通常有以下几个方面的运用:1、博弈问题。
有许多博弈类问题都可以转化成寻找平衡点的问题。
2、数据结构的构建。
每种数据结构都能以优秀的性能支持某些操作,合理选择应用数据结构,往往能通过略微提高一些操作的复杂度,降低大多数操作的复杂度,在不同操作的效率之间构建一种平衡,以达到优化的目的。
3、时间效率 vs 空间效率。
这类问题是我们经常遇到的问题。
这类问题通常有这样的特性,我们能找到时间效率(或空间效率)十分优秀的算法,但代价是空间效率(或时间效率)极端低下。
如何合理设计算法,组织数据,平衡二者的关系是解决这类问题的重点。
4、时空效率 vs 其他。
如果面对难题难以设计出优美的算法,又或者设计了优秀效率的算法,却无法实现或难以实现,就会出现非常尴尬的局面。
合理应用平衡规划解决这类问题,往往能收到意想不到的效果。
而这类问题也正是本文所要重点探讨的问题。
下文将试图论述运用平衡思想解决这类问题中的三种常见模式:经典算法的非典型实现,效果优秀的非完美算法,以及复杂问题的简单化构造。
二、应用平衡思想的几类问题1、经典算法的非典型实现。
大多数经典算法通常是为很多人所熟知,并且能够熟悉运用。
经典算法通常也有很多不同的实现方法。
例如拓扑排序,如果数据范围比较大,通常使用算法复杂度为O(n)的程序,但是如果范围比较小,一个不超过10行的)O的程序(2n可以使代码看起来更为简洁。
而不同的实现方法中,哪怕只是细微的不同,实现后的性能与效率也可能有很大的差别。
更进一步,有些算法虽然堪称经典,但是无论是思考复杂度还是实现复杂度都相对颇高,在考场上来说,使用一些相对简单实用的方法无疑是一种不错的选择。
例题一、警卫安排问题(ural 1099)题目描述:给定若干警卫间搭档关系,要求成对给警卫安排保卫工作,求能够安排警卫的最大值。
(警卫人数不超过222)初步分析:题目描述很简单,稍加分析后我们很容易看出来,这题的本质其实是要求我们求出任意图的最大匹配。
任意图的最大匹配的经典算法是应用带花匈牙利树,时间复杂度为)O,(3n对付这道题来说是绰绰有余的。
但是带花树本身比较复杂,思维复杂度与编程复杂度较高,而且实现起来很容易退化,考场上有限的时间内难以完成。
于是我们尝试考虑替代算法予以解决。
解法分析:3 4 52 1 6 7 8 图一 解决二分图最大匹配的时候,主要过程是不断寻找交错增广树来调整。
那么这么做对于任意图是否可行?答案是否定的。
考察右边这张图(图一)。
图中粗线表示当前状态下已匹配边,虚线表示未匹配边。
若我们当前找的增广树如图二所示,那么我们就无法找到一条增广路。
但实际上,存这样的一条增广路:876321→→→→→。
为了找到增广路,我们可以采用搜索的方法,但这样寻找增广路复杂度过高。
我们注意到,采用调整增广轨的方法,如果一个点之前已经被匹配到,则之后无论如何调整,这个点始终能被匹配到。
因此,对于一个待匹配点,是否能找到一条以它为起点的增广路是优化解的关键。
而是否能找到一棵增广树又很大程度上依赖于之前找寻的情况,若要设计数据使得无法找到增广树通常又依赖于特定的扩展顺序。
这启发我们采用随机扩展顺序的方法来尽量避免形成类似图一的特殊局面。
笔者的程序中生成了两个随机序列,一个作为点的初次访问序,一个作为点的拓展顺序,然后直接使用一开始所说的寻找交错树的方法来扩展。
同时,采用多次随机运行的方法提高最优解的出现概率。
但是作为随机贪心算法,除了拿到AC 之外,我们更应该关注这个程序通常的运行情况如何。
上述算法中,在ural 点数限制仅仅为222以下的情况下,通常运行次数却要设定为20至50才能基本上保证AC 。
相对于数据本身,这个运行次数还是比较大,说明算法本身具有比较大的不确定因素,以及出最优解概率并不是很高。
所以我们需要进一步优化以提高一次运行的最优解出现概率。
进一步优化上述解法中曾提到,采用调整增广轨的方法,如果一个点之前已经被匹配到,则之后无论如何调整,这个点始终能被匹配到。
它带来的另一个信息是,若一个点之前未被匹配到,那么在本轮搜索中,这个点最终将很可能保持未匹配的状态。
因此影响最终结果的,往往是某个本应该被匹配到的点因为之前增广树的查找失3 4 5 2 1 6 7 图二败而被放弃匹配。
初始算法解决这个问题的方法是全局重新搜索,所以常常出现为了一个点而全部重来的尴尬场面。
其实这是舍近求远。
我们完全可以换一个扩展顺序,对于当前未找到交错树从而无法匹配的点,直接重新搜索一棵交错树!当然大部分的图都无法实现完美匹配,所以类似运行次数的限制,我们需要设置一个失败次数上限。
当为一个未匹配点寻找匹配点时,只有失败次数超过了这个上限才放弃。
那么失败上限次数应该设置为多少比较好?进一步的,这个方法实现起来究竟效果如何呢?为此笔者进行了一系列的实验,得到了如下的实验数据表:运行次数-失败上限5-5 5-10 10-1 10-10 20-1 20-10 50-1 Accepted 90% 100% 0% 90% 60% 0% 100% Wrong answer 10% 0% 100% 10% 40% 0% 0% Time limit exceeded 0% 0% 0% 0% 0% 100% 0% 平均AC时间0.0761 0.1471 -- 0.2960 0.0385 -- 0.0795 实验的运行平台是Ural1099的测试,时限是0.5秒。
表头的N-M表示程序将重复运行N次,失败上限设置为M,例如5-5表示程序将重复运行5次,失败上限设置为5。
实验表明,这个方法能显著地提高一次运行的最优解出现概率。
从表中数据可以看出,初始算法直到20-1才有50%以上的AC率,而优化后的方法将失败上限设置为5就可以让仅仅重复运行5次的AC率达到了90%。
当然,这种方法同样存在一定的随机因素,加之Ural1099的数据比较强大(从数量到质量),所以出现了如表中5-10是100%AC但是10-10却只有90%的AC率的情况。
但正所谓有得必有失。
优化后的方法有着极高的准确率,但同时时间效率并不高。
实验中,5-5的时间已经逼近了50-1的时间。
虽然相对于时限来说还是比较轻松,但是其增长还是较可观的(20-10的全部超时就可以说明这一点)。
实际上,虽然理论上时间复杂度仅仅是多一个所设置的失败上限的常数,但由于将进一步优化中需要大量地使用了随机函数,而生成随机函数的常数比较大,造成了实际程序的常数较大,拖累了时间。
所以,两种算法都有其各自的优缺点,这就需要我们根据题目的给出的信息,根据实际算法的需求来进行选择。
进一步扩展:随机搜索序和设置失败上限的作用并不局限于此。
对于随机搜索序,表面上看是根据克制数据或克制情况的顺序依赖性1,应用随机的顺序来进行回避。
其实其本质是:通过设置一些随机权值,以改变一个当前状态的属性,从而回避特殊情况的生成(例如本题是回避克制数据的生成)。
我们常用的Treap ,随机快排(随机选择比较变量),其本质也是如此。
设置失败上限则是随机搜索序关于准确率的一个优化。
随机算法不可避免还是有可能无法得到我们理想的状态或结果(例如本题依然可能找不到存在的增广路,又例如Treap 并不完全平衡)。
随机搜索序通常是全局重新运行来提高最优解的出现概率,而设置失败上限则是通过对于局部问题的精益求精来强化全局目标情况出现概率,常见的应用有大素数的测试等。
小结:对于这道题,两种方法都可以比较轻松地通过。
考虑到数据范围并不大,为了追求准确率可以增加参数上限,或者为了保证时间效率压缩参数上限,这需要我们根据实际情况合理平衡二者之间的关系。
以准确率为代价我们得到了随机贪心算法,以时间复杂度为代价我们得到了准确率的进一步的优化,但不论是哪种方法,都能有效地降低了思维与编程复杂度,达到了二者之间的相对平衡。
例题二、Jackpot (PKU2103)题目描述:等概率选择任意整数,若其能被p1,p2,p3...pn 中至少一个数整除,那么称当前情况为胜利局面。
给定p1,p2,p3...pn ,(n<=16)求得到胜利局面的概率(用最简分数表示)。
初步分析:本题看起来十分复杂。
题目作为参考,给了一个比较复杂的计算概率的式子。
⎪⎭⎫ ⎝⎛+=∞→12lim k S P k k 其中P 表示最后结果的概率,k S 是 - k 到 k 之间至少能被给定的p 1,p 2...p n 其中一个数整除的个数。
但如果直接用这个式子比较复杂。
所以我们设计了下述算法代替。
注意题目 1 即特殊情况依赖于一定的顺序,例如本题是克制数据的生成依赖于一定的搜索顺序。
中涉及高精度计算,但本题时限卡的比较紧,如果用普通的高精度容易超时,巨大的常数无法忍受。
如何合理优化常数成为了解决问题的关键。
解法分析:本题其实是数学题。
题目等价于求取数区间为1~lcm(p1,p2,p3...)的时候的概率,但由于1 <= p i <= 109,使得最小公倍数可能很大,直接扫描显然不现实。
注意到给定的数最多只有16个,所以我们可以应用容斥原理求出区间中可以得到胜利局面的数的个数。
由于题目涉及了许多求gcd ,lcm 的高精度,一个小技巧是开一个素数列表,当前状态以纪录素数的次数的方式记录,最后再还原成原来的整数。
主算法的设计与实现并不困难。
所以在主算法相同的情况下,高精度算法的实现优劣就成了左右程序效率的关键。