- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算机算法设计与分析 计算机算法设计与分析 * 在黑板上辅助,将队列的进出显示出来。 * 与书上的有所不同。 * r=所有集装箱重量-第一个集装箱的重量 * 看书上的程序,详细讲解。 * 这个过程省去了许多中间过程,不完全正确。 * 计算机算法设计与分析 * 第六章分支限界法 * 计算机算法设计与分析 * 分支限界法 分支限界法也是在问题的解空间树T上搜索问题解的算法。 * 计算机算法设计与分析 * 分支限界法的基本思想 构造问题的解空间树。 以广度优先或以最小耗费优先方式搜索解空间树。 活结点一旦成为扩展结点,就一次性产生其所有儿子结点。 不能产生可行解或肯定不能产生最优解的儿子被删除,其余的被加入活结点表中。 从活结点表中取下一结点成为当前扩展结点,重复上述过程,直至找到所需的解或活结点表为空。 怎么取? 从下一扩展结点的不同方式导致不同的分支限界法。 FIFO分支限界法 将活结点表组织成为一个队列,按先进先出原则选择下一个结点。 优先队列分支限界法 将活结点表组织成为一个优先队列,并按队列中规定的优先级来选取优先级最高的下一个结点。通常,用一个与结点相关的数值p来表示。在算法实现时,通常采用堆结构实现。 * 计算机算法设计与分析 * 分支限界法与回溯法的比较 相同点:都是在解空间树上搜索问题解 不同点: 搜索方式不同:前者用的是深度优先搜索,后者用的是广度优先搜索或以最小耗费优先的方式搜索。 扩展结点的方式不同:前者扩展结点有多次机会成为扩展结点,后者只有一次机会。 * 计算机算法设计与分析 * S11 0-1背包问题的状态空间树 下面是n=3的0-1背包问题的状态空间树,其中:w=[16,15,15],p = [45,25,25],c =30 。采取队列式分支限界法。 SI 1 S1 0 S0 1 0 S10 1 S01 0 S00 1 S111 0 S110 1 S101 0 S100 1 S011 0 S010 1 S001 0 S000 S1 S10 S0 SI S10 SI S1 S100 S01 S00 S0 S100 * 计算机算法设计与分析 * 搜索路径的构造 在回溯法中,每次仅考察一条路径,因而只需要构造这一条路径即可:前进时记下相应结点,回溯时删去最末尾结点的记录。这比较容易实现。 在分支限界法中,是同时考察若干条路径,那么又该如何构造搜索的路径呢? 对每一个扩展的结点,建立三个信息: (1)该结点的名称; (2)它的评价函数值; (3)指向其前驱的指针; 这样一旦找到目标,即可逆向构造其路径。 * 计算机算法设计与分析 * 分支限界法的一般算法 计算初始结点s的f(s); [s, f(s), nil]插入队列; while (队列 ≠Φ) { 从队列中取出[p, f(p), x]。(根据具体方式,可以选择下一结点或f(p)为最小(大)); 若p是目标,则成功返回;否则 产生p的后继,并将后继结点插入队列中(可以按照一定规则淘汰一些结点) 将[p, f(p), x]从队列中删除; } * 计算机算法设计与分析 * 装载问题 有一批共n个集装箱要装上2艘载重量分别为c1,c2的轮船,其中集装箱i的重量为wi,且 。要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。 可证明,采用如下策略可以得到一个最优装载方案:先尽可能的将第一艘船装满,其次将剩余的集装箱装到第二艘船上。 这样我们要想办法尽可能的将第一艘船装满,即该问题等价于一个特殊的0-1背包问题:具体说明见书5.2节 * 计算机算法设计与分析 * 用分支限界法解装载问题 可以用回溯法解装载问题,具体请参考5.2小节。 我们同样可以用分支限界法来解装载问题。 首先来看看用队列式分支限界法解该问题。 * 计算机算法设计与分析 * 设置初始值,EW=0,bestw=0,i = 1 Q.add(-1) ; //同层结点尾部标志 While(true){ if(左儿子结点是活结点) 将该结点插入队列中; 将右儿子结点插入队列中; 取下一个扩展结点。 if(同层结点尾部){ if( 队列空 ) return 最优值; 插入同层结点尾部标记; 取下一扩展结点; i++ ;} } 队列式分支限界法解装载问题 数据结构: Q:活结点队列 EW:扩展结点对应的载重量 Bestw:当前最优载重量。 X[]:对应的最优解。 计算初始结点s的f(s); [s, f(s), nil]插入队列; while (队列 ≠Φ) { 从队列中取出[p, f(p), x]。(根据具体方式,可以选择下一结点或f
文档评论(0)