- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
信息学竞赛中搜索问题的常见优化技巧
【摘要】结合例題分析归纳了信息学竞赛中解决搜索问题所常用的思考方法与解題方法,从深度 优先搜索和广度优先搜索两个方面探讨了提高程序效率的适用技巧。
【关键词】1信息学:2搜索顺序:3搜索对象;4Hash表5剪枝。
在信息学竞赛中解决搜索问题通常釆用两种方法进行,即:深度优先搜索和广度 优先搜索。
一.深度优先搜索的优化技巧
我们在做题的时候,经常遇到这类题目一给出约束条件,求一种满足约束条件 的方案,这类问题我们叫它“约束满足”问题。对于约束满足问题,我们通常可以从 搜索的顺序和搜索的对象入手,进而提高程序的效率。
搜索的顺序及对象:
在解决约束满足问题的时候,题目给出的约束条件越强,对于搜索中的剪枝就越 有利。之所以深度优先搜索的效率在很大程度上优于穷举,就是因为它在搜索过程中 很好的利用了题U中的约束条件进行剪枝,达到提高程序效率的U的。
显然,在同样的一棵搜索树中,越在接近根接点的位置利用约束条件剪枝效果就 越好。如何在搜索中最大化的利用题目的约束条件为我们提供剪枝的依据,是提高深 度优先搜索效率的一个很重要的地方。而不同的搜索顺序和搜索对象就直接影响到我 们对于题U约束条件的运用。
下面,我们就从搜索的顺序和搜索的对象两方面来探讨一下不同的方法对程序效 率的影响。
(1)搜索顺序的选择:
我们先来看一道比较简单的题目:(zjul937)
已知一个数列aO, al
am其中
aO = 1 am = n
aO al a2 ... am-l am
对于每个 k(l=k=m),ak=ai+aj (0 = i, j = k-1),这里 i 与 j 可以相等。
现给定n的值,要求m的最小值(并不要求输出),及这个数列的值(可能存在多
个数列,只输出任一个满足条件的就可以了)。
分析 山于比二ai+6((X=i, jk),所以我们在搜索的过程中可以采用由小到大搜索数
列的每一项的搜索顺序进行试算。在一般搜索的时候我们习惯于从小到大依次搜索每
个数的取值,但是在这到题U中按照这样的顺序搜索编程运算其结果(效率)十分不
理想:
X
10
20
30
40
50
60
70
80
90
100
200
300
400
500
用
**
**
**
*?
**
**
**
**
**
**
Too
Too
Too
Too
时
long
long
long
long
山于题忖要求的是m的最小值,也就是需要我们尽快得到数m所以每次构造的
数应当是尽可能大的数,根据题目的这个特性,我们将搜索顺序改为从大到小搜索每
个数,新程序的效率如下:
N
10
20
30
40
50
60
70
80
90
100
200
300
400
500
用
时
**
**
**
**
*?
**
**
**
**
**
**
**
**
**
显然,后一种搜索顺序得到的程序效率大大地优于第一种搜索顺序得到的程序。
当然,这道题还有很大的优化余地,但是搜索顺序这种思想在搜索的题U中是广
泛运用的。也许大家会觉得这种单一的运用搜索顺序来优化程序的方法很普通,但是
这种看似简单的方法在考试中出现得也不少,例如I0I2000中的BLOCK,只要将木块
从大到小经过旋转和反转后,依次放入进行搜索,对于比赛中的数据就可以得到满分。
最近的一次出现是NOI2005中的智慧珠,同样的只是将珠子从大到小进行搜索,不加
任何其他剪枝就可以在比赛中获得90分。
可见,选择合适的搜索顺序对于提高程序的效率是编程设计?最有效的技巧之一,
运用良好的搜索顺序来对搜索题u进行优化是一个性价比很高的算法。
(2)搜索对象的选择:
让我们再来看看下面一道题J (USACO—weight)
己知原数列6, a:……a冲前1项,前2项,前3项……前n项的和,以及后1项,
后2项,后3项……后n项的和,但是所有的数据都已经被打乱了顺序,还知道数列
中的数存在集合S中,求原数列。当存在多组可能数列的时候求左边的数最小的数列。
其中 n=1000,Se{1..500}
例如,假如原数列为1 12 5, S={b 2, 4, 5}那么知道的值就是
例如,假如原数列为1 1
14 5 7 12 13 14)
1 = 1
5 = 5
2 = 1+1
7 = 2+5
7 = 1+1+5
12 = 5+2+5
9 = 1+1+5+2
13 = 1+5+2+5
14 = 1+1+5+2+5
14 = 1+1+5+2+5
分析因为题U中的Se{1..500}.
最坏的悄况下每个数可以取到的值有500种,从
数学方面很难找到有较好方法予以解决,而采用搜索方法却是一种很好的解决办法, 根据数列从左往右依次搜索原数列每个数可能的值,然后与所知道的值进行比较。这 样,我们得到了一个
您可能关注的文档
- ()分部分项施工技术交底录.docx
- CDIO模式下基于项目的毕业设计教学研究-教育文档.docx
- 一张常见“发物”一览表生病时该怎么忌口终于清楚了.docx
- 以TD-LTE-A的优势一统华夏4G标准-最新资料.docx
- 会计毕业论文如何加强建筑业企业项目会计基础工作.docx
- 保山市离休干部医疗保障实施意见(试行).docx
- 保险公司再保险的影响因素综述.docx
- 保险管理助力出口贸易业务发展的案例分析.docx
- 信和财富:打造互联网金融“粉丝文化”提升企业软实力.docx
- 信用联社信贷工作总结-精选范文.docx
- 四川省德阳市罗江中学2025届高三考前热身化学试卷含解析.doc
- 山东省枣庄现代实验学校2025届高三下学期第五次调研考试化学试题含解析.doc
- 吉林省长春市十一高中等九校教育联盟2025届高三一诊考试生物试卷含解析.doc
- 2025届江苏省盐城市伍佑中学高考仿真模拟化学试卷含解析.doc
- 2025届广西贺州中学高考冲刺押题(最后一卷)生物试卷含解析.doc
- 安徽省池州市贵池区2025届高三第一次模拟考试生物试卷含解析.doc
- 宁夏银川一中2025届高三(最后冲刺)化学试卷含解析.doc
- 广东省广州市增城区四校联考2025届高考压轴卷化学试卷含解析.doc
- 2025届邯郸市第一中学高考生物必刷试卷含解析.doc
- 2025届安徽省安庆市石化第一中学高考仿真卷化学试卷含解析.doc
文档评论(0)