算法分析期末试题集规范标准答案6套Word文档格式.docx
- 文档编号:20928247
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:62
- 大小:461.30KB
算法分析期末试题集规范标准答案6套Word文档格式.docx
《算法分析期末试题集规范标准答案6套Word文档格式.docx》由会员分享,可在线阅读,更多相关《算法分析期末试题集规范标准答案6套Word文档格式.docx(62页珍藏版)》请在冰豆网上搜索。
C.O(f(n))+0(g(n))=O(min{f(n),g(n)})
D.f(n)0(g(n))g(n)0(f(n))
6.能采用贪心算法求最优解的问题,一般具有的重要性质为:
(A)
7.
回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树
8.
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]);
B.
for(inti=0;
=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的输入时,在某条带上所使用过的最小方格数。
13.NP类语言在图灵机下的定义为(D)
NP={L|L是-
个能在非多项式时间内被
一.台
NDTM所接受的语言};
个能在多项式时间内被一
厶
C.
DTM所接受的语言};
14.记号O的定义正确的是(A)。
O(g(n))=
{f(n)|
存在正常数c和n0使得对所有n
n0有:
f(n)
cg(n)};
cg(n)
f(n)};
对于任何正常数c>
0,存在正数和
n0>
0使得对所有
nn0有:
0f(n)<
cg(n)};
no>
D.0(g(n))={f(n)|
nno有:
0cg(n)<
f(n)};
15.记号的定义正确的是(B)
O(g(n))
cg(n)}
={f(n)|
存在正常数c和n0使得对所有
nn0有:
0
存在正常数c
和n0使得对所有
(g(n))=
对于任何正常数
c>
0,存在正数和
0使得对所有nn0
有:
f(n)<
填空题
1.下面程序段的所需要的计算时间为(0(n2))。
intMaxSum(intn,int*a,int&
besti,int&
bestj){
intsum=0;
for(inti=1;
=n;
i++){
intthissum=0;
for(intj=i;
j<
j++){
thissum+=a[j];
if(thissum>
sum){sum=thissum;
besti=i;
bestj=j;
returnsum;
2.
如果
有11个待安排的活动,它们具有下表所示的开始时间与结束时间,
以贪心算法求解这些活动的最优安排(即为活动安排问题:
在所给的活
动集合中选出最大的相容活动子集合),得到的最大相容活动子集合为活
动({1,4,8,11})。
2
3
4
5
6
7
8
9
10
11
S[i]
12
f[i]
13
14
3.所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到)。
4.所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解)。
5.回溯法是指(具有限界函数的深度优先生成法)。
6.用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。
在
任何时刻,算法只保存从根结点到当前扩展结点的路径。
如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空
间通常为(0(h(n)))。
7.回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与(排列树)算法框架。
8.用回溯法解0/1背包问题时,该问题的解空间结构为(子集树)结构。
9.用回溯法解批处理作业调度问题时,该问题的解空间结构为(排列树)结
构。
10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容:
TypepKnap<
Typew,Typep>
:
Bound(inti)
{//计算上界
Typewcleft=c-cw;
//剩余容量
Typepb=cp;
//结点的上界
//以物品单位重量价值递减序装入物品
while(i<
=n&
&
w[i]<
=cleft){cleft-=w[i];
11.用回溯法解布线问题时,求最优解的主要程序段如下。
如果布线区域划分为nm的方格阵列,扩展每个结点需0
(1)的时间,L为最短布线路径的长度,则算法共耗时(0(mn)),构造相应的最短距离需要(0(L))时间。
for(inti=0;
i<
NumOfNbrs;
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);
12.用回溯法解图的m着色问题时,使用下面的函数0K检查当前扩展结点的
每一个儿子所相应的颜色的可用性,则需耗时(渐进时间上限)(0(mn))
BoolColor:
OK(intk)
{//
for(intj=1;
j++)
if((a[k][j]==1)&
(x[j]==x[k]))returnfalse;
returntrue;
13•旅行售货员问题的解空间树是(排列树)。
三、解答题
1.机器调度问题。
问题描述:
现在有n件任务和无限多台的机器,任务可以在机器上得到处理。
每件任务的开始时间为Si,完成时间为fi,SiVfi。
[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),其中,b、c是常数,f(0)c
n
g(n)是n的某一个函数。
贝Uf(n)的非递归表达式为:
f(n)cbnbnig(i)
i1
2221
3.单源最短路径的求解。
问题的描述:
给定带权有向图(如下图所示)G=(V,E),其中每条边的权是
非负实数。
另外,还给定V中的一个顶点,称为源。
现在要计算从源到所有其它各顶点的最短路长度。
这里路的长度是指路上各边权之和。
这个问题通常称为单源最短路径问题。
解法:
现采用Dijkstra算法计算从源顶点1到其它顶点间最短路径。
请将
此过程填入下表中。
迭代
S
u
dist[2]
dist[3]
dist[4]
dist[5]
初始
{1}
-
maxint
30
100
4.请写出用回溯法解装载问题的函数。
装载问题:
有一批共n个集装箱要装上2艘载重量分别为cl和c2的轮船,
WjgC2
其中集装箱i的重量为wi,且j1。
装载问题要求确定是否有一个合理
的装载方案可将这n个集装箱装上这2艘轮船。
如果有,找出一种装载方案。
解:
voidbacktrack(inti)
{//搜索第i层结点
if(i>
n)//到达叶结点
更新最优解bestx,bestw;
return;
r-=w[i];
if(cw+w[i]<
=c){//搜索左子树
x[i]=1;
cw+=w[i];
backtrack(i+1);
cw-=w[i];
if(cw+r>
bestw){
x[i]=0;
//搜索右子树
r+=w[i];
5.用分支限界法解装载问题时,对算法进行了一些改进,下面的程序段给出了改进部分;
试说明斜线部分完成什么功能,以及这样做的原因,即采用这样的方式,算法在执行上有什么不同。
//检查左儿子结点
Typewt=Ew+w[i];
//左儿子结点的重量
if(wt<
=c){//可行结点
if(wt>
bestw)bestw=wt;
//加入活结点队列
if(i<
n)Q.Add(wt);
//检查右儿子结点
if(Ew+r>
bestw&
n)
Q.Add(Ew);
//可能含最优解
Q.Delete(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。
其它情况下,由最优子结构性质可建立递归关系如下:
0i0,j0
c[i][j]c[i1][j1]1i,j0必yj
max{c[i][j1],c[i1][j]}i,j0必yj
在程序中,b[i][j]记录C[i][j]的值是由哪一个子问题的解得到的
(1)请填写程序中的空格,以使函数LCSLength完成计算最优值的功能。
voidLCSLength(intm,intn,char*x,char*y,int**c,int**b)
inti,j;
for(i=1;
=m;
i++)c[i][0]=0;
=n;
i++)c[0][i]=0;
i++)
for(j=1;
j<
j++){
if(x[i]==y[j]){
c[i][j]=c[i-1][j-1]+1;
b[i][j]=1;
elseif(c[i-1][j]>
=c[i][j-1]){
c[i][j]=c[i-1][j];
b[i][j]=2;
else{c[i][j]=c[i][j-1];
b[i][j]=3;
(2)函数LCS实现根据b的内容打印出Xi和Yj的最长公共子序列。
请填
写程序中的空格,以使函数LCS完成构造最长公共子序列的功能(请将b[i][j]的取值与
(1)中您填写的取值对应,否则视为错误)
voidLCS(inti,intj,char*x,int**b)
if(i==0||j==O)return;
if(b[i][j]==1){
LCS(i-1,j-1,x,b);
cout<
<
x[i];
elseif(b[i][j]==2)LCS(i-1,j,x,b);
elseLCS(i,j-1,x,b);
8•对下面的递归算法,写出调用f(4)的执行结果
voidf(intk)
{if(k>
0)
{printf("
%d\n"
k);
f(k-1);
《算法分析与设计》期末复习题
(二)
、简要回答下列问题:
1.算法重要特性是什么?
2.算法分析的目的是什么?
3.算法的时间复杂性与问题的什么因素相关?
4.算法的渐进时间复杂性的含义?
5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?
6.简述二分检索(折半查找)算法的基本过程。
7.背包问题的目标函数和贪心算法最优化量度相同吗?
8.采用回溯法求解的问题,其解如何表示?
有什么规定?
9.回溯法的搜索特点是什么?
10.n皇后问题回溯算法的判别函数place的基本流程是什么?
11.为什么用分治法设计的算法一般有递归调用?
12.为什么要分析最坏情况下的算法时间复杂性?
13.简述渐进时间复杂性上界的定义。
14.二分检索算法最多的比较次数?
15.快速排序算法最坏情况下需要多少次比较运算?
16.贪心算法的基本思想?
17.回溯法的解(X1,X2,••…刘)的隐约束一般指什么?
18.阐述归并排序的分治思路。
19.快速排序的基本思想是什么。
20.什么是直接递归和间接递归?
消除递归一般要用到什么数据结构?
21•什么是哈密顿环问题?
22.用回溯法求解哈密顿环,如何定义判定函数?
23.请写出prim算法的基本思想。
参考答案:
1.确定性、可实现性、输入、输出、有穷性
2.分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。
3.算法的时间复杂性与问题的规模相关,是问题大小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€Dn
6.设输入是一个按非降次序排列的元素表A[i:
j]和x,选取A[(i+j)/2]与x比较,如果
A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]<
x,贝UA[i:
(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.在解空间树上跳跃式地深度优先搜索,即用判定函数考察x[k]的取值,如果x[k]是
合理的就搜索x[k]为根节点的子树,如果x[k]取完了所有的值,便回溯到x[k-1]。
10.将第K行的皇后分别与前k-1行的皇后比较,看是否与它们相容,如果不相容就返回false,测试完毕则返回true。
11.子问题的规模还很大时,必须继续使用分治法,反复分治,必然要用到递归。
12最坏情况下的时间复杂性决定算法的优劣,并且最坏情况下的时间复杂性较平均时间复杂性游可操作性。
13.T(n)是某算法的时间复杂性函数,f(n)是一简单函数,存在正整数No和C,n〉No,
有T(n)<
f(n),这种关系记作T(n)=O(f(n))。
14.二分检索算法的最多的比较次数为logn。
15..最坏情况下快速排序退化成冒泡排序,需要比较n2次。
16.是一种依据最优化量度依次选择输入的分级处理方法。
基本思路是:
首先根据题意,
选取一种量度标准;
然后按这种量度标准对这n个输入排序,依次选择输入量加入部分解
中。
如果当前这个输入量的加入,不满足约束条件,则不把此输入加到这部分解中。
17•回溯法的解(X1,X2,••…xn)的隐约束一般指个元素之间应满足的某种关系。
18.讲数组一分为二,分别对每个集合单独排序,然后将已排序的两个序列归并成一个
含n个元素的分好类的序列。
如果分割后子问题还很大,则继续分治,直到一个元素。
有比它大的放置在后一部分,并把该记录排在这两部分的中间,这个过程称作一次快速排序。
之后重复上述过程,直到每一部分内只有一个记录为止。
20.在定义一个过程或者函数的时候又出现了调用本过程或者函数的成分,既调用它自
己本身,这称为直接递归。
如果过程或者函数P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 期末 试题 规范 标准答案
![提示](https://static.bdocx.com/images/bang_tan.gif)