算法设计与分析试卷及答案解析.doc
,湖南科技学院二 年 学期期末考试信息与计算科学专业 年级算法设计与分析 试题题 号一二三四五总分统分人得 分阅卷人复查人考试类型:开卷 试卷类型: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所需的时间分别为:M110281269414M2571151631113作业12345678给出一个最优调度方案,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少,并计算所需的最少时间。答:最优调度方案为所需的最少时间为:_3. 根据优先队列式分支限界法,求下图中从v1点到v9点的单源最短路径,请画出求得最优解的解空间树。要求中间被舍弃的结点用标记,获得中间解的结点用单圆圈框起(如),最优解用双圆圈框起。三、算法填空(每空2分,共计10分)设R=r1, r2, ., rn是要进行排列的n个元素,其中元素r1, r2, ., rn可能相同,试设计一个算法,列出R的所有不同排列,并给出不同排列的总数。算法如下,填写缺失的语句。template<typename Type>void Swap(Type &a,Type &b) Type t=b; _; /1 a=t;template<typename Type>bool ok(Type R,int k,int i) if(i>k) for(int t=k;t<i;t+) if( _) /2 return false; return true;template<typename Type>void Perm(Type R,int k,int n,int &sum) /n为元素个数,sum记录不同排列的总数 if(k=n) _; /3 for(int i=1;i<=n;i+) cout<<_; /4 cout<<endl; else for(int i=k;i<=n;i+) if(ok(R,k,i) Swap(Rk,Ri); Perm(_); /5 Swap(Rk,Ri); 四、算法设计(共计15分)设有n个程序1, 2, 3., n要存放在长度为L的磁带上。程序i存放在磁带上的长度是Li,1in。 程序存储问题要求确定这n个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序,在保证存储最多程序的前提下还要求磁带的利用率达到最大。(1)给出求解存储最多程序的算法,并证明算法的正确性;(2)给出求解使磁带的利用率达到最大的方案的算法思路。五、算法设计(共计15分)通过键盘输入一个高精度的正整数n(n的有效位数240),去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。对给定的n和s,寻找一种方案,使得剩下的数字组成的新最小。如输入n为178543,s为4,结果为13 简述你的算法思路; 给出算法(用C+描述)。注:正整数n存于字符串中,例:string n="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分)27548163所需的最少时间为:73 (4分 在前一问正确的前提下方可得分)3. 错一处扣1分三、算法填空(每空2分,共计10分)1. b=a2. Rt=Ri3. sum+4. Ri5. R,k+1,n,sum四、算法设计(共计15分)贪心策略:最短程序优先。将程序从小到大排序,依次选取尽可能多的程序,但总长度不超过磁盘容量,则可求得最多可以存储的程序个数m。采用回溯法,从n个程序中选取总长度最大的m个,算法同装载问题。 五、算法设计(共计15分)1. 7分为了尽可能地逼近目标,选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字母。然后回到串首,按上述规则再删除下一个数字。重复以上过程s次,剩下的数字串便是总是的解。2. 8分string MinNum(string n,int s) while(s>0) unsigned int 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;