深度搜索的优化.ppt

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

问题描述 在M*N的方格棋盘中,每个棋子最多可以控制5个格子(棋子所在的位置,以及它的上、下、左、右四个格子)。 编程任务:用最少的棋子控制整个棋盘,并且这些棋子相互不能控制。 算法分析 深度+可变下界 Top:=m*n div 5+1 Repeat  找一个解,用top个棋子完全控制棋盘(深度搜索)  if 未找到解 then inc(top); until 找到解; 深度搜索算法结构 [深度搜索] –问题有N步,每一步最多K种可能值,求所有可能解 Procedure try(t:integer);{t为深度} Var i:integer; begin if (tN) then  检查是否出解 else begin  for i:= 1 to k do if 第t步可以用第i种可能值 then begin a[t]:=i;{数组a为栈,记录每一步选择} {对一些全局变量赋值} try(t+1); {对一些全局变量值的恢复} end; end; End; “棋子控制”程序的数据结构 Const Maxn=20; Type Tmap=array[1..Maxn,1..Maxn]of boolean; Var map : Tmap;{棋盘} a : array[0..Maxn*Maxn div 5]of byte; {栈-记录每一步控制棋子的位置} m,n,mn,top : integer; found : boolean;{是否出解} covered : integer;{累计已覆盖格子 数} “棋子控制”问题的算法 Procedure try(t:integer); var i,k,xx,yy:integer; back:array[0..5]of integer; x,y:integer; begin if (ttop)and(not found) then check(t) else if not found then begin for i:= a[t-1]+1 to mn do begin x:=(i-1)div n+1; y:=(i-1)mod n+1; if map[x,y] then{该点未被控制} begin a[t]:=i; 将棋子放入(x,y)点,并将其能控制新点记录back数组 inc(covered,back[0]); try(t+1); 对(x,y)及其控制的新点从棋盘中清除 dec(covered,back[0]); end; end; end; end; 常见几种优化方法 减小每一步可能值的范围 function next(t:integer):integer; var nn:integer; begin i:=a[t-1];nn:=0; repeat inc(i); x:=(i-1)div n+1; y:=(i-1)mod n+1; if not map[x,y] then nn:=0 else inc(nn); until (t=1)and(i=3)or (i=mn)or (x1)and(map[x-1,y])or (t1)and((a[t-1]-1)div n+1=x)and(nn=3) or((a[t-1]-1)div n+1=x-1)and(nn=3); next:=i; end; 常见几种优化方法(续) 对后续步最好情况的估计 两种方法综合 常见几种优化方法(续) 选择可能性少的枚举量作为枚举对象 * * 深度搜索的优化       -从“棋子控制”问题谈起 问题描述 算法分析 深度搜索(回溯)算法结构 “棋子控制”问题的主要数据结构 “棋子控制”问题的算法 常见几种优化方法 for i:= a[t-1]+1 to next(t) do for i:= a[t-1]+1 to mn do 6.37s 6 6 70.99s 7 6 0.05s 5 5 运行时间 N M 0.05s 6 6 0.11s 7 6 0.00s 5 5 运行时间 N M if (not found) then中的条件加入条件: and(t-1+(mn

文档评论(0)

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

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

1亿VIP精品文档

相关文档