算法_六分支限界_2016讲解.pptx

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教材: [1][王] 王晓东,计算机算法设计与分析(第4版),电子工业. [2][S] 唐常杰等译, Sipser著, 计算理论导引, 机械工业. 参考资料: [3][C] 潘金贵等译, Cormen等著, 算法导论, 机械工业. [4][M] 黄林鹏等译, Manber著, 算法引论-一种创造性方法, 电子. [5][刘] 刘汝佳等, 算法艺术与信息学竞赛, 清华大学. [6][L] Lewis等著, 计算理论基础, 清华大学. 计算理论与 算法分析设计 刘 庆 晖 第6章 分支限界 1. 任务分派问题分析 2. 分支限界一般步骤 3. 装载问题 4. 最大团问题 5. 旅行售货员问题(TSP) 观察: 任务分配问题 任务 人 1 2 3 4 A 2 10 9 7 B 15 4 14 8 C 13 14 16 11 D 4 15 13 9 右表是不同人完成不同任务所需时间 找出总时间最少的分配方案 0 2 15 13 4 任务4 A B C D 任务3 任务2 任务1 任务1:4最少时间: 2, 4, 9, 7 ? 任务分配: 时间下界 任务 人 1 2 3 4 A 2 10 9 7 B 15 4 14 8 C 13 14 16 11 D 4 15 13 9 22 27 41 33 24 任务4 A B C D 任务3 任务2 任务1 任务1:4最少时间: 2, 4, 9, 7 以(当前时间+剩余最少时间)为关键值 扩展新的节点 第6章 分支限界 1. 任务分派问题分析 2. 分支限界一般步骤 3. 装载问题 4. 最大团问题 5. 旅行售货员问题(TSP) 分支限界的一般过程 1. 初始根节点是活节点(灰色), 其它节点都是白色 2. while(true) 3. 取一个活节点, 设为扩展节点(红色) 4. 将扩展节点的所有孩子设为活节点(灰色), 5. 扩展节点设为死节点(黑色) 取活节点: 先进先出队列 或 优先队列 结束: 队列空 或 到达叶节点(需要设计) Graph traversal 图遍历 有序遍历图的所有边和节点 深度优先搜索 Depth-first search(DFS) 广度优先搜索 Breadth-first search(BFS) Dijkstra: 优先队列与先进先出 1. 初始d[s]=0, 其它d[u]=INF, 2. S,Q空, Q.add(s,0), 3. 当Q非空 //Q是优先队列 4. Q.delete(u), 若u?S, continue(), 5. 将u添加到S中, 6. ?v?adj[u], 松弛(u,v), 7. 若d[v]改变, Q.add(v,d[v]) 松弛(u,v): 若d[v]d[u]+w[u,v], 则d[v]=d[u]+w[u,v] 输入: G=(V,E,w,s), w权, s起点; 输出: ?(s,·) 第6章 分支限界 1. 任务分派问题分析 2. 分支限界一般步骤 3. 装载问题 4. 最大团问题 5. 旅行售货员问题(TSP) 回溯: 装载问题w[1:n],c backtrack(t) 1. 若tn, 判断 记录 返回 2. r-=w[t] 3. 若 cw + w[t] ? c, 则 //左分支 4. cw+=w[t], backtrack(t+1), cw-=w[t], 5. 若 cw + r bestw, 则 6. backtrack(t+1) //右分支 7. r+=w[t] 时间: 回溯 O(2n), 动态规划 O(nC), 但可能C=O(2n) 空间: 回溯 O(n), 动态规划O(C), 分支限界: 装载问题w[1:n],c 1. Q.add(-1), //放入层分隔标记, FIFO 2. i=1, cw=0, bestw=0, r=sumi=2n w[i], //初始 3. while(true), 4. wt = cw + w[i], 5. 若 wt ? c, 若wtbestw, 则 bestw=wt, //更新bestw 6. 若in, Q.add(wt) //左分支 7. 若 cw+rbestw 且 in, Q.add(cw), //右分支 8.

文档评论(0)

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

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

1亿VIP精品文档

相关文档