1、算法分析期末试题集规范标准答案6套算法分析与设计期末复习题(一)一、 选择题1应用Johnson法则的流水作业调度采用的算法是(D)A.D.动态规划算法贪心算法 B.分支限界法 C.分治法2.Hanoi塔问题如下图所示。现要求将塔座 A上的的所有圆盘移到塔座 B上,并仍按同样顺序叠置。移动圆盘时遵守 Hanoi塔问题的移动规则。由此设计出解Hanoi塔问题的递归算法正确的为:(B)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);1lAJ1
2、Hanoi 塔(JB.void 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 han oi(i nt n, i nt C, i nt B, i nt A) if (n 0)hanoi(n-1, A, C, B);move( n, a,b);hanoi(n-1, C, B, A);D.void hanoi(int n, int C, int A, int B) if (n 0)hanoi(n-1, A, C, B);move( n, a,
3、b);hanoi(n-1, C, B, A);3.动态规划算法的基本要素为(C)A.最优子结构性质与贪心选择性质B 重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D.预排序与递归调用4.算法分析中,记号0表示(B),记号 表示(A),记号 表示(D)A.渐进下界B.渐进上界C.非紧上界D.紧渐进界E.非紧下界5.以下关于渐进记号的性质是正确的有:(A)A.f( n) (g( n),g( n) (h( n) f( n) (h( n)B.f(n) 0(g(n),g(n) 0(h(n) h(n) 0(f (n)C.O(f(n )+0(g( n) = O(mi nf(n ),g( n)
4、D.f(n) 0(g(n) g(n) 0(f (n)6.能采用贪心算法求最优解的问题,一般具有的重要性质为: (A)A.最优子结构性质与贪心选择性质B 重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D.预排序与递归调用7.回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树8.9.程序块(A)是回溯法中遍历排列树的算法框架程序。void backtrack (int t)if (tn) output(x);elsefor (int i=t;in) output(x);elsefor (int i=0;in) output(x);elsefor (int i=0;in
5、) output(x);elsefor (int i=t;i0 ,存在正数和n0 0使得对所有n n0 有:0 f(n )0 ,存在正数和no 0使得对所有D. 0(g( n) = f(n) |n no有:0 cg(n) 0,存在正数和n0 0使得对所有n n0有:0f(n)0,存在正数和n0 0使得对所有n n0有:0 cg(n) f(n) ;填空题1.下面程序段的所需要的计算时间为( 0(n2) )。int MaxSum(int n, int *a, int &besti, int &bestj) int sum=0;for(int i=1;i=n;i+)int thissum=0;for
6、(i nt j=i;jsum) sum=thissum; besti=i;bestj=j;return sum;2.如果有11个待安排的活动,它们具有下表所示的开始时间与结束时间,以贪心算法求解这些活动的最优安排(即为活动安排问题:在所给的活动集合中选出最大的相容活动子集合),得到的最大相容活动子集合为活动(1 , 4, 8, 11)。1234567891011Si130535688212fi45678910111213143.所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最 优的选择,即贪心选择来达到)。4.所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解) 。5.回
7、溯法是指(具有限界函数的深度优先生成法)。6.用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。 在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树 中从根结点到叶结点的最长路径的长度为 h(n),则回溯法所需的计算空间通常为(0(h(n)。7.回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与(排 列树)算法框架。8.用回溯法解0/1背包问题时,该问题的解空间结构为(子集树)结构。9.用回溯法解批处理作业调度问题时,该问题的解空间结构为(排列树)结构。10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格 中填入合适的内容:Typep K
8、n ap: Boun d(i nt i)/计算上界Typew cleft = c - cw; / 剩余容量Typep b = cp; / 结点的上界/ 以物品单位重量价值递减序装入物品while (i = n & wi = cleft) cleft -= wi;11.用回溯法解布线问题时,求最优解的主要程序段如下。如果布线区域划分为 n m的方格阵列,扩展每个结点需 0(1)的时间,L为最短布线路径的长度,则 算法共耗时(0(mn),构造相应的最短距离需要(0(L)时间。for (int i = 0; i NumOfNbrs; i+) n br.row = here.row + offseti
9、.row;n br.col = here.col + offseti.col;if (grid nbr.row nbr.col = 0) / 该方格未标记grid nbr.row nbr.col=gridhere.rowhere.col + 1;if (n br.row = fini sh.row) &(n br.col = fin ish.col) break; / 完成布线Q.Add( nbr);12.用回溯法解图的m着色问题时,使用下面的函数 0K检查当前扩展结点的每一个儿子所相应的颜色的可用性,则需耗时(渐进时间上限) (0 (mn)Bool Color:OK(i nt k)/for(
10、i nt j=1;j n) /到达叶结点更新最优解 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 & i 0故Ew+rbestw 总是
11、成 立。也就是说,此时右子树测试不起作用。为了使上述右子树测试尽早生效,应提早更新bestw。又知算法最终找到的 最优值是所求问题的子集树中所有可行结点相应重量的最大值。 而结点所相应得重量仅在搜索进入左子树是增加,因此,可以在算法每一次进入左子树时更新 bestw的值。7.最长公共子序列问题:给定2个序列X=x1,x2,xm和Y=y1,y2,yn,找 出X和Y的最长公共子序列。由最长公共子序列问题的最优子结构性质建立子问题最优值的递归关系。用cij记录序列Xi和Yj的最长公共子序列的长度。其中, Xi=x1,x2,xi; Yj=y1,y2,yj。当i=0或j=0时,空序列是Xi和Yj的最长公
12、共子序列。故此 时Cij=0。其它情况下,由最优子结构性质可建立递归关系如下:0 i 0, j 0ci j ci 1j 1 1 i,j 0必 yjmaxci j 1,ci 1 j i, j 0必 yj在程序中,bij记录Cij的值是由哪一个子问题的解得到的(1)请填写程序中的空格,以使函数LCSLength完成计算最优值的功能。void LCSLength(int m , int n ,char *x ,char *y , int *c ,int *b)int i ,j;for (i = 1; i = m; i+) ci0 = 0;for (i = 1; i = n; i+) c0i = 0;
13、for (i = 1; i = m; i+)for (j = 1; j =cij-1 ) cij=ci-1j; bij=2; else cij=cij-1; bij=3; (2)函数LCS实现根据b的内容打印出Xi和Yj的最长公共子序列。请填写程序中的空格,以使函数LCS完成构造最长公共子序列的功能(请 将bij的取值与(1)中您填写的取值对应,否则视为错误)void LCS(int i , int j , char *x , int *b)if (i =0 | j=O) retur n;if ( bij= 1 ) LCS( i-1 , j-1 , x, b); cout0 ) printf(
14、%dn ,k);f(k-1);f(k-1);算法分析与设计期末复习题(二)、简要回答下列问题 :1.算法重要特性是什么?2.算法分析的目的是什么?3.算法的时间复杂性与问题的什么因素相关?4.算法的渐进时间复杂性的含义?5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?6.简述二分检索(折半查找)算法的基本过程。7.背包问题的目标函数和贪心算法最优化量度相同吗?8.采用回溯法求解的问题,其解如何表示?有什么规定?9.回溯法的搜索特点是什么?10.n皇后问题回溯算法的判别函数 place的基本流程是什么?11.为什么用分治法设计的算法一般有递归调用?12.为什么要分析最坏情况下的算法时间复杂
15、性?13.简述渐进时间复杂性上界的定义。14.二分检索算法最多的比较次数?15.快速排序算法最坏情况下需要多少次比较运算?16.贪心算法的基本思想?17.回溯法的解(X1,X2,刘)的隐约束一般指什么?18.阐述归并排序的分治思路。19.快速排序的基本思想是什么。20.什么是直接递归和间接递归?消除递归一般要用到什么数据结构?21 什么是哈密顿环问题?22.用回溯法求解哈密顿环,如何定义判定函数?23.请写出prim算法的基本思想。参考答案:1.确定性、可实现性、输入、输出、有穷性2.分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。3.算法的时间复杂性与问题的规模相关,
16、是问题大小 n的函数。4 .当问题的规模n趋向无穷大时,影响算法效率的重要因素是 T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用 T(n)的数量级(阶)评价算法。时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。5.最坏情况下的时间复杂性和平均时间复杂性考察的是 n固定时,不同输入实例下的算法所耗时间。最坏情况下的时间复杂性取的输入实例中最大的时间复杂度:W(n) = max T(n , I) , I Dn平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和:A(n) = EP(I)T(n , I) I Dn6. 设输入是一个按非降次序排列的元素表 Ai : j和x,
17、选取A(i+j)/2与x比较,如果A(i+j)/2=x ,则返回(i+j)/2,如果 A(i+j)/2x ,贝U Ai : (i+j)/2-1找 x,否则在回溯法的搜索特点是什么7.不相同。目标函数:获得最大利润。最优量度:最大利润 /重量比。8. 问题的解可以表示为 n元组:(xi,X2,xn ),Xi Si, Si为有穷集合,Xi Si, (xi,X2, Xn )具备完备性,即(X1 ,X2,Xn )是合理的,则(X1,X2,Xi ) (i n) 定合理。9.在解空间树上跳跃式地深度优先搜索,即用判定函数考察 xk的取值,如果 xk是合理的就搜索xk为根节点的子树,如果 xk取完了所有的值
18、,便回溯到 xk-1。10.将第K行的皇后分别与前 k-1行的皇后比较,看是否与它们相容,如果不相容就返 回false,测试完毕则返回true。11.子问题的规模还很大时,必须继续使用分治法,反复分治,必然要用到递归。12最坏情况下的时间复杂性决定算法的优劣,并且最坏情况下的时间复杂性较平均 时间复杂性游可操作性。13.T(n)是某算法的时间复杂性函数,f(n)是一简单函数,存在正整数No和C, nNo ,有 T(n)f(n),这种关系记作 T(n)=O(f(n)。14.二分检索算法的最多的比较次数为 log n 。15.最坏情况下快速排序退化成冒泡排序,需要比较 n2次。16.是一种依据最优
19、化量度依次选择输入的分级处理方法。 基本思路是:首先根据题意,选取一种量度标准;然后按这种量度标准对这 n个输入排序,依次选择输入量加入部分解中。如果当前这个输入量的加入,不满足约束条件,则不把此输入加到这部分解中。17 回溯法的解(X1,X2, xn )的隐约束一般指个元素之间应满足的某种关系。18.讲数组一分为二,分别对每个集合单独排序, 然后将已排序的两个序列归并成一个含n个元素的分好类的序列。如果分割后子问题还很大,则继续分治,直到一个元素。有比它大的放置在后一部分, 并把该记录排在这两部分的中间, 这个过程称作一次快速排序。之后重复上述过程,直到每一部分内只有一个记录为止。20.在定义一个过程或者函数的时候又出现了调用本过程或者函数的成分,既调用它自己本身,这称为直接递归。如果过程或者函数 P
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1