孙成敏《计算机算法设计与分析》第9章.pptVIP

孙成敏《计算机算法设计与分析》第9章.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 分支-限界法 9.1 一般方法 分支-限界法类似于回溯法,也是一种在问题的解空间树上搜索问题解的算法。但二者搜索方式不同。 分支-限界法 生成当前E-结点全部儿子之后,再生成其他活结点的儿子, 使用限界函数帮助避免生成不包含答案结点子树的状态空间 根据对状态空间数中结点检索次序的不同,可将分支-限界的设计策略分为: FIFO检索,活结点采用一张先进先出表(队列) LIFO检索,活结点采用一张先进后出表(堆栈) 例9.1 4-皇后问题 例9.1 4-皇后问题 9.1.1 LC-检索 问题: 在LIFO和FIFO分支-限界法中,对下一个E-节点的选择规则相当死板,在某种意义上是盲目的。对于可能快速检索到答案结点的结点没有给出任何优先权。 解决: 对活结点使用一个“有智力的”排序函数c(.)来选取下一个E-结点,往往可以加快到达一答案结点的速度。 9.1.1 LC-检索 要对活结点计算优先次序,必然要附加计算工作,即付出代价。对于任意结点X,要付出的代价可以用两种标准来度量: 9.1.1 LC-检索 c(.):“有智力的”排序函数,称为“节点的成本函数”: 状态空间树的根结点到X的成本 若X是答案结点 c(X)= ? 若X不是答案结点且子树X不包含任何答案结点 子树X中具有最小成本的答案结点的成本 否则 Note:要得到结点成本函数c(.)所用的计算工作量与解原问题具有相同的复杂度,所以要得到精确的成本函数一般是不现实的。 9.1.1 LC-检索 解决:在算法中检测活结点的次序通常根据能大致估计结点成本的函数?(.)来排出。 ?(X): 由X到达一个答案结点所需做的附加工作的估计函数。 单纯使用函数?(.)会导致算法偏向于做纵深检查。 若?(.)=c(X),可以用最小成本达到离根最近的答案结点,其它子树的结点无需生成。 但通常情况下, ?(X)只是精确成本的一个估计值,因此偏于纵深检查可能会丢失掉更靠近根的答案结点。导致结果不理想。 9.1.1 LC-检索 改进: 不仅考虑结点X到一个答案结点的估计成本值?(.),还应考虑由根结点到结点X的成本h(X) ?(X)=f(h(X))+ ?(X) f(.)是一个非降函数,使f(.)不等于0,可以减少算法作偏向于纵深检查的可能性,使算法优先检索更靠近答案结点且又离根较近的结点。 9.1.1 LC-检索 9.1.2 15-谜问题 9.1.2 15-谜问题 9.1.2 15-谜问题 9.1.2 15-谜问题 9.1.2 15-谜问题 尝试1:FIFO,找到离根最近的答案结点,但移动是千篇一律的,检索是呆板而盲目的。 尝试2:深度优先,不管开始格局如何,总是采取由根开始的那条最左路径,有可能远离目标。 尝试3:具有一定“智能”的检索方法。 给状态空间树的每个结点X赋予一定的成本值c(X):由根出发到最近目标结点路径上的每个结点X赋予这条路径长度作为他们的成本值,其余结点的成本值赋予?。 9.1.2 15-谜问题 切合实际的做法:给出一个便于计算成本估计值的函数?(X)=f(X)+?(X) , f(X):由根到结点X的路径长度 ?(X):以X为根的子树中由X到目标状态的一条最短路径长度的估计值。 因此, ?(X)至少应是能把状态X转换成目标状态所需的最小移动数。 一种可能的选择: ?(X) =不在其目标位置的非空白牌数目 9.1.3 LC-检索的抽象化控制 设T是一棵状态空间树,c(.)是T中结点的成本函数。如果c(X)是根为X的子树中任一答案结点的最小成本,则c(T)是T中最小成本答案结点的成本。 由于函数c(.)不容易实现,所以使用一个对c(.)估值的启发性函数?(.) 来代替。 这个启发函数应易于计算并具有如下性质:如果X是一个答案结点或者是一个叶结点,则c(X)=? (X)。 算法9.1 LC-检索 Line procedure LC(T,?) if T是答案结点 then 输出T; return end if E?T // E-结点 // 将活结点表初始化为空 loop for E 的每个儿子X do if X是答案结点 then 输出从X到T的那条路径 return; end if call ADD(X) // X是新的活结点 // PARENT(X)?E repeat if 不再有活结点 then print(‘no answer node

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档