算法基础 chap6学习资料.ppt

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

*************布线问题3.算法描述P168-169 由于每个方格成为活结点进入活结点队列最多1次,活结点队列中最多只处理O(mn)个活结点。扩展每个活结点需要O(1)时间,因此共耗时O(mn)。构造相应的最短路径需要O(L)时间,其中,L是最短路径的长度。*1.问题描述 有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这两艘轮船。如果有,找出一种装载方案。容易证明:如果一个给定装载问题有解,则采用下面的策略可得到最优装载方案。首先将第一艘轮船尽可能装满;将剩余的集装箱装上第二艘轮船。装载问题(6.3)*2.队列式分支限界法算法maxLoading实现对解空间的分支限界搜索,队列queue用于存放活结点表,队列元素的值表示活结点相应的当前载重量。现在如何控制进入下一层的搜索?同层结束标志!当队列元素值为-1时,表示队列到达解空间树中同一层结点的尾部。同层结束标志何时入队列?开始下一层的处理之前!装载问题队列式分支限界法解装载问题时同层结点都在一起,所以通过在层之间加入一个同层结束标志(-1),来区分结点层次。*算法描述在算法maxLoading的while循环中,首先检测当前扩展结点的左儿子结点是否为可行结点(是否满足约束函数)。如果是则将其加入到活结点队列中。然后将其右儿子结点加入到活结点队列中(右儿子结点一定是可行结点)。2个儿子结点都产生后,当前扩展结点被舍弃。如何加入活结点队列?(算法enQueue)叶子结点:i=n,不会被进一步扩展,因此不加入活结点队列,必要时更新最优解。内部结点:in,直接加入活结点队列。装载问题*活结点队列中的队首元素被取出作为当前扩展结点。控制是否进入下一层?由于队列中每一层结点之后都有同层结束标记-1,故在取队首元素时,活结点队列一定不空。取出的元素是-1,判断队列是否为空。队列为空:没有活结点,算法结束。队列非空:控制进入下一层,则将尾部标记-1加入活结点队列,算法开始处理下一层的活结点。取出的元素不是-1,控制不会进入下一层,扩展当前结点,分别检查其左、右子树。算法描述:P159-160装载问题PublicclassFIFOBBLoading{staticintn;staticintbestw;//当前最优载重量staticArrayQueuequeue;//活节点队列 publicstaticintmaxloading(int[]w,intc){//初始化 n=w.length-1;bestw=0;queue=newArrayqueue();queue.put(newInteger(-1));inti=1;intew=0;//搜索子集空间树While(true){//检查左儿子节点If(ew+w[i]=c)enQueue(ew+w[i],i);//右儿子节点总是可行enQueue(ew,i);ew=((Integer)queue.remove()).intValue();If(ew==-1){ *//同层节点尾部If(queue.isEmpty()returenbestw;Queue.put(newInteger(-1));Ew=((Integer)queue.remove()).intValue();i++;//控制进入下一层}}}PrivatestaticvoidenQueue(intwt,inti){//将活节点加入活节点队列If(i==n){ if(wtbestw)bestw=wt;}Else queue.put(newInteger(wt));}}*3.算法的改进设bestw是当前最优解;ew是当前扩展结点所相应的重量;r是剩余集装箱的重量。则当ew+r?bestw时,可将其右子树剪去。分支限界法中,算法搜索到第一个叶子结点前,bestw=0,r0,因此ew+rbestw,剪枝策略不起作用。回溯法中是如何处理bestw的?回溯法中,初始状态bestw=0,直到搜索到第一个叶子结点更新bestw的值。不需要提前更新bestw的值,因为回溯法是深度优先算法,搜索很快到达叶子结点更新bestw的值,从而使其在后续的搜索过程中起作用。装载问题*算法最终得到的bestw值,是子集树中所有可行结点相应重量的最大值,而结点相应的重量只有搜索进入左子树时增加。因此,为了确保右子树成

文档评论(0)

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

一线鞋类设计师,喜欢整理收集文档。

1亿VIP精品文档

相关文档