搜索方法中剪枝优化_第1页
搜索方法中剪枝优化_第2页
搜索方法中剪枝优化_第3页
搜索方法中剪枝优化_第4页
搜索方法中剪枝优化_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中学【】本文讨论了搜索方法中最常见的一种优化技巧——剪一、1应用剪枝优化的问题是设计剪枝判断方法即确定哪些枝条应当就应当首先分析一下设计剪枝判断方法的时候,需要遵循的一些原则。效果这恐怕也是得不偿失很多情况下能否较好的解决这个,NBetsy能采用的所有的旅行路线的数目。我们用深度优先的回溯方法来解决这个问题:Betsy从左上角出N2-1步并达到左下角时,即得到了一条新的N=6的个尚过的格子都与至少两个尚过的格子相邻(除非当时Betsy就在它旁边。这里,我们是从微观的角度分析问题。能都有至少两个相邻的空的格子,但它们作为一个整体,Betsy已经我们在每次剪枝判断时,都简单的对N2个格子进行一遍扫描,其效率的低下可想而知。因此,须尽可能的简化判断的过程。与每个格子相邻的没被经过的格子的数目,Betsy每次移动到一个新BetsyBetsy图 剪枝原理示意PrimeCircleACMAsianRegional96)界,即所谓估价函数hh大于当前保存的优度的下界,是该题目简述:由xxn,其中n为输(1)一个数列ai,满足aaia

j

ii要求atn,并且使t取值范围在ai11到ai1*2nai1*2开始从大到小为ain。当搜索到n出当前的最大者是ai,即当前搜索深度为ih n2 2i然而,这个估价函数的准确性太差,特别是当anh A*搜索方法,只要还使用这个估价函数,其优化优化之四:我们可以在搜索之前将n分解质因数,对每个质因数先使用上述搜索方法求解(1,优化之五:当数列中的当前最大数an 以发挥作用了。但是,此后的最优方案,实际上就等价于从a1到ai这i个数中,选出尽可能少的数(可重复,使它们的和等于n。这个问A*算法的方法来解决(用改进的估价函数作为优度上界估计,即h*函数;前述的动A*算法的结合以其较好的,个原则——正确、准确和高效,才是贯穿于始终的。设计》王建德编著《InformaticsOlympic(N213248567(测试环境:PentiumIIi 最初的估价函数的设计思路实际上是在当前数列a1,ai的基础上理想化的构造2a,4a,,2pa,当2pan2p1ai 然而,这只是保证了能够得到大于等于n的数,并不一定恰好得到n。我们首先,任何一个自然数i都可以表示成2k(2m (k,mZ)的形式,我可以设k(i表示一个自然数i所对应的k值。显然,对于任何两个自然数a和b,a,

,,a,2a,4a,,2p

(2p

n2p1a ij1jp,使得k2jakn,由kabmini则有k2ta2pak2tak2jak jtii ii2t

2pa (kakb是ab的必要条件即2jai,,2pai中的任何一个数与2pai相加都不可能得到n所以,如果n2pai2j1ai,则在得到2pai后,至少还需要再进行两次加法才有可能得到n。估价函数的改进,而不象在“Betsy的旅行”中那样是互相补充的两个方面,但(N(测试环境:PentiumPro当n1000610(分段搜索123456723解,所以能够使程序的效率得到比较明显的改善,四个程序中,只有它能够在一分钟以内完成表中所列出的每个测试数据,特别是n=1023化效果就会极不明显(如n=719加入动态规划后的程序(4,实际上使得搜索过程主要集中在[n/2]以下,在相当程度上避免了对[n/2]到n的估价函数几乎没有作用的部分的41。5,由于使用了初始定界,使搜索前就已经有了比(n=719A*算法外,还结合使用了分枝定界的方法,否则时空效率更Betsy的旅行”的程序(使用两种剪枝{$M }}fori:=0ton+1dobeginfori:=2ton-1dobeginfork:=1to4dobegindir:byte;{Betsy的移动方向}fori:=1to4dobeginif(map[a,b]=-1)and((a<>nx)or(b<>ny))and(left[a,b]<=1)thenbeginif(dir=2)or(dir=4)thenbeginelsebeginand(map[nx+delta[d2,1],ny+delta[d2,2]]=-1)thenbeginif(map[fx+delta[d1,1],fy+delta[d1,2]]<>-1)and(map[nx+delta[d1,1],ny+delta[d1,2]]=-1)and(map[fx,fy]=-1)thenbeginif(map[fx+delta[d2,1],fy+delta[d2,2]]<>-1)and(map[nx+delta[d2,1],ny+delta[d2,2]]=-1)and(map[fx,fy]=-1)thenbegin ifable(nx,ny)then n('Thenumberoftoursis',s);{输出结果}({$M output中,对其进行了转换。}keep中给出所构造的最优幂次数列。} whilenotodd(num)dobeginnum:=numshr1;ifnum<=rangethenbegin{num在[n/2]以内}fori:=step-1downto1dobeginifa[i]+a[i]<numthenbreak;iftime[num-a[i]]=1thenifp>rangethenfori:=a[step-1]+1topdoforj:=step-2downto2do{决策枚举}whilenum<ndobeginnum:=numshl1;ifh(a[step])+step>=bestthencut1:=trueelsecut1:=false;rest:integer;{k(rest)=k(n)的数}ifh(a[step]+a[step-1])+step+1<bestthen

}ifpt>knthenrest:=a[step-1]ifpt=knthenrest:=a[step]elserest:=maxint;a[step+i+1]:=a[step+i]shl1;ifpt+i=knthenrest:=a[step+i];untila[step+i]>n;ifn-a[step+i]>rest)and(step+i+2>=bestthencut2:=trueelsecut2:=false;{剪枝判断}ifa[step-1]+a[step-1]>=ntheniftime[n-a[step-1]]+step-1<bestthenbegin{判断出解}fori:=kdowntoa[step-1]+1doifok(i)thenbeginifi<=rangethentime[i]:=1;ifcut1thenbreak;{ifcut2thencontinue;{2}}ifkeep[0]=bestthenifkeep[i]<=leftthenbeginiffoundthenexit;range:=ndiv}pfact:integer;{num的素因子的变量}b2:integer;{num2的因子的数目}s:integer;{n的估价步数}whilenotodd(num)dobeginnum:=numdiv2;fori:=2tobestdokeep[i+keep[0]-1]:=kp[i];while(pfact<=sq)and(nummodpfact>0)doinc(pfact,2);ifpfact<=sqthenbeginbest:=guess(numdivpfact);fori:=k+1tokeep[0]dokeep[i]:=pfact*keep[i];}fori:=k2+1tokeep[0dokeep[i]:=keep[i]*power2[b2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论