收藏 分享(赏)

算法分析期末试题集答案(6套).doc

上传人:tkhy51908 文档编号:5526902 上传时间:2019-03-06 格式:DOC 页数:48 大小:900.50KB
下载 相关 举报
算法分析期末试题集答案(6套).doc_第1页
第1页 / 共48页
算法分析期末试题集答案(6套).doc_第2页
第2页 / 共48页
算法分析期末试题集答案(6套).doc_第3页
第3页 / 共48页
算法分析期末试题集答案(6套).doc_第4页
第4页 / 共48页
算法分析期末试题集答案(6套).doc_第5页
第5页 / 共48页
点击查看更多>>
资源描述

1、算法分析与设计期末复习题 (一)一、 选择题1.应用 Johnson 法则的流水作业调度采用的算法是(D)A. 贪心算法 B. 分支限界法 C.分治法 D. 动态规划算法2.Hanoi 塔问题如下图所示。现要求将塔座 A 上的的所有圆盘移到塔座 B 上,并仍按同样顺序叠置。移动圆盘时遵守 Hanoi 塔问题的移动规则。由此设计出解 Hanoi 塔问题的递归算法正确的为:(B)Hanoi 塔A. void hanoi(int n, int A, int C, int B)if (n 0)hanoi(n-1,A,C, B);move(n,a,b);hanoi(n-1, C, B, A);B. vo

2、id hanoi(int n, int A, int B, int C)if (n 0)hanoi(n-1, A, C, B);move(n,a,b);hanoi(n-1, C, B, A);C. void hanoi(int n, int C, int B, int A)if (n 0)hanoi(n-1, A, C, B);move(n,a,b);hanoi(n-1, C, B, A);3. 动态规划算法的基本要素为(C)A. 最优子结构性质与贪心选择性质B重叠子问题性质与贪心选择性质C最优子结构性质与重叠子问题性质D. 预排序与递归调用4. 算法分析中,记号 O 表示(B) , 记号 表

