《算法分析与设计》期末复习题(一)一、选择题1.应用Johnson法则的流水作业调度采用的算法是(D)A.贪心算法B.分支限界法C.分治法D.动态规划算法2.Hanoi塔问题如下图所示。现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。移动圆盘时遵守Hanoi塔问题的移动规则。由此设计出解Hanoi塔问题的递归算法正确的为:(B)Hanoi塔A.voidhanoi(intn,intA,intC,intB){if(n0){hanoi(n-1,A,C,B);move(n,a,b);hanoi(n-1,C,B,A);}}B.voidhanoi(intn,intA,intB,intC){if(n0){hanoi(n-1,A,C,B);move(n,a,b);hanoi(n-1,C,B,A);}}C.voidhanoi(intn,intC,intB,intA){if(n0){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),记号表示(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)O(g(n)),g(n)O(h(n))h(n)O(f(n))C.O(f(n))+O(g(n))=O(min{f(n),g(n)})D.f(n)O(g(n))g(n)O(f(n))6.能采用贪心算法求最优解的问题,一般具有的重要性质为:(A)A.最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质D.voidhanoi(intn,intC,intA,intB){if(n0){hanoi(n-1,A,C,B);move(n,a,b);hanoi(n-1,C,B,A);}}C.最优子结构性质与重叠子问题性质D.预排序与递归调用7.回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。A.广度优先B.活结点优先C.扩展结点优先D.深度优先8.分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间树。A.广度优先B.活结点优先C.扩展结点优先D.深度优先9.程序块(A)是回溯法中遍历排列树的算法框架程序。A.B.C.voidbacktrack(intt){if(tn)output(x);elsefor(inti=t;i=n;i++){swap(x[t],x[i]);if(legal(t))backtrack(t+1);swap(x[t],x[i]);}}voidbacktrack(intt){if(tn)output(x);elsefor(inti=0;i=1;i++){x[t]=i;if(legal(t))backtrack(t+1);}}voidbacktrack(intt){if(tn)output(x);elsefor(inti=0;i=1;i++){x[t]=i;if(legal(t))backtrack(t-1);}}D.10.回溯法的效率不依赖于以下哪一个因素?(C)A.产生x[k]的时间;B.满足显约束的x[k]值的个数;C.问题的解空间的形式;D.计算上界函数bound的时间;E.满足约束函数和上界函数约束的所有x[k]的个数。F.计算约束函数constraint的时间;11.常见的两种分支限界法为(D)A.广度优先分支限界法与深度优先分支限界法;B.队列式(FIFO)分支限界法与堆栈式分支限界法;C.排列树法与子集树法;D.队列式(FIFO)分支限界法与优先队列式分支限界法;12.k带图灵机的空间复杂性S(n)是指(B)A.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最大方格数。B.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的方格数的总和。C.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的平均方格数。D.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最小方格数。voidbacktrack(intt){if(tn)output(x);elsefor(inti=t;i=n;i++){swap(x[t],x[i]);if(legal(t))backtrack(t+1);}}13.NP类语言在图灵机下的定义为(D)A.NP={L|L是一个能在非多项式时间内被一台NDTM所接受的语言};B.NP={L|L是一个能在多项式时间内被一台NDTM所接受的语言};C.NP={L|L是一个能在多项式时间内被一台DTM所接受的语言};D.NP={L|L是一个能在多项式时间内被一台NDTM所接受的语言};14.记号O的定义正确的是(A)。A.O(g(n))={f(n)|存在正常数c和n0使得对所有nn0有:0f(n)cg(n)};B.O(g(n))={f(n)|存在正常数c和n0使得对所有nn0有:0cg(n)f(n)};C.O(g(n))={f(n)|对于任何正常数c0,存在正数和n00使得对所有nn0有:0f(n)cg(n)};D.O(g(n))={f(n)|对于任何正常数c0,存在正数和n00使得对所有nn0有:0cg(n)f(n)};15.记号的定义正确的是(B)。A.O(g(n))={f(n)|存在正常数c和n0使得对所有nn0有:0f(n)cg(n)};B.O(g(n))={f(n)|存在正常数c和n0使得对所有nn0有:0cg(n)f(n)};C.(g(n))={f(n)|对于任何正常数c0,存在正数和n00使得对所有nn0有:0f(n)cg(n)};D.(g(n))={f(n)|对于任何正常数c0,存在正数和n00使得对所有nn0有:0cg(n)f(n)};二、填空题1.下面程序段的所需要的计算时间为(2O(n))。2.有11个待安排的活动,它们具有下表所示的开始时间与结束时间,如果以贪心算法求解这些活动的最优安排(即为活动安排问题:在所给的活intMaxSum(intn,int*a,int&besti,int&bestj){intsum=0;for(inti=1;i=n;i++){intthissum=0;for(intj=i;j=n;j++){thissum+=a[j];if(thissumsum){sum=thissum;besti=i;bestj=j;}}}returnsum;}动集合中选出最大的相容活动子集合),得到的最大相容活动子集合为活动({1,4,8,11})。3.所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到)。4.所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解)。5.回溯法是指(具有限界函数的深度优先生成法)。6.用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为(O(h(n)))。7.回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与(排列树)算法框架。8.用回溯法解0/1背包问题时,该问题的解空间结构为(子集树)结构。9.用回溯法解批处理作业调度问题时,该问题的解空间结构为(排列树)结构。10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容:1413121110987654f[i]122886535031S[i]1110987654321iTypepKnapTypew,Typep::Bound(inti){//计算上界Typewcleft=c-cw;//剩余容量Typepb=cp;//结点的上界//以物品单位重量价值递减序装入物品while(i=n&&w[i]=cleft){cleft-=w[i];b+=p[i];i++;}//装满背包if(i=n)(b+=p[i]/w[i]*cleft);returnb;}11.用回溯法解布线问题时,求最优解的主要程序段如下。如果布线区域划分为nm的方格阵列,扩展每个结点需O(1)的时间,L为最短布线路径的长度,则算法共耗时(O(mn)),构造相应的最短距离需要(O(L))时间。12.用回溯法解图的m着色问题时,使用下面的函数OK检查当前扩展结点的每一个儿子所相应的颜色的可用性,则需耗时(渐进时间上限)(O(mn))。13.旅行售货员问题的解空间树是(排列树)。for(inti=0;iNumOfNbrs;i++){nbr.row=here.row+offset[i].row;nbr.col=here.col+offset[i].col;if(grid[nbr.row][nbr.col]==0){//该方格未标记grid[nbr.row][nbr.col]=grid[here.row][here.col]+1;if((nbr.row==finish.row)&&(nbr.col==finish.col))break;//完成布线Q.Add(nbr);}}BoolColor::OK(intk){//for(intj=1;j=n;j++)if((a[k][j]==1)&&(x[j]==x[k]))returnfalse;returntrue;}三、解答题1.机器调度问题。问题描述:现在有n件任务和无限多台的机器,任务可以在机器上得到处理。每件任务的开始时间为si,完成时间为fi,sifi。[si,fi]为处理任务i的时间范围。两个任务i,j重叠指两个任务的时间范围区间有重叠,而并非指i,j的起点或终点重合。例如:区间[1,4]与区间[2,4]重叠,而与[4,7]不重叠。一个可行的任务分配是指在分配中没有两件重叠的任务分配给同一台机器。因此,在可行的分配中每台机器在任何时刻最多只处理一个任务。最优分配是指使用的机器最少的可行分配方案。问题实例:若任务占用的时间范围是{[1,4],[2,5],[4,5],[2,6],[4,7]},则按时完成所有任务最少需要几台机器?(提示:使用贪心算法)画出工作在对应的机器上的分配情况。2.已知非齐次递归方程:f(n)bf(n1)g(n)f(0)c,其中,b、c是常数,g(n)是n的某一个函数。则f(n)的非递归表达式为:nnnii1f(n)cbbg(i)。现有Hanoi塔问题的递归方程为:h(n)2h(n1)1h(1)1,求h(n)的非递归表达式。解:利用给出的关系式,此时有:b=2,c=1,g(n)=1,从n递推到1,有:n1n1n1ii1n1n22nh(n)cbbg(i)22...221213.单源最短路径的求解。问题的描述:给定带权有向图(如下图所示)G=(V,E),其中每条边的权是非负实数。另外,还给定V中的一个顶点,称为源。现在要计算从源到所有其它各顶点的最短路长度。这里路的长度是指路上各边权之和。这个问题通常称为单源最短路径问题。解法:现采用Dijkstra算法计算从源顶点1到其它顶点间最短路径。请将此过程填入下表中。4.请写出用回溯法解装载问题的函数。装载问题:有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且121niiwcc。装载问题要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。如果有,找出一种装载方案。解:voidbacktrack(inti){//搜索第i层结点if(in)//到达叶结点更新最优解bestx,bestw;return;r-=w