5《算法设计与分析》试题库.docx
《5《算法设计与分析》试题库.docx》由会员分享,可在线阅读,更多相关《5《算法设计与分析》试题库.docx(72页珍藏版)》请在冰豆网上搜索。
5《算法设计与分析》试题库
《算法分析与设计》试题库
(一)
一、选择题
1.应用Johnson法则的流水作业调度采用的算法是(D)
A.贪心算法ﻩB.分支限界法 C.分治法D.动态规划算法
2.Hanoi塔问题如下图所示。
现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。
移动圆盘时遵守Hanoi塔问题的移动规则。
由此设计出解Hanoi塔问题的递归算法正确的为:
(B)
B.voidhanoi(intn,intA,intB,intC)
{
if(n>0)
{
hanoi(n-1,A,C,B);
move(n,a,b);
hanoi(n-1,C,B,A);
}
}
C.voidhanoi(intn,intC,intB,intA)
{
if(n>0)
{
hanoi(n-1,A,C,B);
move(n,a,b);
hanoi(n-1,C,B,A);
}
}
D.voidhanoi(intn,intC,intA,intB)
{
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),记号
表示(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)是回溯法中遍历排列树的算法框架程序。
voidbacktrack(intt)
{
if(t>n)output(x);
else
for(inti=t;i<=n;i++){
swap(x[t],x[i]);
if(legal(t))backtrack(t+1);
swap(x[t],x[i]);
}
}
A.
voidbacktrack(intt)
{
if(t>n)output(x);
else
for(inti=0;i<=1;i++){
x[t]=i;
if(legal(t))backtrack(t+1);
}
}
B.
voidbacktrack(intt)
{
if(t>n)output(x);
else
for(inti=0;i<=1;i++){
x[t]=i;
if(legal(t))backtrack(t-1);
}
}
C.
D.
voidbacktrack(intt)
{
if(t>n)output(x);
else
for(inti=t;i<=n;i++){
swap(x[t],x[i]);
if(legal(t))backtrack(t+1);
}
}
10. 回溯法的效率不依赖于以下哪一个因素?
(C)
A.产生x[k]的时间;
B.满足显约束的x[k]值的个数;
C.问题的解空间的形式;
D.计算上界函数bound的时间;
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的输入时,在某条带上所使用过的最小方格数。
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)< f(n)};
二、填空题
1.下面程序段的所需要的计算时间为(
)。
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(thissum>sum){
sum=thissum;
besti=i;
bestj=j;
}
}
}
returnsum;
}
2.有11个待安排的活动,它们具有下表所示的开始时间与结束时间,如果以贪心算法求解这些活动的最优安排(即为活动安排问题:
在所给的活动集合中选出最大的相容活动子集合),得到的最大相容活动子集合为活动( {1,4,8,11} )。
3.所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到)。
4.所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解)。
5.回溯法是回溯法是指(具有限界函数的深度优先生成法)。
6.用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。
在任何时刻,算法只保存从根结点到当前扩展结点的路径。
如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为(O(h(n)))。
7.回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与(排列树)算法框架。
8.用回溯法解0/1背包问题时,该问题的解空间结构为(子集树)结构。
9.用回溯法解批处理作业调度问题时,该问题的解空间结构为(排列树)结构。
10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容:
TypepKnap:
:
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. 用回溯法解布线问题时,求最优解的主要程序段如下。
如果布线区域划分为
的方格阵列,扩展每个结点需O(1)的时间,L为最短布线路径的长度,则算法共耗时 (O(mn) ),构造相应的最短距离需要(O(L))时间。
for(inti=0;inbr.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);}
}
12.用回溯法解图的m着色问题时,使用下面的函数OK检查当前扩展结点的每一个儿子所相应的颜色的可用性,则需耗时(渐进时间上限)(O(mn))。
BoolColor:
:
OK(intk)
{//
for(intj=1;j<=n;j++)
if((a[k][j]==1)&&(x[j]==x[k]))returnfalse;
returntrue;
}
13.旅行售货员问题的解空间树是(排列树)。
三、解答题
1.机器调度问题。
问题描述:
现在有n件任务和无限多台的机器,任务可以在机器上得到处理。
每件任务的开始时间为si,完成时间为fi,si<fi。
[si,fi]为处理任务i的时间范围。
两个任务i,j重叠指两个任务的时间范围区间有重叠,而并非指i,j的起点或终点重合。
例如:
区间[1,4]与区间[2,4]重叠,而与[4,7]不重叠。
一个可行的任务分配是指在分配中没有两件重叠的任务分配给同一台机器。
因此,在可行的分配中每台机器在任何时刻最多只处理一个任务。
最优分配是指使用的机器最少的可行分配方案。
问题实例:
若任务占用的时间范围是{[1,4],[2,5],[4,5],[2,6],[4,7]},则按时完成所有任务最少需要几台机器?
(提示:
使用贪心算法)
画出工作在对应的