湖南科技学院二○年学期期末考试
 信息与计算科学专业年级《算法设计与分析》试题
考试类型:开卷试卷类型:C卷考试时量:120分钟
一、填空题(每小题3分,共计30分)
字符串长度算不算 01.用O、Ω和θ表示函数f与g之间的关系______________________________。
2.算法的时间复杂性为,则算法的时间复杂性的阶为__________________________。
3.快速排序算法的性能取决于______________________________。
4.算法是_______________________________________________________。
5.在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是_________________________。
6.在算法的三种情况下的复杂性中,可操作性最好且最有实际价值的是_____情况下的时间复杂性。
7.大Ω符号用来描述增长率的下限,这个下限的阶越___________,结果就越有价值。。
8.____________________________是问题能用动态规划算法求解的前提。
9.贪心选择性质是指____________________________________________________________________________________________________________________。
10.回溯法在问题的解空间树中,按______________策略,从根结点出发搜索解空间树。
二、简答题(每小题10分,共计30分)
1.试述回溯法的基本思想及用回溯法解题的步骤。
2.有8个作业{1,2,…,8}要在由2台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为:
M1
10
2
8
12
6
9
4
14
M2
5
7
1
15
16
3
11
13
作业
1
2
3
4
5
6
7
8
给出一个最优调度方案,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少,并计算所需的最少时间。
答:
最优调度方案为
所需的最少时间为:_______________________
3.根据优先队列式分支限界法,求下图中从v1点到v9点的单源最短路径,请画出求得最优解的解空间树。要求中间被舍弃的结点用×标记,获得中间解的结点用单圆圈○框起(如),最优解用双圆圈◎框起。
三、算法填空(每空2分,共计10分)
R={r1,r2,...,rn}是要进行排列的n个元素,其中元素r1,r2,...,rn可能相同,试设计一个算法,列出R的所有不同排列,并给出不同排列的总数。算法如下,填写缺失的语句。
template<typenameType>
voidSwap(Type&a,Type&b){
Typet=b;
________________;//1
a=t;
}
template<typenameType>
boolok(TypeR[],intk,inti){
if(i>k)
for(intt=k;t<i;t++)
if(__________________)//2
returnfalse;
returntrue;
}
template<typenameType>
voidPerm(TypeR[],intk,intn,int&sum){//n为元素个数,sum记录不同排列的总数
if(k==n){
______________________;//3
for(inti=1;i<=n;i++)
cout<<___________________;//4
cout<<endl;
}else{
for(inti=k;i<=n;i++)
if(ok(R,k,i)){
Swap(R[k],R[i]);
Perm(_________________________);//5
Swap(R[k],R[i]);
}
}
}
四、算法设计(共计15分)
设有n个程序{1,,n}要存放在长度为L的磁带上。程序i存放在磁带上的长度是Li1in。程序存储问题要求确定这n个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能
多的程序,在保证存储最多程序的前提下还要求磁带的利用率达到最大。
1)给出求解存储最多程序的算法,并证明算法的正确性;
2)给出求解使磁带的利用率达到最大的方案的算法思路。。
五、算法设计(共计15分)
通过键盘输入一个高精度的正整数nn的有效位数≤240),去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。对给定的ns,寻一种方案,使得剩下的数字组成的新最小。
如输入n178543s4,结果为13
⑴简述你的算法思路;
⑵给出算法(用C++描述)。
注:正整数n存于字符串中,例:
stringn="178543";
n.at(0)//返回字符串n的第1个字符
n.erase(2,3)//删除n中索引为2开始的3个字符
解:
⑴算法思路
⑵算法
stringMinNum(stringn,ints)
{
湖南科技学院二○年学期期末考试
《算法设计与分析》试题C答案
一、填空题(每小题3分,共计30分)
1.f(n)=Ω(g(n))
2.3.划分的对称性
4.由若干条指令组成组成的有穷序列(解决问题的一种方法或一个过程)
5.分枝限界法6.最坏7.高8.最优子结构
9.所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。
10.深度优先
二、简答题(每小题10分,共计30分)
1.
回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。5分
基本步骤:5分
①针对拨给问题,定义问题的解空间;
②确定易于搜索的解空间结构;
③以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
2.
最优调度方案为(6分)
2
7
5
4
8
1
6
3
所需的最少时间为:73(4分在前一问正确的前提下方可得分)
3.
错一处扣1分
三、算法填空(每空2分,共计10分)
1.b=a
2.R[t]==R[i]
3.sum++
4.R[i]
5.R,k+1,n,sum
四、算法设计(共计15分)
贪心策略:最短程序优先。将程序从小到大排序,依次选取尽可能多的程序,但总长度不超过磁盘容量,则可求得最多可以存储的程序个数m。
采用回溯法,从n个程序中选取总长度最大的m个,算法同装载问题。
五、算法设计(共计15分)
1.7分
    为了尽可能地逼近目标,选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字母。然后回到串首,按上述规则再删除下一个数字。重复以上过程s次,剩下的数字串便是总是的解。
2.8分
stringMinNum(stringn,ints)
{
while(s>0)
{
unsignedinti=0;//从串首开始
while(i<n.length()&&(n.at(i)<n.at(i+1)))
i++;
n.erase(i,1);//删除字符串n中索引为i的字符
s--;
}
while(n.length()>1&&n.at(0)=='0')
n.erase(0,1);//删除串首可能产生的无用零
returnn;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。