湖南科技学院二○年学期期末考试
信息与计算科学专业年级《算法设计与分析》试题
考试类型:开卷试卷类型:C卷考试时量:120分钟
题号一二三四五总分统分人
得分
阅卷人
复查人
一、填空题(每小题3 分,共计30 分)
1、用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所需得时间分别为:
M110 2 8 12 6 9414
M2 5 7 1 1516 3 11 13
作业 1 2 3 4 5 6 78
给出一个最优调度方案,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需得时间最少,并计算所需得最少时间。
答:
最优调度方案为
所需得最少时间为:_______________________
3、根据优先队列式分支限界法,求下图中从v1点到v9点得单源最短路径,请画出求得最优解得解空间树。
要求中间被舍弃得结点用×标记,获得中间解得结点用单圆圈○框起(如错误!),最优解用双圆圈◎框起。
v1
v2
v3
v4
v5
v6
v7
v8
v9 6
1
3
2
1
6
2
10
2
3
6
3
2
4
10
4
三、算法填空(每空2分,共计10分)
设R={r1, r2,、、、, rn}就是要进行排列得n个元素,其中元素r1, r2, 、、、, rn可能相同,试设计一个算法,列出R得所有不同排列,并给出不同排列得总数。
算法如下,填写缺失得语句。
template<typenameType>
void S &a,Type &b){
Type t=b;
________________;//1
a=t;
}
template<typenameType>
bool ok(Type R[],int k,inti){
if(i>k)
for(int t=k;t<i;t++)
if(__________________) //2
return false;
returntrue;
}
template<typenameType>
void Perm(Type R[],int k,int n,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, 2, 3、、、,n}要存放在长度为L得磁带上。
程序i存放在磁带上得长
度就是Li,1≤i≤n。
程序存储问题要求确定这n个程序在磁带上得一个存储方案,使得
能够在磁带上存储尽可能多得程序,在保证存储最多程序得前提下还要求磁带得利用率
达到最大。
(1)给出求解存储最多程序得算法,并证明算法得正确性;
(2)给出求解使磁带得利用率达到最大得方案得算法思路。
五、算法设计(共计15分)
通过键盘输入一个高精度得正整数n(n得有效位数≤240),去掉其中任意s个数字后,剩
下得数字按原左右次序将组成一个新得正整数。
对给定得n与s,寻找一种方案,使得
剩下得数字组成得新最小。
如输入n为178543,s为4,结果为13
⑴简述您得算法思路;
⑵给出算法(用C++描述)。
注:正整数n存于字符串中,例:
stringn="178543";
n、at(0) //返回字符串n得第1个字符
n、erase(2,3) //删除n中索引为2开始得3个字符
解:
⑴算法思路
⑵算法
string MinNum(string n,int s)
{
湖南科技学院二○年学期期末考试
《算法设计与分析》试题C答案
一、填空题(每小题3 分,共计30 分)
1、f(n)=Ω(g(n))
2、3、划分得对称性
4、由若干条指令组成组成得有穷序列(解决问题得一种方法或一个过程)
5、分枝限界法
6、最坏
7、高
8、最优子结构
9、所求问题得整体最优解可以通过一系列局部最优得选择,即贪心选择来达到。
10、深度优先
二、简答题(每小题10分,共计30分)
1、
回溯法在问题得解空间树中,按深度优先策略,从根结点出发搜索解空间树。
算法搜索至解空间树得任意一点时,先判断该结点就是否包含问题得解。
如果肯定不包含,则跳过对该结点为根得子树得搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。
5分
基本步骤: 5分
①针对拨给问题,定义问题得解空间;
②确定易于搜索得解空间结构;
③以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
2、
最优调度方案为(6分)
所需得最少时间为:73 (4分在前一问正确得前提下方可得分)
3、
12
错一处扣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(string n,int s)
{
while(s>0)
{
unsignedint i=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); //删除串首可能产生得无用零
return n;
}。