算法设计与分析考试题目及答案.docx
- 文档编号:23532668
- 上传时间:2023-05-18
- 格式:DOCX
- 页数:26
- 大小:235.63KB
算法设计与分析考试题目及答案.docx
《算法设计与分析考试题目及答案.docx》由会员分享,可在线阅读,更多相关《算法设计与分析考试题目及答案.docx(26页珍藏版)》请在冰豆网上搜索。
算法设计与分析考试题目及答案
NewlycompiledonNovember23,2020
算法设计与分析考试题目及答案
《算法分析与设计》期末复习题
一、选择题
1.应用Johnson法则的流水作业调度采用的算法是(D)
A.贪心算法B.分支限界法C.分治法D.动态规划算法
塔问题如下图所示。
现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。
移动圆盘时遵守Hanoi塔问题的移动规则。
由此设计出解Hanoi塔问题的递归算法正确的为:
(B)
3.动态规划算法的基本要素为(C)
A.最优子结构性质与贪心选择性质
B.重叠子问题性质与贪心选择性质
C.最优子结构性质与重叠子问题性质
D.预排序与递归调用
4.算法分析中,记号O表示(B),记号
表示(A),记号
表示(D)。
A.渐进下界
B.渐进上界
C.非紧上界
D.紧渐进界
E.非紧下界
5.以下关于渐进记号的性质是正确的有:
(A)
A.
B.
C.O(f(n))+O(g(n))=O(min{f(n),g(n)})
D.
6.能采用贪心算法求最优解的问题,一般具有的重要性质为:
(A)
A.最优子结构性质与贪心选择性质
B.重叠子问题性质与贪心选择性质
C.最优子结构性质与重叠子问题性质
D.预排序与递归调用
7.回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。
A.广度优先B.活结点优先C.扩展结点优先D.深度优先
8.分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间树。
A.广度优先B.活结点优先C.扩展结点优先D.深度优先
9.程序块(A)是回溯法中遍历排列树的算法框架程序。
A.
B.
C.
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.。
C.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的平均方格数。
D.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最小方格数。
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使得对所有n
n0有:
0
f(n)
cg(n)};
B.O(g(n))={f(n)|存在正常数c和n0使得对所有n
n0有:
0
cg(n)
f(n)};
C.O(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有n
n0有:
0
f(n) D.O(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有n n0有: 0 cg(n) 15.记号 的定义正确的是(B)。 A.O(g(n))={f(n)|存在正常数c和n0使得对所有n n0有: 0 f(n) cg(n)}; B.O(g(n))={f(n)|存在正常数c和n0使得对所有n n0有: 0 cg(n) f(n)}; C.(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有n n0有: 0 f(n) D.(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有n n0有: 0 cg(n) 二、填空题 1. 下面程序段的所需要的计算时间为( )。 2.有11个待安排的活动,它们具有下表所示的开始时间与结束时间,如果以贪心算法求解这些活动的最优安排(即为活动安排问题: 在所给的活动集合中选出最大的相容活动子集合),得到的最大相容活动子集合为活动({1,4,8,11})。 3.所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到)。 4.所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解)。 5.回溯法是指(具有限界函数的深度优先生成法)。 6.用回溯法解题的一个显着特征是在搜索过程中动态产生问题的解空间。 在任何时刻,算法只保存从根结点到当前扩展结点的路径。 如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为(O(h(n)) )。 7.回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与(排列树)算法框架。 8.用回溯法解0/1背包问题时,该问题的解空间结构为(子集树)结构。 9.用回溯法解批处理作业调度问题时,该问题的解空间结构为(排列树)结构。 10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容: 11.用回溯法解布线问题时,求最优解的主要程序段如下。 如果布线区域划分为 的方格阵列,扩展每个结点需O (1)的时间,L为最短布线路径的长度,则算法共耗时(O(mn)),构造相应的最短距离需要(O(L))时间。 12.用回溯法解图的m着色问题时,使用下面的函数OK检查当前扩展结点的每一个儿子所相应的颜色的可用性,则需耗时(渐进时间上限)(O(mn))。 13.旅行售货员问题的解空间树是(排列树)。 6. 7. 三、证明题 1.一个分治法将规模为n的问题分成k个规模为n/m的子问题去解。 设分解阀值n0=1,且adhoc解规模为1的问题耗费1个单位时间。 再设将原问题分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用f(n)个单位时间。 用T(n)表示该分治法解规模为|P|=n的问题所需的计算时间,则有: 通过迭代法求得T(n)的显式表达式为: 试证明T(n)的显式表达式的正确性。 2.举反例证明0/1背包问题若使用的算法是按照pi/wi的非递减次序考虑选择的物品,即只要正在被考虑的物品装得进就装入背包,则此方法不一定能得到最优解(此题说明0/1背包问题与背包问题的不同)。 证明: 举例如: p={7,4,4},w={3,2,2},c=4时,由于7/3最大,若按题目要求的方法,只能取第一个,收益是7。 而此实例的最大的收益应该是8,取第2,3个。 3.求证: O(f(n))+O(g(n))=O(max{f(n),g(n)})。 证明: 对于任意f1(n) O(f(n)),存在正常数c1和自然数n1,使得对所有n n1,有f1(n) c1f(n)。 类似地,对于任意g1(n) O(g(n)),存在正常数c2和自然数n2,使得对所有n n2,有g1(n) c2g(n)。 令c3=max{c1,c2},n3=max{n1,n2},h(n)=max{f(n),g(n)}。 则对所有的n n3,有 f1(n)+g1(n) c1f(n)+c2g(n) c3f(n)+c3g(n) =c3(f(n)+g(n)) c32max{f(n),g(n)} =2c3h(n)=O(max{f(n),g(n)}). 4.求证最优装载问题具有贪心选择性质。 (最优装载问题: 有一批集装箱要装上一艘载重量为c的轮船。 其中集装箱i的重量为Wi。 最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 设集装箱已依其重量从小到大排序,(x1,x2,…,xn)是最优装载问题的一个最优解。 又设 。 如果给定的最优装载问题有解,则有 。 ) 证明: 四、解答题 1.机器调度问题。 问题描述: 现在有n件任务和无限多台的机器,任务可以在机器上得到处理。 每件任务的开始时间为si,完成时间为fi,si [si,fi]为处理任务i的时间范围。 两个任务i,j重叠指两个任务的时间范围区间有重叠,而并非指i,j的起点或终点重合。 例如: 区间[1,4]与区间[2,4]重叠,而与[4,7]不重叠。 一个可行的任务分配是指在分配中没有两件重叠的任务分配给同一台机器。 因此,在可行的分配中每台机器在任何时刻最多只处理一个任务。 最优分配是指使用的机器最少的可行分配方案。 问题实例: 若任务占用的时间范围是{[1,4],[2,5],[4,5],[2,6],[4,7]},则按时完成所有任务最少需要几台机器(提示: 使用贪心算法) 画出工作在对应的机器上的分配情况。 2.已知非齐次递归方程: ,其中,b、c是常数,g(n)是n的某一个函数。 则f(n)的非递归表达式为: 。 现有Hanoi塔问题的递归方程为: ,求h(n)的非递归表达式。 解: 利用给出的关系式,此时有: b=2,c=1,g(n)=1,从n递推到1,有: 3.单源最短路径的求解。 问题的描述: 给定带权有向图(如下图所示)G=(V,E),其中每条边的权是非负实数。 另外,还给定V中的一个顶点,称为源。 现在要计算从源到所有其它各顶点的最短路长度。 这里路的长度是指路上各边权之和。 这个问题通常称为单源最短路径问题。 解法: 现采用Dijkstra算法计算从源顶点1到其它顶点间最短路径。 请将此过程填入下表中。 4.请写出用回溯法解装载问题的函数。 装载问题: 有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且 。 装载问题要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。 如果有,找出一种装载方案。 解: voidbacktrack(inti) {用分支限界法解装载问题时,对算法进行了一些改进,下面的程序段给出了改进部分;试说明斜线部分完成什么功能,以及这样做的原因,即采用这样的方式,算法在执行上有什么不同。 //检查左儿子结点 Typewt=Ew+w[i];//左儿子结点的重量 if(wt<=c){//可行结点 if(wt>bestw)bestw=wt; //加入活结点队列 if(i } //检查右儿子结点 if(Ew+r>bestw&&i (Ew);//可能含最优解 (Ew);//取下一扩展结点 解答: 斜线标识的部分完成的功能为: 提前更新bestw值; 这样做可以尽早的进行对右子树的剪枝。 具体为: 算法Maxloading初始时将bestw设置为0,直到搜索到第一个叶结点时才更新bestw。 因此在算法搜索到第一个叶子结点之前,总有bestw=0,r>0故Ew+r>bestw总是成立。 也就是说,此时右子树测试不起作用。 为了使上述右子树测试尽早生效,应提早更新bestw。 又知算法最终找到的最优值是所求问题的子集树中所有可行结点相应重量的最大值。 而结点所相应得重量仅在搜索进入左子树是增加,因此,可以在算法每一次进入左子树时更新bestw的值。 7.最长公共子序列问题: 给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。 由最长公共子序列问题的最优子结构性质建立子问题最优值的递归关系。 用c[i][j]记录序列Xi和Yj的最长公共子序列的长度。 其中,Xi={x1,x2,…,xi};Yj={y1,y2,…,yj}。 当i=0或j=0时,空序列是Xi和Yj的最长公共子序列。 故此时C[i][j]=0。 其它情况下,由最优子结构性质可建立递归关系如下: 在程序中,b[i][j]记录C[i][j]的值是由哪一个子问题的解得到的。 (1)请填写程序中的空格,以使函数LCSLength完成计算最优值的功能。 (2)函数LCS实现根据b的内容打印出Xi和Yj的最长公共子序列。 请填写程序中的空格,以使函数LCS完成构造最长公共子序列的功能(请将b[i][j]的取值与 (1)中您填写的取值对应,否则视为错误)。 8.对下面的递归算法,写出调用f(4)的执行结果。 voidf(intk) {if(k>0) {printf("%d\n",k); f(k-1); f(k-1); } } 一、填空题(20分) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性: _________,________,________,__________,__________。 2.算法的复杂性有_____________和___________之分,衡量一个算法好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显着特征是____________________________________。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X和Y的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。 6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为_____________。 背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。 9.动态规划算法的两个基本要素是___________和___________。 10.二分搜索算法是利用_______________实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 2.流水作业调度问题的johnson算法的思想。 3.若n=4,在机器M1和M2上加工作业i所需的时间分别为ai和bi,且(a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。 4.使用回溯法解0/1背包问题: n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 5.设S={X1,X2,···,Xn}是严格递增的有序集,利用二叉树的结点来存储S中的元素,在表示S的二叉搜索树中搜索一个元素X,返回的结果有两种情形, (1)在二叉搜索树的内结点中找到X=Xi,其概率为bi。 (2)在二叉搜索树的叶结点中确定X∈(Xi,Xi+1),其概率为ai。 在表示S的二叉搜索树T中,设存储元素Xi的结点深度为Ci;叶结点(Xi,Xi+1)的结点深度为di,则二叉搜索树T的平均路长p为多少假设二叉搜索树T[i][j]={Xi,Xi+1,···,Xj}最优值为m[i][j],W[i][j]=ai-1+bi+···+bj+aj,则m[i][j](1<=i<=j<=n)递归关系表达式为什么 6.描述0-1背包问题。 三、简答题(30分) 1.流水作业调度中,已知有n个作业,机器M1和M2上加工作业i所需的时间分别为ai和bi,请写出流水作业调度问题的johnson法则中对ai和bi的排序算法。 (函数名可写为sort(s,n)) 2.最优二叉搜索树问题的动态规划算法(设函数名binarysearchtree)) 答案: 一、填空 1.确定性有穷性可行性0个或多个输入一个或多个输出 2.时间复杂性空间复杂性时间复杂度高低 3.该问题具有最优子结构性质 4.{BABCD}或{CABCD}或{CADCD} 5.一个(最优)解 6.子问题子问题子问题 7.回溯法 8.o(n*2n)o(min{nc,2n}) 9.最优子结构重叠子问题 10.动态规划法 二、综合题 1.①问题具有最优子结构性质;②构造最优值的递归关系表达式;③最优值的算法描述;④构造最优解; 2.①令N1={i|ai 3.步骤为: N1={1,3},N2={2,4}; N1’={1,3},N2’={4,2}; 最优值为: 38 4.解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}。 解空间树为: 该问题的最优值为: 16最优解为: (1,1,0) 5.二叉树T的平均路长P= + m[i][j]=W[i][j]+min{m[i][k]+m[k+1][j]}(1<=i<=j<=n,m[i][i-1]=0) m[i][j]=0(i>j) 6.已知一个背包的容量为C,有n件物品,物品i的重量为Wi,价值为Vi,求应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。 三、简答题 1. voidsort(flowjopes[],intn) { inti,k,j,l; for(i=1;i<=n-1;i++)ag! =0)k++; if(k>n)break;ag==0) if(s[k].a>s[j].a)k=j; swap(s[i].index,s[k].index); swap(s[i].tag,s[k].tag); } } l=i; swap(s[i].index,s[k].index);ag,s[k].tag); } } 2. voidbinarysearchtree(inta[],intb[],intn,int**m,int**s,int**w) { inti,j,k,t,l; for(i=1;i<=n+1;i++) { w[i][i-1]=a[i-1]; m[i][i-1]=0; } for(l=0;l<=n-1;l++) Init-single-source(G,s) 2.S=Φ 3.Q=V[G] Q<>Φ dou=min(Q) S=S∪{u} foreachvertex3 do4 四、算法理解题(本题10分) 根据优先队列式分支限界法,求下图中从v1点到v9点的单源最短路径,请画出求得最优解的解空间树。 要求中间被舍弃的结点用×标记,获得中间解的结点用单圆圈○框起,最优解用双圆圈◎框起。 五、算法理解题(本题5分) 设有n=2k个运动员要进行循环赛,现设计一个满足以下要求的比赛日程表: ①每个选手必须与其他n-1名选手比赛各一次; ②每个选手一天至多只能赛一次; ③循环赛要在最短时间内完成。 (1)如果n=2k,循环赛最少需要进行几天; (2)当n=23=8时,请画出循环赛日程表。 六、算法设计题(本题15分) 分别用贪心算法、动态规划法、回溯法设计0-1背包问题。 要求: 说明所使用的算法策略;写出算法实现的主要步骤;分析算法的时间。 七、算法设计题(本题10分) 通过键盘输入一个高精度的正整数n(n的有效位数≤240),去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。 编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。 【样例输入】 178543 S=4 【样例输出】 13 一、填空题(本题15分,每小题1分) 1.规则一系列运算 2.随机存取机RAM(RandomAccessMachine);随机存取存储程序机RASP(RandomAccessStoredProgramMachine);图灵机(TuringMachine) 3.算法效率 4.时间、空间、时间复杂度、空间复杂度 5.2n 6.最好局部最优选择 7.贪心选择最优子结构 二、简答题(本题25分,每小题5分) 1、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同;对这k个子问题分别求解。 如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止;将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。 2、“最优化原理”用数学化的语言来描述: 假设为了解决某一优化问题,需要依次作出n个决策D1,D2,…,Dn,如若这个决策序列是最优的,对于任何一个整数k,1 3、某个问题的最优解包含着其子问题的最优解。 这种性质称为最优子结构性质。 4、回溯法的基本思想是在一棵含有问题全部可能解的状态空间树上进行深度优先搜索,解为叶子结点。 搜索过程中,每到达一个结点时,则判断该结点为根的子树是否含有问题的解,如果可以确定该子树中不含有问题的解,则放弃对该子树的搜索,退回到上层父结点,继续下一步深度优先搜索过程。 在回溯法中,并不是先构造出整棵状态空间树,再进行搜索,而是在搜索过程,逐步构造出状态空间树,即边搜索,边构造。 5、P(Polynomial问题): 也即是多项式复杂程度的问题。 NP就是Non-deterministicPolynomial的问题,也即是多项式复杂程度的非确定性问题。 NPC(NPComplete)问题,这种问题只有把解域里面的所有可能都穷举了之后才能得出答案,这样的问题是NP里面最难的问题,这种问题就是NPC问题。 三、算法填空(本题20分,每小题5分) 1、n后问题回溯算法 (1)! M[j]&&! L[i+j]&&! R[i-j+N] (2)M[j]=L[i+j]=R[i-j+N]=1; (3)try(i+1,M,L,R,A) (4)A[i][j]=0 (5)M[j]=L[i+j]=R[i-j+N]=0 2、数塔问题。 (1)c<=r (2)t[r][c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 考试 题目 答案