网站大量收购闲置独家精品文档,联系QQ:2885784924

Chapter分支定界New.ppt

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

Chapter17 分支定界 本章教学内容 与回溯算法的比较 17.1 分支定界的思想 17.2 算法的应用 货箱装船:FIFO、最大收益 旅行商问题:最小耗费 分支定界 VS. 回溯算法 相同点: 都使用树形结构(子集树或排列树)来组织解空间 不同点: 回溯算法使用DFS方法来搜索树; 分支定界使用BFS方法或最小耗费方法来搜索树 分支定界的解空间比回溯算法要大得多 当内存容量有限时,回溯法更易成功! 但有时候,分支定界能够找到最优解。 1、算法的思想 对E-节点的扩充方式:引入活节点表 【思想】每个活节点有且仅有一次机会变成 E-节点。当一个节点变为E-节点时,则生成从该节点移动一步即可到达的所有新节点。在生成的节点中,抛弃那些不可能导出(最优)可行解的节点,其余节点加入活节点表,然后从表中选择一个节点作为下一个E-节点。 从活节点表中取出所选择的节点并进行扩充,直到找到解或活动表为空,扩充过程才结束。 选择E-节点的方法 先进先出:活节点表的性质与队列相同 最小耗费或最大收益:每个节点都有一个对应的耗费或收益 查找一个具有最小耗费的解,则活节点表可用最小堆来建立 搜索一个具有最大收益的解,则活节点表可用最大堆来构造活节点表 下一个 E-节点就是满足条件的活节点 示例1:迷宫老鼠问题 示例2:0/1背包问题 FIFO分支定界 FIFO分支定界法小结 对于迷宫问题,FIFO法总能找到从入口到出口的最短路径;而回溯法却不能保证 在解空间树上的FIFO法,类似从根节点出发的BFS方法; 与BFS的区别在于:在FIFO分支定界中,不可行的节点不会被搜索! 最大收益-分支定界思想 使用一个最大堆:其中的 E-节点按照每个活节点收益值的降序,或是按照活节点任意子树的叶节点所能获得的收益估计值的降序从队列中取出 再解示例2:最大收益法 最大收益-分支定界小结 定界函数确定最大收益的上限;如果一个节点的定界函数值不大于目前最优解的收益值,则此节点会被删除而不作为E-节点展开 节点取出策略:使节点按照它们收益的定界函数值的非升序从最大堆中取出;这种策略从可能到达一个好的叶节点的活节点出发,而不是从目前具有较大收益值的节点出发 示例3:旅行商问题 FIFO分支定界 再解示例3:最小耗费法 使用最小堆存储活节点 最小耗费-分支定界小结 定界函数确定最小耗费的下限;如果一个节点的定界值不比当前最优旅行更小,则将被删除而不被展开 节点取出策略:使节点按照它们耗费的定界函数值的非降序从最小堆中取出 分支定界法-小结 设计定界函数的原则:利用最少的时间,在内存允许范围内去解决问题 好的定界函数:一个能够有效地减少计算时间,并因此使产生的节点数目也减少 通过产生具有最少节点的树来解决问题并不是根本的目标 分支定界法 VS. 回溯法 分支定界法在直觉上好于回溯法,在寻找最优解的许多情况下,可能会比回溯法检查更少的节点 但是,回溯法比分支定界在占用空间方面更具优势:回溯法是O(解空间的最大路径长度);分支定界是O(解空间大小) 子集树:O(2n) VS. O(n) 排列树:O(n!) VS. O(n) 课后练习 Page519:练习2,0/1背包问题 1) 绘制n=4时,解空间树 2) 描述FIFO -分支定界过程 4) 描述最大收益-分支定界过程 2、算法的应用 货箱装船问题:子集树 FIFO分支定界 最大收益分支定界 旅行商问题:排列树 最小耗费分支定界 (1)货箱装船问题 1)FIFO分支定界 Page519:程序17-1 注意:队列权值-1,标识活节点表的结尾 AddLiveNode可能会失败!需处理异常 时间和空间复杂度: O(2n) FIFO分支定界的优化 目的:当右孩子对应的重量加上剩余货箱的重量超出 bestw时,才选择右孩子 问题:在i变为n之前, bestw的值一直保持不变,因此在i等于n之前对右孩子的测试总能成功 解决方法:应当提早改变 bestw的值,即:由于仅在向左子树移动时最优装载重量才会增大,因此可以在每次进行这种移动时改变 bestw的值 Page521:程序17-2 寻找最优子集 FIFO分支定界寻找最优子集:记录从每个活节点到达根的路径 在找到最优装载所对应的叶节点之后,就可以利用所记录的路径返回到根节点来设置 x 的值 定义活节点队列中元素类型 templateclass T class QNode { …… private: QNode *parent; // 指向父节点的指针 bool LChild; // 当且仅当是父节点的左孩子时,为true T weight; //由到达本节点的路径所定义的部分解的值 }; (2)最大

文档评论(0)

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

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

1亿VIP精品文档

相关文档