论文--信息学竞赛中搜索问题的常见优化技巧

论文--信息学竞赛中搜索问题的常见优化技巧

ID:39989255

大小:984.00 KB

页数:10页

时间:2019-07-16

论文--信息学竞赛中搜索问题的常见优化技巧_第1页
论文--信息学竞赛中搜索问题的常见优化技巧_第2页
论文--信息学竞赛中搜索问题的常见优化技巧_第3页
论文--信息学竞赛中搜索问题的常见优化技巧_第4页
论文--信息学竞赛中搜索问题的常见优化技巧_第5页
资源描述:

《论文--信息学竞赛中搜索问题的常见优化技巧》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、信息学竞赛中搜索问题的常见优化技巧【摘要】结合例题分析归纳了信息学竞赛中解决搜索问题所常用的思考方法与解题方法,从深度优先搜索和广度优先搜索两个方面探讨了提高程序效率的适用技巧。【关键词】1信息学;2搜索顺序;3搜索对象;4Hash表5剪枝。在信息学竞赛中解决搜索问题通常采用两种方法进行,即:深度优先搜索和广度优先搜索。一、深度优先搜索的优化技巧我们在做题的时候,经常遇到这类题目——给出约束条件,求一种满足约束条件的方案,这类问题我们叫它“约束满足”问题。对于约束满足问题,我们通常可以从搜索的顺序和搜索的对象入手,进而提高程序的效率。搜索的顺序

2、及对象:  在解决约束满足问题的时候,题目给出的约束条件越强,对于搜索中的剪枝就越有利。之所以深度优先搜索的效率在很大程度上优于穷举,就是因为它在搜索过程中很好的利用了题目中的约束条件进行剪枝,达到提高程序效率的目的。显然,在同样的一棵搜索树中,越在接近根接点的位置利用约束条件剪枝效果就越好。如何在搜索中最大化的利用题目的约束条件为我们提供剪枝的依据,是提高深度优先搜索效率的一个很重要的地方。而不同的搜索顺序和搜索对象就直接影响到我们对于题目约束条件的运用。下面,我们就从搜索的顺序和搜索的对象两方面来探讨一下不同的方法对程序效率的影响。(1)搜

3、索顺序的选择:我们先来看一道比较简单的题目:(zju1937)已知一个数列a0,a1......am其中10a0=1am=na0

4、但是在这到题目中按照这样的顺序搜索编程运算其结果(效率)十分不理想:N102030405060708090100200300400500用时0.030.010.030.050.200.341.801.808.9110.1ToolongToolongToolongToolong由于题目要求的是m的最小值,也就是需要我们尽快得到数n,所以每次构造的数应当是尽可能大的数,根据题目的这个特性,我们将搜索顺序改为从大到小搜索每个数,新程序的效率如下:N102030405060708090100200300400500用时0.010.010.010.010

5、.010.010.030.010.030.030.131.481.522.88  显然,后一种搜索顺序得到的程序效率大大地优于第一种搜索顺序得到的程序。当然,这道题还有很大的优化余地,但是搜索顺序这种思想在搜索的题目中是广泛运用的。也许大家会觉得这种单一的运用搜索顺序来优化程序的方法很普通,但是这种看似简单的方法在考试中出现得也不少,例如IOI2000中的BLOCK10,只要将木块从大到小经过旋转和反转后,依次放入进行搜索,对于比赛中的数据就可以得到满分。最近的一次出现是NOI2005中的智慧珠,同样的只是将珠子从大到小进行搜索,不加任何其他剪

6、枝就可以在比赛中获得90分。可见,选择合适的搜索顺序对于提高程序的效率是编程设计最有效的技巧之一,运用良好的搜索顺序来对搜索题目进行优化是一个性价比很高的算法。(2)搜索对象的选择:让我们再来看看下面一道题:(USACO-weight)已知原数列a1,a2……an中前1项,前2项,前3项……前n项的和,以及后1项,后2项,后3项……后n项的和,但是所有的数据都已经被打乱了顺序,还知道数列中的数存在集合S中,求原数列。当存在多组可能数列的时候求左边的数最小的数列。其中n<=1000,S∈{1..500}例如,假如原数列为11525,S={1,2,

7、4,5}那么知道的值就是(12791457121314)1=15=52=1+17=2+57=1+1+512=5+2+59=1+1+5+213=1+5+2+514=1+1+5+2+514=1+1+5+2+5分析 因为题目中的S∈{1..500},最坏的情况下每个数可以取到的值有500种,从数学方面很难找到有较好方法予以解决,而采用搜索方法却是一种很好的解决办法,根据数列从左往右依次搜索原数列每个数可能的值,然后与所知道的值进行比较。这样,我们得到了一个最简单的搜索方法A。但是搜索方法A的这个算法最坏的情况下扩展的节点为5001000,运算速度太慢

8、了。10在这个算法中,我们对数列中的每个数分别进行了500次搜索,由此导致了搜索量如此之大。如何有效的减少搜索量是提高本题算法效率的关键。而前面提到的

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

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

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