搜索算法(NOI导刊讲解).pdf

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

celkhn5460 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档