- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)