- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
书籍《算法设计与分析》第9章
算法设计与分析 第2部分 算法设计策略 第9章 分枝限界法 学习要点 理解分支限界法的剪枝搜索策略。 掌握分支限界法的算法框架 队列式(FIFO)分支限界法 优先队列式(LC)分支限界法 通过应用实例学习分支限界法的设计策略。 15谜问题 0-1背包问题; 旅行商问题 批处理作业调度问题 概念回顾 活结点 搜索过程中,一个自身已生成但其孩子结点尚未生成的结点叫做活结点 扩展结点: 一个正在产生孩子的结点 死结点 一个所有孩子已经产生的结点 问题状态、候选解、答案状态 分支限界法一般方法 分支限界法与回溯法的区别: 分支限界法 = 宽度优先搜索 + 剪枝 。 在分支限界法中,从根结点开始,每一个扩展结点,一次性产生其所有孩子结点。在这些孩子结点中,导致不可行解或导致非最优解的孩子结点被舍弃,其余孩子结点被加入活结点表中。 此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。 分支限界法一般方法 设计策略(根据活结点表的类型划分) FIFO分支限界法:活结点采用一张先进先出表 LIFO分支限界法:活结点采用一张先进后出表 LC分支限界法:活结点采用优先权队列 按照优先队列中规定的优先权选取优先权最高的结点成为当前扩展结点。 最大优先队列(最大堆):体现最大效益优先 最小优先队列(最小堆):体现最小费用优先 求4皇后问题第一个解 FIFO分支限界法生成的状态树 存在性问题-分枝限界法算法框架 树结点的数据结构 //状态空间树采用树的双亲表示法,parent是指向其双亲的指针 template class T struct Node{ T cost; Node* parent; }; 活结点表的类型记为 LiveList FIFO/LIFO/优选权队列 存在性问题 分枝限界法算法框架 templateclass T void BranchBound(NodeT* t) // t是指向空间树的根结点 { LiveListNodeT* lst(mSize); //lst为活结点表,元素指向树结点 NodeT *x,*E=t; //E为指向扩展结点的指针,初始指向t do { //以下描述中不区分指针与其所指示的结点 for( 对结点E的每个不受限的孩子){ x=new Node; x-parent=E; //构造E的孩子结点x if ( x是一个答案结点 ){ 输出从x到t的一条路径; return; //输出第一个解后算法终止 } lst.Append(x); //孩子结点x进活结点表 } if(lst.IsEmpty()){ cout “没有答案结点”; return; //搜索失败终止 } lst.Serve(E); //从表中输出一个活结点为E-结点 }while(1); } LC分支限界法 在LIFO和FIFO分枝-限界法中,对下一个E-结点的选择规则死板,在某种意义上是盲目的搜索。 LC分支限界法在选择活结点时根据活结点的优先权来选择下一代活结点 结点优先权定义为:“在其分支下搜索一个答案状态需要花费在代价,代价越小,越优先” LC分支限界法 结点代价相关概念 代价函数c(.):表示从根结点搜索到X,以及在X之下搜索到一个答案状态所需的代价。如下定义 若X是答案结点,则c(X)是由空间树根到结点X的代价; 若X不是答案结点且子树X不包含任何答案结点,则c(X)= ∞; 否则c(X)等于子树X中具有最小代价的答案结点的代价。 代价函数如同一个“有智力的”排序函数,基于其值选取下一个E-结点往往可以加快到达一答案结点的速度。 LC分支限界法 结点代价相关概念 相对代价函数g(.):衡量子树X下搜索到一个答案状态所需的代价。 对任意结点X,可用两种标准来量度一个结点X的相对代价: 在生成一个答案结点之前,子树X需要生成的结点数 在子树X中离X最近的那个答案结点到X的路径长度 结点代价相关概念 代价函数与相对代价函数 设以下两个树A B C 均为答案结点且c(A)c(B)c(C) LC分支限界法 结点代价相关概念 相对代价的估计函数^g(.):用于估计在X下搜索到一个答案状态所需的代价。 ^g(.)需要视具体问题而定! 一般地,若Y是X的孩子则有 ^g(Y)≤ ^g(x) LC分支限界法 结点代价相关概念 结点代价的估计函数^c(.)
文档评论(0)