论文--减少冗余与算法优化

论文--减少冗余与算法优化

ID:39993021

大小:522.50 KB

页数:10页

时间:2019-07-16

论文--减少冗余与算法优化_第1页
论文--减少冗余与算法优化_第2页
论文--减少冗余与算法优化_第3页
论文--减少冗余与算法优化_第4页
论文--减少冗余与算法优化_第5页
资源描述:

《论文--减少冗余与算法优化》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、减少冗余算法优化减少冗余与算法优化【摘要】在信息学竞赛中,我们经常会遇到冗余,而冗余会造成算法、程序的效率不同程度的降低:有的是微不足道的,而有的会导致算法复杂度大大提高。本文针对后者,举例说明冗余对算法效率的影响和如何减少冗余。【关键字】冗余、算法优化【正文】一 引言信息学竞赛中,我们所追求的目标之一,是使程序用最少的时间解决问题,也就是达到最高的效率。实际生活中也同样需要这样,高效率者往往会在竞争中取得优势。冗余,是指多余的或重复的操作。在搜索、递推、动态规划等诸多的算法中,都会出现冗余。由冗余的定义,要使算法达到最高的效率,必须去除算法中的冗余处理

2、。但完全去除冗余是难以实现的,使程序用绝对最少的时间解决问题也是很难的,通常需要退一步,将目标改为:使程序用尽量少的时间解决问题。由冗余的定义,可以得到:要提高算法的效率,必须减少算法中的冗余处理。要减少冗余,需要在大量的做题过程中,不断探索,不断积累经验。下面就让我们通过两个具体的例子来研究冗余是如何影响算法效率的以及如何减少冗余。二 整数拆分2.1 问题描述①题目来源:金恺原创将正整数N拆分成若干个整数的和,使拆分成的数是2的非负整数幂的形式。问有多少种拆分方案。如果两个方案仅有数的顺序不同,它们算作同一种方案。如:当N=5时,可以拆分成下面的形式:

3、5=1+1+1+1+15=1+1+1+25=1+2+25=1+4所以,5有4种拆分方案。第10页减少冗余算法优化2.2 粗略分析此题可用递推解决(为什么?请读者自己思考^_^):用表示i拆分成若干个数,其中最大的数不超过的拆分总数。则:1°2°,即i拆分成若干个数,其中最大的数不超过的拆分方案只有一种:把i拆分成i个1。3°当i>0,j>0时,由两类组成:第一类:拆分成的最大数正好是,其总数为;第二类:拆分成的最大数小于,其总数为。所以。最后要计算的目标是F[N,M]。因为必须,所以,又有。不难得出:总的时间复杂度是此处所讲的时空复杂度都忽略了高精度的因

4、素。因为当N达到10000000时答案也只有60位,这个数字是比较小的。,空间复杂度也是。看上去,这个复杂度已经很低了。但是,复杂度能不能再低一点儿呢?2.3 减少冗余为了便于研究,可以首先处理N是2的整数幂这种特殊情况,然后把N不是2的整数幂的情况化为N是2的整数幂的情况处理。2.3.1 当N是2的整数次幂时设(M为非负整数)。首先,为了讨论时更直观,把所有的对应到以I为横轴,J为纵轴的直角坐标系中的每一个整点上,将横坐标为i的点称为第i列的点、纵坐标为j的点称为第j行的点。(是第i列,第j行的点)若点C是点A与点B的和当C为时,由递推方程,A、B分别

5、为、。,则连有向边和(如图A所示)。第10页减少冗余算法优化IJA()B()C()123456781230图A (M=3,N=8)根据递推关系将所有的边都连出来,可以得到图B。IJD123456781230图B (M=3,N=8)E观察要计算的目标,它是与的和,而是与的和;是与的和……可以看出,图中有很多的点(如图B中的D,E)的值求出与不求出都不影响最后的答案,所以这些点都没必要求出,都是冗余的,在图中也没必要向这些点连边。将这些冗余的点和边删掉,只留下最后可能影响到目标点的点和边,图B变成了图C的样子,可以看出,图C比图B简洁多了,要计算的点数也少多

6、了。IJ123456781230图C (M=3,N=8)那么,到底要计算多少个点呢?观察图C,发现当j达到最大,即时第j行只需要计算1个值——;当时第j行要计算2个值——和;当第10页减少冗余算法优化时第J行要计算4个值——、、和……由此可以猜想:①当时第j行要且只要计算个值。②这些要计算的值是这个。这两个猜想是否正确呢?答案是肯定的,下面用归纳法证明:1°当时,第j行只要计算,这是显然的。猜想①、②此时都成立。2°假设时成立,第j行要计算的为这个数。取,当时,由于第j行要计算,由递推方程,第行要计算,而计算又要用到,计算时要用到……,一直下去,最后所有

7、的都要算出来。当取遍所有的时,就可以得到第行要计算哪些值,它们是这个数,这个式子和②的是一样的。所以此时猜想①、②仍然成立。综合1°和2°,猜想①、②都是正确的。由①,图中实际有用的点是个,而开始时计算了个,可见计算过程中的冗余数目远远大于必须计算的数目。如果去掉这此冗余的计算,算法的时间复杂度可能降到。现在的问题变为:哪些点是要计算的呢?用②找要计算的点固然是一个方法,不过这里有两个巧妙的结论:③图中每一列要计算的点必然是最下面的若干个点。因为:如果要计算,从递推方程看,必定要计算,然后又必定要计算……,直到要计算,最后已知。所以,如果要计算,位于正下

8、方的所有点都要算出来,由此,图中第10页减少冗余算法优化每一列要计算的点必然是最

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。