day3搜索优化方法-曹利国-noip培训1.ppt

day3搜索优化方法-曹利国-noip培训1.ppt

  1. 1、本文档共68页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
day3搜索优化方法-曹利国-noip培训1.ppt

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * A*算法 可以证明,A*算法每次扩展到得第一个目标节点一定是离初始状态最近的一个。因为这是f是单调递增的 A*算法基本框架为: 1、按照f值选一个最小的点进行扩展,然后从队列里删除 2、把被扩展点的f值进行更新,进行调整 3、接下来再次进行扩展,直到到达目标状态 A*算法 但是A*算法对于空间需求很大,可能到达指数级别,但在理论上是时间最优的。 例题:(多处理机调度问题) 有n相同的处理机P1,P2??????Pn,和m个独立的作业J1,J2??????jm,处理机以互不相关的方式处理作业,现约定任何作业可以在任何一台处理机上运行,但未完工之前不允许中断作业,作业也不能拆分成更小的作业,已知作业Ji需要处理机处理的时间为Ti(i=1,2??????m)。编程完成以下两个任务: 任务一:己知n、m和Ti(i=1,2??????m),求解一个调度方案,使得完成这m个作业的总工时最少并输出最少工时。 任务二:给定作业时间表和限定完工时间T,求在时间T内完成这批作业所需最少处理机台数和调度方案。 搜索剪枝应用举例 【分析】此题有两种搜索方法: 方法一:按顺序搜索每个作业。当搜索一个作业时,将其放在每台处理机搜索一次。 方法二:按顺序搜索每台处理机。当搜索一台处理机时,将每个作业放在上面搜索一次。 对比上述两种方法,可以发现:方法二较方法一更容易剪枝。 搜索剪枝应用举例 两种方法剪枝的对照: 对于方法一:只能根据目前已确定的需时最长的处理机的耗时与目前最佳解比较。 对于方法二:可约定Time[1]Time[2]???Time[n](Time[i]表示第i台处理机的处理时间),从而可以设定槛值:如当前处理机的处理时间=目前最佳解,或剩下的处理机台数×上一台处理机的处理时间剩余的作业需要的处理时间,则回溯。 第二种方法显然是比第一种要好的。 搜索剪枝应用举例 第二种方法的深层探讨: 对于任务一,首先可以用贪心求出Time[1]的上界。然后,还可以求出Time[1]的下界:UP(作业总时间/处理机台数)(UP表示大于等于该小数的最小整数)。搜索便从上界开始,找到一个解后,若等于下界即可停止搜索。 对于任务二,可采用深度+可变下界。下界为:UP(作业总时间/限定时间),即至少需要的处理机台数。并设定Time[1]的上界为T。 搜索剪枝应用举例 * * * * * * * * * * * * * * * * * * * * * * * * * * 例题4:Betsy‘s Tour(USACO) 我们可以想到用可行性剪枝来优化。 剪枝一: 对于某一个没有访问过的点(不包括终点),至少有两个点(没有访问的点或贝茜所在的点)在他附近。因为一个没有访问过的点要被访问到,一定要一进一出,所以必须要在他附近有两个点,才能满足点被全部访问的要求。 例题4:Betsy‘s Tour(USACO) 剪枝二: 我们继续分析,当这个地图被分为了两个或多个连通块时,能不能全部访问?答案很显然,不能!我们就可以再加一个优化,判断当前状态表示的地图是不是只有一个连通块。这样减少了很多不符合题意的状态。 例题3:Betsy‘s Tour(USACO) 对于上面的剪枝,每一次行动都要对所有的格子进行判断。 其实我们知道每一次行动后只会对其附近的格子有影响,那么我们不妨只判断附近格子在操作之后是不是符合题目要求。 对于第一个剪枝我们很容易的判断完,但对于第二个剪枝,怎么判断呢? 例题3:Betsy‘s Tour(USACO) 例题4:Betsy‘s Tour(USACO) 从上面的那个图中可以知道,当出现了上图的三种情况后,必定是出现了两个以上的连通块,不是最后的结果 通过这一个优化,我们又进一步的减少了时间复杂度,解决了这一个问题。 提示:这一题可以考虑用状态压缩的动态规划来做。 例题5:最少乘法次数 由x开始,通过最少的乘法次数得出x^n,其中n为输入数据。 例题5:最少乘法次数 这题是一道很经典的题目,开始我们会想到动态规划来求解,但是用动态规划求解时会出现后效性,所以只能想用别的方法。 我们考虑用搜索,设第一层a[1]=1,那么搜索到第i层时a[i]的值在a[i-1]+1到n的值里面选择可以到达的值。当a[i]=n时,答案为i-1。 但是这样搜索可能会搜到很多状态,使得时间复杂度很大,怎么办? 例题5:最少乘法次数 我们不妨考虑用最优化剪枝,现在乘的次数不比当前答案优时,我们不用搜索下去,因为从这个状态

文档评论(0)

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

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

1亿VIP精品文档

相关文档