计算机算法分析与设计(研究生)全册配套课件(二).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《计算机算法分析与设计(研究生)全册配套课件(二).ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 算法 分析 设计 研究生 配套 课件
- 资源描述:
-
1、计算机算法分析与设计(研究生)全册配套课件(二) 0-1背包问题(0-1Knapsack Problem )设有n个物体和一个背包,物体i的重量为wi价值为pi背包的载荷为M,若将物体i(1 i n,)装入背包,则有价值为pi .目标是找到一个方案,使得能放入背包的物体总价值最高算法设计与分析算法设计与分析 回溯法回溯法若取W= (20,15, 15), P= (40,25, 25), C=30例例 题题有限离散问题总可以用穷举法求得问题的全部有限离散问题总可以用穷举法求得问题的全部. .例如 取N=3 , 问题所有可能的解为(解空间): (0, 0, 0), (0, 0, 1), (0, 1
2、, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1) 可表示为一棵3层的完全正则二叉树时间复杂性: O(2n)求解过程相当于在树中搜索满足条件的叶结点.第五章. 回溯法回溯法 (Back tracking)设问题的解可表示为n元组(x1, x2, xn), xisi , si为有限集, n元组的子组(x1, x2, xi) i 回溯法回溯法E= E= (x1, x2, xn), xi si , si为有限集 称为问题的解空间解空间. .约束条件隐约束:元组的分量间满足函数关系f(x1,.xn)显约束:每个xi 的范围都给定的约束
3、.满足显约束的全体向量构成解空间.例例 题题算法设计与分析算法设计与分析 回溯法回溯法1.子集树子集树:当解向量为不定长n元组时, 树中从根至每一结点的路径集合构成解空间.树的每个结点称为一个解状态,有儿子的结点称为可扩展结点,叶结点称为终止结点, 若结点v对应解状态(x1, x2, xi),则其儿子对应扩展的解状态(x1, x2, xi, xi+1 ).满足所有约束条件的解状态结点称为回答结点.2.排序树排序树:当解向量为定长n元组时, 树中从根至叶结点的路径的集合构成解空间.树的每个叶结点称为一个解状态.解空间树构造:搜索按深度优先策略从根开始, 当搜索到任一结点时,判断该点是否满足约束条
4、件D(剪枝函数),满足则继续向下深度优先搜索,否则跳过该结点以下的子树(剪枝),向上逐级回溯.搜索过程搜索过程:求解过程可表示为在一棵解空间树 作 深度优先搜索深度优先搜索. 0-1背包问题设有n个物体和一个背包,物体i的重量为wi价值为pi背包的载荷为M,若将物体i(1 i n,)装入背包,则有价值为pi .目标是找到一个方案,使得能放入背包的物体总价值最高算法设计与分析算法设计与分析 回溯法回溯法 设N=3, W=(20,15,15), P=(40, 25, 25), C=30例例 题题x1=123x2=233x3=3ABCDEFGH子集树子集树排序树排序树中间结点可以是解,例如,只装物体
5、1,B是解只有叶结点可以是解xi表示第i次选择物体号Procedure BACKTRACK(n); k:=l; repeat if TK (x1,x2,.xK-1 )中的值未取遍 then xK:TK (x1,x2,., x K-1 )中未取过的一个值; if BK (x1, x2, ., x K) then /状态结点(x1,.xk)被激活 if kn then output(x1, x2, ., xk) /输出一个回答结点 e1se k:k + l; /深度优先 e1se k:k-l; /回溯 until k0;/回溯到根结点end;BACKTRACK算法模式算法模式回溯法解题步骤:1).
6、针对所给问题,定义问题的解空间2).确定解空间结构.3).以深度优先方式搜索解空间.算法设计与分析算法设计与分析 回溯法回溯法递归回溯算法设计与分析算法设计与分析 回溯法回溯法void Backtrack(int t) if (t n) Output(x); else / f(n,t): leftChild; g(n,t): rightChild for (int i = f(n,t); i 0) if (f(n,t) = g(n,t) /对剩下子树处理 for (int i = f(n,t);i 回溯法回溯法 子集和子集和 例如例如 设n=4, W=(11,13, 24, 7), M=31
7、满足约束条件的子集为(11,13,7), 和 (24, 7), 5.2 子集和问题 S=(1, 2, 4), 和 S=(3, 4), jiix1约束条件x1=w1w2 w3w4x2=w2 w3 w4w4w4w4w3w3 w4w4w4jiix1 + xj+1 M+ Mnjiiw1) )( (选xj+1代表的分枝不超界选xj+1代表的分枝最终能够达到M元素不能重复选取算法设计与分析算法设计与分析 回溯法回溯法算法思路算法思路2 2:问题的解可表示为n元向量x1, x2, . xn , xi=1或0 则问题的解空间树为排序树Mkwxiwkii) 1()(1约束条件: 子集和子集和+ Mnjiiw1)
8、 )( (jiixiw1) )( ( n=4, W=(11,13, 24, 7), M=31/即使选了下一个,和不超界,所以,选与不选的/子树都可以展开/未来值有可能使累和达到M procedure sumofsub(s,k,r); 正实数组Wl.n,布尔数组Xl.n).M,n:均为全局量。 Wl.n按非降次序排列,s= WjXj,r= Wj 假定WlM及 WiM Xk:=1; lf s+Wk=M then Print the result X1.k else if s+Wk+Wk+1M and s+Wk+1M then Xk:=0; sumofsub(s, k+1,r-Wk ); nkj11
9、kjnk 1算法复杂性算法复杂性:约为穷举法的1/3子集合问题回溯算法(排列树)算法设计与分析算法设计与分析 回溯法回溯法 子集合子集合/进右子树及条件(不选后不超界,且有达到M的可能)/进左子树及条件(选后不超界,而达到M的可能性在进入第k层时已保证)算法设计与分析算法设计与分析 回溯法回溯法 子集合子集合n=6,m=30,w=5,10,12,13,15,18时由算法生成的部分解空间树子集和s剩余元素之和r当前层次k算法设计与分析算法设计与分析 回溯法回溯法 n后问题5.3 装载问题问题描述问题描述:n个集装箱装到2艘载重量分别为c1,c2的货轮,其中集装箱i的重量为wi且 问题要求找到一个
10、合理的装载方案可将这n个货箱装上这2艘轮船。211ccwnii例如 当n=3, c1=c2=50, w=10, 40, 40, 可将货箱1和2装到第一艘船上;货箱3装到第二艘船上; 若w=20, 40, 40, 则无法将全部货箱装船.当当 时问题等价于子集和问题时问题等价于子集和问题; ; 当当c1=c2c1=c2且且 时时问题等价于划分问题问题等价于划分问题. .211ccwnii112cwnii若装载问题有解, 采用如下策略可得一个最优装载方案:(1)将第一艘轮船尽可能装满; (2)将剩余的货箱装到第二艘轮船上。将第一艘船尽可能装满等价于如下0-l背包问题:niiixw1m ma ax x
11、12cxwniiixi0,1, 1in可采用动态规划求解, 其时间复杂性为:O(2n)算法设计与分析算法设计与分析 回溯法回溯法 装载问题装载问题算法思路算法思路:用排序树表示解空间,则解为n元向量x1, . ,xn , xi0, 1 jiiixw1 + wj+1 c1约束条件:由于是最优化问题, 可利用最优解性质进一步剪去不含最优解的子树:设 bestw: 当前最优载重量, cw = : 当前扩展结点的载重量 ; r = : 剩余集装箱的重量;jiiixw1njijw1cw+r bestwjiiixw1 + wj+1 c1选wj+1就超界,所以,左分枝不能选剪左子树条件:剪右子树条件:不选w
12、j+1,结果无法达到最优,所以右分枝不能选算法设计与分析算法设计与分析 回溯法回溯法 装载问题装载问题例如 n=4, c1=12, w=8, 6, 2, 3.cw=0cw=8cw=14cw=8cw=10cw=13bestw=10cw=8bestw=11cw=0cw=6cw=8bestw=11算法设计与分析算法设计与分析 回溯法回溯法 装载问题装载问题templatevoid Loading:Backtrack(int i) / /搜索第i层结点 if (in) /到达叶结点 bestw=cw; return; /搜索子树 r - = wi; if (cw+wi bestw) /xi=0 Bac
13、ktrack(i+1); r+=wi; /复原 template Type Maxloading(type w, type c, int n,) loading X; /初始化X X. w=w; /集装箱重量数组 X. c=c; /第一艘船载重量 X. n=n;/集装箱数 X. bestw=0; /当前最优载重 X. cw=0;/当前载重量 X. r=0; /剩余集装箱重量 for (int i=1; i 回溯法回溯法 n后问题53 批处理作业调度批处理作业调度问题描述问题描述:给定n个作业的集合J=(J1, J2, . , Jn)。每一作业Ji都有两项任务要分别在2台机器上完成. 每一作业须
14、先由机器l处理, 再由机器2处理. 设tji是作业Ji在机器j上的处理时间, i=1,.,n, j=1, 2.Fji是作业Ji在机器j上完成处理的时间. 所有作业在机器2上完成时间和: f=F2i 称为该作业调度的完成时间和完成时间和.对于给定的J, 要求制定一个最佳作业调度方案, 使完成时间和最小.算法思路算法思路:设解为n元向量x1,. ,xn , xi1,.n, 用排序树表示解空间 约束条件: 当i j , xi xj (元素不能重复选取) 例例 题题例例 题题算法设计与分析算法设计与分析 回溯法回溯法 作业调度void Flowshop: :Backtrack(int i) if (i
15、n) for(int j = 1;j = n; j+) bestxj = xj; bestf = f; else for (int j = i; j fl)?f2i-1:fl) +Mxj2; f+= f2i; if (f bestf) Swap(xi, xj); Backtrack(i + 1 ); Swap(xi, xj ); fl - = Mxj1; f- = f2i ;int Flow(int * M, int n, int bestx ) int ub = 32767; Flowshop X; X.x = new int n+ 1; /当前调度 X.f2 = new intn+ l;
16、X.M = M; /各作业所需处理时间 X.n= n; /作业数 X.bestx = bestx; /当前最优调度 X. bestf = ub; /当前最优调度时间 X.fl = 0; /机器2完成处理时间 X.f = 0; /机器1完成处理时间 for(int i = 0;i 回溯法回溯法 作业调度 机器1 机器2 作业1 2 1 作业2 3 1 作业3 2 3 tji 这三个作业的6种可能调度方案是: 1, 2, 3; 1, 3, 2; 2, 1, 3; 2, 3, 1; 3, l, 2; 3, 2, l;相应的完成时间和分别是: 10, 8, 10,9,7,8。最佳调度: 3, 1, 2
17、; 完成时间为7。机器1机器2J1J1J3J3J2J2调度1,3,2例例 题题机器1机器2J3J3J2J2调度3,1,2J1J1算法设计与分析算法设计与分析 回溯法回溯法 作业调度 机器1 机器2 作业1 2 1 作业2 3 1 作业3 2 3 tji 这三个作业的6种可能调度方案是: 1, 2, 3; 1, 3, 2; 2, 1, 3; 2, 3, 1; 3, l, 2; 3, 2, l;相应的完成时间和分别是: 10, 8, 10,9,7,8。最佳调度: 3, 1, 2; 完成时间为7。x1=J1J2J3x2=J2J3J1x3=J3ABCDEFJ2bestx=7J3EFJ3J1J2EFJ2
18、J2J1例例 题题算法思路算法思路:将棋盘从左至右,从上到下编号为1,.,n,皇后编号为1,.,n. 设解为(x1, ., xn) , xi为皇后i的列号,且xi位于第i行.解空间:E=(x1,., xn) | xiSi, i=1,.,n, Si=1, ., n,1 i n解空间为排列树.其约束集合D为 1) xi xj 2) xi-i xj-j 3) xi+i xj+j皇后i,j不在同一斜线上算法设计与分析算法设计与分析 回溯法回溯法 n后问题5.3 n后问题皇后i,j不在同一列上问题描述问题描述:nxn棋盘上放置n个皇后使得每个皇后互不受攻击. 即任二皇后不能位于同行同列和同一斜线上. 如
19、四后问题的解算法设计与分析算法设计与分析 回溯法回溯法 n后问题回溯求解四后问题过程中被激活过的结点算法设计与分析算法设计与分析 回溯法回溯法 n后问题算法设计与分析算法设计与分析 回溯法回溯法 n后问题bool Queen: Place(int k) for (int j = 1; j n) sum+; else for (int i=1;i = n;i+) xt = i; if (Place(t) Backtrack(t + 1) intn Queen(int n) QueenX; /初始化X X. n=n;/皇后个数 X. sum=0; int*p=new int n+1; for(in
20、t i=0;i 回溯法回溯法 最大团问题设无向图G=(V, E), UV, 若对任意u, vU, 有(u,v) E, 则称U是G的一个完全子图。G的完全子图U是G的一个团团(完备子图完备子图)当且仅当U不包含在G的更大的完全子图中。G的最大团最大团是G中所含顶点数最多的团。如果UV,且对任意u,vU,(u,v )E, 则称U是G的一个空子图空子图。G的空子图U是G的一个独立集独立集当且仅当U不包含在G的更大的空子图中。G的最大独立集最大独立集是G中所含顶点数最多的的独立集。*若U是G的一个完全子图,则U是G的补图 的一个独立集.5.7 最大团问题最大团问题 问题描述:在G 中找一个最大团. G
21、例如最大团:1, 2, 5, 1, 4, 5, :2, 3, 5G的补图基本概念设无向图G=(V, E), |V|=n,用邻接矩阵a表示图G, 问题的解可表示为n元向量x1, . xn , xi0,1. 问题的解空间用排序树表示.约束条件:x1,x2,.xixi+1是团.目标函数限界:设 bestn: 已求出的最大团的尺寸; cn : 当前团的尺寸 ; r :剩余结点数目;当 cn+r bestn 时, 将cn对应右子树剪去。.算法设计与分析算法设计与分析 回溯法回溯法 最大团问题 算法思路算法思路.101101算法设计与分析算法设计与分析 回溯法回溯法 最大团问题 最大团问题的回溯算法voi
22、d clique:Backtrack(int i) if (cn+n- ibestn) if (in) /找到更大团,更新 xi = 0; /进入右子树 for (int j=1; j=n;j+) Backtrack(i + 1); bestxj = xj; bestn = cn; return; /检查顶点i是否与当前团相连 int OK = 1; for(int j =1; j 回溯法回溯法 着色问题图的m色判定问题: 给定无向连通图G和m种颜色。用这些颜色为图G的各顶点着色. 问是否存在着色方法, 使得G中任2邻接点有不同颜色。图的m色优化问题:给定无向连通图G,为图G的各顶点着色, 使
23、图中任2邻接点着不同颜色,问最少需要几种颜色。所需的最少颜色的数目m称为该图的色数。5.8 图的图的m m着色问题着色问题 问题描述若图G是个平面图,则它的色数不超过4色(4色定理). 4色定理的应用:在一个平面或球面上的任何地图能够只用4种颜色来着色使得相邻的国家在地图上着有不同颜色4321512345a).a).将将G的结点按照度数递减的次序排列的结点按照度数递减的次序排列. . b).b).用第一种颜色对第一个结点着色用第一种颜色对第一个结点着色, ,并按照结点排列的次序并按照结点排列的次序 对与前面着色点不邻接的每一点着以相同颜色对与前面着色点不邻接的每一点着以相同颜色. .c).c)
24、.用第二种颜色对尚未着色的点重复步骤用第二种颜色对尚未着色的点重复步骤b).b).用第三种颜色用第三种颜色 继续这种作法继续这种作法, , 直到所有点着色完为止直到所有点着色完为止. . 任意图的着色任意图的着色Welch PowellWelch Powell法法a1a5a4a6a2a3a7a8 排序排序: :a5, a3, a7, a1, a2, a4, a6, a8 着第一色着第一色: a5, a1,着第二色着第二色:a3,a4, a8着第三色着第三色:a7, a2, a6图论图论 对偶图与着色对偶图与着色算法设计与分析算法设计与分析 回溯法回溯法 图的m着色设图G=(V, E), |V|
25、=n, 颜色数= m, 用邻接矩阵a表示G, 用整数1, 2m来表示m种不同的颜色。顶点i所着的颜色用xi表示。问题的解向量可以表示为n元组x= x1,.,xn . xi1,2,.,m,解空间树为排序树,是一棵n+1层的完全m叉树.在解空间树中做深度优先搜索, 约束条件: xi xj, 如果aji=1. 算法思路n=3, m=3n=3, m=3时的解空间树时的解空间树132011101110a=算法设计与分析算法设计与分析 回溯法回溯法 着色问题 int mColoring(int n, int m, int *a ) Color X; /初始化X Xn=n; /图的顶点数 Xm=m /可用颜
展开阅读全文