- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
搜 索 算 法 讲 义
搜 索 算 法 讲 义
搜搜 索索 算算 法法 讲讲 义义
(重庆巴蜀中学 黄新军)
(重庆巴蜀中学 黄新军)
((重重庆庆巴巴蜀蜀中中学学 黄黄新新军军))
信息学竞赛中,有一类题目,它既不能通过建立数学模型解决,
又不能套用现有的算法或数据结构,必须遍历所有可能情况才能得到
结果,这时,可以使用搜索算法。常用的搜索算法有穷举法、深度优
先搜索和宽度优先搜索,它们各有千秋,应用时,要因题而异,选择
好对应的算法。使用搜索法解决问题时,耗时巨大,时间效率往往在
指数级别,所以,还需要优化算法,进行必要的剪枝。本讲主要分析
三种常用搜索算法和搜索剪枝。
第一节、枚举法
第一节、枚举法
第第一一节节、、枚枚举举法法
“ ”
“ ”
一、““直译””枚举
枚举法的基本思想:根据实际问题设计多重循环,一一枚举所有
可能的状态,并用问题给定的约束条件检验哪些状态是需要的,哪些
状态是不需要的。能使命题成立的状态,即为其解。虽然枚举法本质
上属于搜索策略,但是它与后面讲的回溯法或宽度优先搜索有所不
同。因为适用枚举法求解的问题必须满足两个条件:
①可预先确定每个状态的元素个数n。如百钱买百鸡问题,3 文
钱一只鸡的状态元素个数可预先确定;
②可预先确定每个状态元素a1,a2,…,an的值域。
设a 为状态元素a 的最小值;a 为状态元素a 的最大值(1=i=n),
i1 i ik i
即 状 态 元 素 a ,a ,…a 的 值 域 分 别 为 a =a =a ,
1 2 n 11 1 1k
a =a =a ,……a =a=a ,…a =a =a 。
21 2 2k i1 i ik n1 n nk
for(a1=a11;a1=a1k;a1++)
for(a1=a11;a1=a1k;a1++)
ffoorr((aa11==aa1111;;aa11==aa11kk;;aa11++++))
for(a2=a21;a2=a2k;a2++)
for(a2=a21;a2=a2k;a2++)
ffoorr((aa22==aa2211;;aa22==aa22kk;;aa22++++))
for(ai=ai1;ai=aik;ai++)
for(ai=ai1;ai=aik;ai++)
ffoorr((aaii==aaii11;;aaii==aaiikk;;aaii++++))
for(an=an1;an=ank;an++)
for(an=an1;an=ank;an++)
ffoorr((aann==aann11;;aann==aannkk;;aann++++))
if( (a1,...,ai...,an) ) ;
if( (a1,...,ai...,an) ) ;
iiff((状态((aa11,,,,aaii,,
文档评论(0)