3、示( A) , 记号 表示(D) 。A.渐进下界B.渐进上界C.非紧上界D.紧渐进界E.非紧下界5. 以下关于渐进记号的性质是正确的有:(A)A. f(n)g(),n(h)f(nh()B. O)OfC. O(f(n)+O(g(n) = O(minf(n),g(n) D. f(n)g()(n)f()6. 能采用贪心算法求最优解的问题,一般具有的重要性质为:(A)A. 最优子结构性质与贪心选择性质B重叠子问题性质与贪心选择性质D. void hanoi(int n, int C, int A, int B)if (n 0)hanoi(n-1, A, C, B);move(n,a,b);hanoi(

4、n-1, C, B, A);C最优子结构性质与重叠子问题性质D. 预排序与递归调用7. 回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。A 广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间树。A 广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块(A)是回溯法中遍历排列树的算法框架程序。A.B. C.void backtrack (int t)if (tn) output(x);elsefor (int i=t;in) output(x);elsefor (int i=0

5、;in) output(x);elsefor (int i=0;in) output(x);elsefor (int i=t;i0,存在正数和 n0 0 使得对所有n n0有:0 f(n)0,存在正数和 n0 0 使得对所有n n0有:0 cg(n) 0,存在正数和 n0 0 使得对所有 nn0有:0 f(n)0,存在正数和 n0 0 使得对所有 nn0有:0 cg(n) sum) sum=thissum;besti=i;bestj=j;return sum;2. 有 11 个待安排的活动,它们具有下表所示的开始时间与结束时间,如果以贪心算法求解这些活动的最优安排(即为活动安排问题:在所给的活

6、动集合中选出最大的相容活动子集合) ,得到的最大相容活动子集合为活动( 1,4,8,11 ) 。3. 所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到) 。4. 所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解) 。5. 回溯法是指(具有限界函数的深度优先生成法) 。6. 用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树 中从根结点到叶结点的最长路径的长度为 h(n),则回溯法所需的计算空间通常为(O(h(n)) 。7. 回溯法的算法框架按照问题的解空间一般分为(子集

7、树)算法框架与(排列树)算法框架。8. 用回溯法解 0/1 背包问题时,该问题的解空间结构为(子集树)结构。9.用回溯法解批处理作业调度问题时,该问题的解空间结构为(排列树)结构。10.用回溯法解 0/1 背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容:1413121110987654fi122886535031Si1110987654321iTypep Knap:Bound(int i)/ 计算上界Typew cleft = c - cw; / 剩余容量Typep b = cp; / 结点的上界/ 以物品单位重量价值递减序装入物品while (i n) / 到达叶结点更新

8、最优解 bestx,bestw;return;r -= wi;if (cw + wi bestw) xi = 0; / 搜索右子树backtrack(i + 1); r += wi;5. 用分支限界法解装载问题时,对算法进行了一些改进,下面的程序段给出了改进部分;试说明斜线部分完成什么功能,以及这样做的原因,即采用这样的方式,算法在执行上有什么不同。/ 检查左儿子结点Type wt = Ew + wi; / 左儿子结点的重量if (wt bestw) bestw = wt;/ 加入活结点队列if (i bestw max,ijcijcijijxyij 在程序中,bij记录 Cij的值是由哪一个

9、子问题的解得到的。(1) 请填写程序中的空格,以使函数 LCSLength 完成计算最优值的功能。void LCSLength(int m,int n,char *x,char *y,int *c,int *b) int i,j;for (i = 1; i =cij-1) cij=ci-1j; bij=2;else cij=cij-1; bij=3; (2) 函数 LCS 实现根据 b 的内容打印出 Xi 和 Yj 的最长公共子序列。请填写程序中的空格,以使函数 LCS 完成构造最长公共子序列的功能(请将 bij的取值与(1)中您填写的取值对应,否则视为错误) 。8.对下面的递归算法,写出调用

10、 f(4)的执行结果。void LCS(int i,int j,char *x,int *b)if (i =0 | j=0) return;if (bij= 1) LCS(i-1,j-1,x,b);cout0 ) printf(“%dn “,k);f(k-1);f(k-1);算法分析与设计期末复习题 (二)一、简要回答下列问题 :1. 算法重要特性是什么? 2. 算法分析的目的是什么?3. 算法的时间复杂性与问题的什么因素相关?4. 算法的渐进时间复杂性的含义?5. 最坏情况下的时间复杂性和平均时间复杂性有什么不同?6. 简述二分检索(折半查找)算法的基本过程。7. 背包问题的目标函数和贪心算

11、法最优化量度相同吗?8. 采用回溯法求解的问题,其解如何表示?有什么规定?9. 回溯法的搜索特点是什么? 10.n 皇后问题回溯算法的判别函数 place 的基本流程是什么?11.为什么用分治法设计的算法一般有递归调用?12.为什么要分析最坏情况下的算法时间复杂性? 13.简述渐进时间复杂性上界的定义。14.二分检索算法最多的比较次数?15.快速排序算法最坏情况下需要多少次比较运算?16.贪心算法的基本思想?17.回溯法的解(x 1,x2,xn)的隐约束一般指什么?18.阐述归并排序的分治思路。19.快速排序的基本思想是什么。 20.什么是直接递归和间接递归?消除递归一般要用到什么数据结构?2

12、1.什么是哈密顿环问题?22.用回溯法求解哈密顿环,如何定义判定函数?23.请写出 prim 算法的基本思想。参考答案:1. 确定性、可实现性、输入、输出、有穷性2. 分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。3. 算法的时间复杂性与问题的规模相关,是问题大小 n 的函数。4当问题的规模 n 趋向无穷大时,影响算法效率的重要因素是 T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用 T(n)的数量级(阶)评价算法。时间复杂度 T(n)的数量级(阶)称为渐进时间复杂性。5. 最坏情况下的时间复杂性和平均时间复杂性考察的是 n 固定时,不同输入实例下的

13、算法所耗时间。最坏情况下的时间复杂性取的输入实例中最大的时间复杂度:W(n) = max T(n, I) , IDn平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和:A(n) =P(I)T(n , I) IDn6. 设输入是一个按非降次序排列的元素表 Ai:j 和 x,选取 A(i+j)/2与 x 比较,如果 A(i+j)/2=x,则返回(i+j)/2,如果 A(i+j)/2M then return endifaa+iii+1 ;repeatend 解: i1 ;s0 时间为:O(1)while i n do 循环 n 次循环体内所用时间为 O(1)所以 总时间为:T(n)=O(1)

14、+ nO(1)= O(n)3.procedure PARTITION(m,p)Integer m,p,i;global A(m:p-1)vA(m);imloop1)2/()(ncTan ncakTcnnklog)1(24/)2/()(loop ii+1 until A(i) v repeatloop pp-1 until A(p) v repeatif i1 时 F1(n)的时间复杂度与 F2(2,n,1,1)的时间复杂度相同即为为 O(n)5.procedure MAX(A,n,j)xmaxA(1);j1for i2 to n doif A(i)xmax then xmaxA(i); ji;

15、endifrepeatend MAX解:xmaxA(1);j1 时间为:O(1)for i2 to n do 循环最多 n-1 次所以 总时间为:T(n)=O(1)+ (n-1)O(1)= O(n)6.procedure BINSRCH(A,n,x,j)integer low,high,mid,j,n;low1;highnwhile lowhigh domid |_(low+high)/2_|case:xA(mid):lowmid+1:else:jmid; returnendcaserepeatj0end BINSRCH解:log2n+1三、算法理解1、写出多段图最短路经动态规划算法求解下列实

16、例的过程,并求出最优值。各边的代价如下:C(1,2)=3, C(1,3)=5 ,C(1,4)=2 C(2,6)=8 ,C(2,7)=4 ,C(3,5)=5 ,C(3,6)=4, C(4,5)=2,C(4,6)=1C(5,8)=4, C(6,8)=5 ,C(7,8)=6解:Cost(4,8)=0Cost(3,7)= C(7,8)+0=6 ,D5=8Cost(3,6)= C(6,8)+0=5, D6=8Cost(3,5)= C(5,8)+0=4 D7=8Cost(2,4)= minC(4,6)+ Cost(3,6), C(4,5)+ Cost(3,5)= min1+ 5, 2+4=6 D4=6Co

17、st(2,3)= minC(3,6)+ Cost(3,6) = min4+5=9 D3=5Cost(2,2)= minC(2,6)+ Cost(3,6), C(2,7)+ Cost(3,7)= min8+5, 4+6=10 D2=7Cost(1,1)= minC(1,2)+ Cost(2,2), C(1,3)+ Cost(2,3), C(1,4)+ Cost(2,4)= min3+10, 5+9,2+6= 8D1=414682、 写出 maxmin 算法对下列实例中找最大数和最小数的过程。数组 A=(48,12,61,3,5,19,32,7) 51 342678解:写出 maxmin 算法对下

18、列实例中找最大数和最小数的过程。数组 A=() 1、 48,12,61,3, 5,19,32,72、48,12 61,3 5,19 32,73、 4861, 123 1932,574、 6132 355、 61 33、 快速排序算法对下列实例排序,算法执行过程中,写出数组 A 第一次被分割的过程。A=(65,70,75,80,85,55,50,2)解:第一个分割元素为 654、 归并排序算法对下列实例排序,写出算法执行过程。A=(48,12,61,3,5,19,32,7)解: 48,12,61,3 5,19,32,748,12 61,3 5,19 32,712,48 3,61 5,19 7,3

19、23, 12, 48, 61 5, 7, 19,323,5, 7,12,19,32,48,61 5、 写出图着色问题的回溯算法的判断 Xk是否合理的过程。解:i0while iCU: x3CU/ W3=3/8;实例的解为:(1,1,3/8,0)11、有一个有序表为1,3,9,12,32,41,45,62,75,77,82,95,100,当使用二分查找值为 82 的结点时,经过多少次比较后查找成功并给出过程。解:有一个有序表为1,3,9,12,32,41,45,62,75,77,82,95,100,当使用二分查找值为 82 的结点时,经过多少次比较后查找成功并给出过程。一共要要执行四次才能找到值

20、为 82 的数。12、使用 prim 算法构造出如下图 G 的一棵最小生成树。12 435 6dist(1,2)=6;dist(2,5)=3;dist(5,6)=6;dist(6,4)=2;dist(4,1)=5; dist(1,3)=1;dist(2,3)=5;dist(3,4)=5;dist(3,6)=4;dist(5,3)=6解:使用普里姆算法构造出如下图 G 的一棵最小生成树。12 435 6dist(1,2)=6;dist(2,5)=3;dist(5,6)=6;dist(6,4)=2;dist(4,1)=5; dist(1,3)=1;dist(2,3)=5;dist(3,4)=5;d

21、ist(3,6)=4;dist(5,3)=61316136412645126343313、有如下函数说明int f(int x,int y) f=x Mod y +1;已知 a=10,b=4,c=5 则执行 k=f(f(a+c,b),f(b,c)后,k 的值是多少并写出详细过程。解:有如下函数说明int f(int x,int y) f=x Mod y +1;已知 a=10,b=4,c=5 则执行 k=f(f(a+c,b),f(b,c)后,k 的值是多少并写出详细过程。K 的值是 514、McCathy 函数定义如下:当 x100 时 m(x)=x-10;当 x100 时 m(x)=x-10;

22、当 x100) return(x-100);elsey=m(x+11);return (m(y); 15、 设计一个算法在一个向量 A 中找出最大数和最小数的元素。解:设计一个算法在一个向量 A 中找出最大数和最小数的元素。Void maxmin(A,n)Vector A;int n;int max,min,i; max=A1;min=A1;for(i=2;imax)max=Ai;else if(Aicu then exit endifX(i) 1cucu-W(i)repeatend GREEDY-KNAPSACK根据算法得出的解:X=(1,1,1,1,1,0,0)获利润 52, 而解(1,1

23、,1,1, 0, 1,0)可获利润 54 因此贪心法不一定获得最优解。4. 设计只求一个哈密顿环的回溯算法。解:Hamiltonian(n)k1; xk 0;While k0 do xk xk+1;while B(k)=false and xkn doxk xk+1; repeatIf xkn then if k=n then print x; returnelse k k+1; xk0; endifelse k k-1endifrepeatendprocedure B(k) Gxk-1,xk 1 then return false;for i1 to k-1 doif xi=xk then

24、return false;endifrepeatreturn true; 5利用对称性设计算法,求 n 为偶数的皇后问题所有解。解:利用对称性设计算法,求 n 为偶数的皇后问题所有解。procedure NQUEENS1(n)a0 /计数器清零X(1)0;k1 /k 是当前行;X(k)是当前列/While k0 do /对所有的行执行以下语句/1) X(k)X(k)+1 /移到下一列/While X(k)n and not PLACE(k) do 2) X(k)X(k)十 lif X(k)n then if k=n /then print(X),aa+1 /找到一个解计数器 a 加 1/if

25、a=n/2 then return / 找到 n/2 个解算法结束3) else kk+1;X(k)0; 4) else kk1 /回溯/end NQUEENS武汉工业学院工商学院 2008 2009 学年第 1 学期算法分析考试试卷(A 卷)课程名称 算法分析 编号 03080121 题号 一 二 三 四 五 六 七 八 总分得分评 阅 人注:1、考生必须填写班级、姓名、学号;2、试题纸共 1 页。1、对于下列各组函数 f(n)和 g(n),确定 f(n)=O(g(n)或 或)()(ngf,并简述理由。 (12 分))()(ngf(1) ;5log)(;lo2nf(2) 102(3) ;3;

26、)(nf解:简答如下:(1) , (2) , (3))5(logl2)10(2nn)(n2、试用分治法实现有重复元素的排列问题:设 是要进行排列的,.21nrR个元素,其中元素 可能相同,试计算 的所有不同排列。 (13 分)nnr,.21解:解答如下:Templatevoid Perm(Type list,int k,int m)if(k= =m)for(int i=0;iint ok(Type list,int k,int i)if(ik) for(int t=k;tint BinarySearch(Type a,const Typewhile(leftamiddle) left=midd

27、le+1; (8 分)else right=middle-1;return -1;( 12 分)4、试用动态规划算法实现 0-1 闭包问题。 (15 分)解:解答如下:Templatevoid Knapsack(Type v,int w,int c,int n,Type *m)Int jMax=min(wn-1,c);for(int j=0;j1;i-)jMax=min(wi-1,c);for(int j=0;j=w1) m1c=max(m1c,m2c-w1+v1); (10 分)TemplateVoid Traceback(Type *m,int w,int c,int n,int x)fo

28、r(int i=1;iak)k+;ak=ak-1+1;n-=ak;(10 分)if(n= =ak) ak+;n-;for(int i=0;isum) sum=max;return sum; (10 分)int MaxSum(int n,int *a)int sum=0,b=0;for(int i=1;i0) b+=ai;else b=ai;if(bsum) sum=b;Return sum; (15 分)7、试用回溯法解决下列整数变换问题:关于整数 的变换 和 定义如下:ifg。对于给定的两个整数 和 ,要求用最少的变换 和2/)(;3)(igifnmf变换次数将 变为 。 (18 分)gnm

29、解:解答如下:void compute() k=1;while(!search(1,n)k+;if(kmaxdep) break;init();(6 分)if(found) output();else coutk) return false;for(int i=0;iAmid) right=mid-1;else left=mid+1;return -1;(3)递归算法:输入:递减数组 Aleft:right,待搜索元素 v。 【1 分】输出:v 在 A 中的位置 pos,或者不在 A 中的消息(-1) 。 【1 分】步骤:【3 分】int BinarySearch(int A,int left,int right,int v)int mid;if (leftAmid) return BinarySearch(A,left,mid-1,v);else return BinarySearch(A,mid+1,right,v);elsereturn -1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 试题课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报