计算机算法设计与分析第4版王晓东习题解答.pdf_第1页
计算机算法设计与分析第4版王晓东习题解答.pdf_第2页
计算机算法设计与分析第4版王晓东习题解答.pdf_第3页
计算机算法设计与分析第4版王晓东习题解答.pdf_第4页
计算机算法设计与分析第4版王晓东习题解答.pdf_第5页
已阅读5页,还剩24页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第一章第一章 作业作业 1. 证明下列证明下列 、和和 的性质的性质 1 1) f=f= (g)当且仅当当且仅当 g=g=(f) 证明:充分性。若 f= (g),则必然存在常数 c10 和 n0,使得nn0,有 f c1*g(n)。由于 c10,故 g(n) 1/ c1 *f(n),故 g= (f)。 必要性。同理,若 g= (f),则必然存在 c20 和 n0,使得nn0,有 g(n) c2 *f(n).由于 c20,故 f(n) 1/ c2*f(n),故 f= (g)。 2 2) 若若 f= (g)(g)则则 g=g= (f)(f) 证明: 若 f= (g), 则必然存在常数 c10, c20 和 n0, 使得nn0, 有 c1*g(n) f(n) c2*g(n)。由于 c10,c20,f(n) c1*g(n)可得 g(n) 1/c1*f(n),同时, f(n) c2*g(n), 有 g(n) 1/c2*f(n), 即 1/c2*f(n) g(n) 1/c1*f(n), 故 g= (f)。 3 3) (f+g)= (f+g)= (max(f,g)(max(f,g),对于,对于和和 同样成立。同样成立。 证明:设 F(n)= (f+g),则存在 c10,和 n1,使得nn1,有 F(n) c1 (f(n)+g(n) = c1 f(n) + c1g(n) c1*maxf,g+ c1*maxf,g =2 c1*maxf,g 所以,F(n)= (max(f,g),即 (f+g)= (max(f,g) 对于 和 同理证明可以成立。 4 4) log(n!)= (nlogn) 2 证明: 由于 log(n!)= n i i 1 log n i n 1 log=nlogn,所以可得 log(n!)= (nlogn)。 由于对所有的偶数 n 有, log(n!)= n i i 1 log n ni i 2/ log n ni n 2/ 2/log(n/2)log(n/2)=(nlogn)/2-n/2。 当 n4, (nlogn)/2-n/2(nlogn)/4, 故可得n4, log(n!) (nlogn)/4, 即 log(n!)= (nlogn)。 综合以上两点可得 log(n!)= (nlogn) 2. 设计一个算法,求给定设计一个算法,求给定 n 个元素的第二大元素,并给出算法在最坏情况个元素的第二大元素,并给出算法在最坏情况 下使用的比较次数。 (复杂度至多为下使用的比较次数。 (复杂度至多为 2n-3) 算法: Void findsecond(ElemType A) for (i=2; idata) return (0); hl = EqualBtr (t1-Lchild, t2-Lchild); hr = EqualBtr (t1-Rchild, t2-Rchild); if(hl = 1 else return 0; 2.设计一个分治算法,求给定二叉树的高度。设计一个分治算法,求给定二叉树的高度。 设根结点为第一层的结点, 所有 k 层结点的左、 右孩子结点在 k+1 层。 因此,可以通过先序遍历计算二叉树中每个结点的层次,其中最大值即为 该二叉树的深度。具体算法如下: void Btdepth(bitreptr t, int k, int /表示结点的层次 if (k h) h = k; Btdepth(t-Lchild, k, h); Btdepth(t-Rchild, k, h); 3.设计一个分治算法,在一个具有设计一个分治算法,在一个具有 n 个数的数组中找出第二大元素,并给个数的数组中找出第二大元素,并给 13 出算法的复杂度。出算法的复杂度。 typedef struct MyTwoMax int Max; int SecMax; MyMax; MyMax getSecMax(int A,int low,int high)/分治求数值中最大的两个 元素 MyMax lm,rm,mm; int mid; if(high-lowr3 故从第二件物品开始贪心选择: 判定条件 背包已用部分 背包剩余部分 背包总价值 物 品放入情况 Cw2 15 25 25 (0, 1, 0) C-w2w1 40 0 25+(25/28)*35 (0.893, 1, 0) 即,背包最大价值为 56.25,放置情况为(0.893, 1, 0) 2. 用用 dijkstra 算法求解下图的单源最短路径问题,算法求解下图的单源最短路径问题,设源点为设源点为 1。 1 5 2 3 4 6 9 4 4 12 13 5 15 2 3 23 解: 1) X=1, Y=2,3,4,5,6 1=0, 2=9, 3=4, 4=, 5=, 6= 2) 选取 Y 集合中标记的最小值为3=4, 将顶点 3 加入到 X 集 合,即 X=1, 3, Y=2, 4,5,6 修改和顶点 3 相关顶点的值,即 2=8, 4=, 5=17, 6= 3) 选取 Y 集合中标记的最小值为2=8, 将顶点 2 加入到 X 集 合,即 X=1, 2, 3, Y=4,5,6 修改和顶点 2 相关顶点的值,即 4=20, 5=13, 6= 4) 选取 Y 集合中标记的最小值为5=13, 将顶点 5 加入到 X 集 合,即 X=1, 2, 3, 5, Y=4, 6 修改和顶点 5 相关顶点的值,即 4=16, 6=28 5) 选取 Y 集合中标记的最小值为4=16, 将顶点 4 加入到 X 集 合,即 X=1, 2, 3, 4, 5, Y=6 24 修改和顶点 4 相关顶点的值,即 6=18 6) 选取 Y 集合中标记的最小值为6=18, 将顶点 6 加入到 X 集 合,即 X=1, 2, 3, 4, 5, 6, Y= 故从源点到各个顶点的最短路径为: 132: 8 13: 4 1325: 13 13254: 16 132546: 18 3. 分别用分别用 Kruscal 和和 Prim 方法求下图的最小耗费生成树。方法求下图的最小耗费生成树。 解: 1)Prim 方法: (选取从 X 集合中顶点出发到 Y 集合中顶点终止的边里面 1 2 3 4 5 6 6 1 9 4 6 3 2 2 7 7 3 25 权值最小的,并将该终点加入到 X 集合) X=1, Y=2, 3, 4, 5, 6 可选边为: (1,2,1) , (1,3,6) , (1,4,2) 权值最小边为(1,2,1) 故 X=1,2, Y=3, 4, 5, 6 X=1,2, Y=3, 4, 5, 6 可选边为: (1,3,6) , (1,4,2) , (2,3,7) , (2,4,2) 权值最小边为: (1,4,2) 故 X=1,2,4, Y=3, 5, 6 X=1,2,4, Y=3, 5, 6 可选边为: (1,3,6) , (2,3,7) , (4,3,9) , (4,5,7) , (4,6,6) 权值最小边为: (1,3,6) 故 X=1,2,3,4, Y=5, 6 X=1,2,3,4, Y=5, 6 可选边为: (3,5,4) , (3,6,3) , (4,5,7) , (4,6,6) 权值最小边为: (3,6,3) 故 X=1,2,3,4,6, Y=6 X=1,2,3,4,6, Y=6 可选边为: (3,5,4) , (4,5,7) , (6,5,3) 权值最小边为: (6,5,3) 故 X=1,2,3,4,5,6, Y= 故最小耗费生成树的总耗费为:1+2+6+3+3=15 构造的最小耗费生成树为: 1 2 3 4 5 6 1 2 3 3 6 26 2)Kruscal 方法: (每次从边集里面选取边的权值最小且不和已有边构成回 路) 由图示可知:最小耗费生成树的总耗费为:1+2+3+3+6=15,共可以生成 4 棵最小耗费生成树。 1 2 3 4 5 6 1 2 3 4 5 6 1 1 2 3 4 5 6 1 2 1 2 3 4 5 6 1 2 3 1 2 3 4 5 6 1 2 3 3 1 2 3 4 5 6 1 2 3 3 6 27 第六章第六章 1. 用回溯法求解用回溯法求解1,2,3,4,5这这 5 个自然数中任取个自然数中任取 3 个数的组合。个数的组合。 解: 从 n 个不同元素中取 r 个不重复的元素组成一个子集,而不考虑其元 素的顺序,称为从 n 个中取 r 个的无重组合,例如 R = 1,2,3,4,5, n = 5, r = 3 则搜索空间树(略) : 无重组合为:1,2,3; 1,2,4; 1,2,5;1,3,4; 1,3,5; 1,4,5;2,3,4;2,3,5;2,4,5;3,4,5 int n, r; int C5; char used5; void combine(int pos, int h) int i; /如果已选了 r 个元素了,则打印它们 if (pos=r) for (i=0; ir; i+) cout Ci; cout endl; return; 28 for (i=h; i=n-r+pos; i+) /对于所有未用的元素 if (!usedi) Cpos = i+1; /把它放置在组合中 usedi+; /使用该元素 combine(pos+1,i+1); /搜索第 i+1 个元素 usedi-; /恢复递归前的值 2. 用回溯法求用回溯法求 6 皇后的解。皇后的解。 解:搜索空间树(略) ;可行解为:X1=(2,4,6,1,3,5); X2=(3,6,2,5,1,4); X3=(4,1,5,2,6,3); X4=(5,3,1,6,4,2) 3. 设计一个回溯算法,生成设计一个回溯算法,生成 1,2,3,n 的全排列。的全排列。 void

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论