当前位置:文档之家› 算法设计与分析试卷及答案.doc

算法设计与分析试卷及答案.doc

湖南科技学院二○

学期期末考试
信息与计算科学专业
年级《算法设计与分析》
试题
考试类型:开卷
试卷类型: C 卷
考试时量: 120 分钟
题号 一 二 三 四 五 总分 统分人
得 分 阅卷人
一、填空题(每小题 3 分,共计 30 分)
1. 用 O 、Ω和θ表示函数 f 与 g 之间的关系 ______________________________ 。

f n n lo
g n g n
log n
1,
n 1
2. 算法的时间复杂性为 f (n)
n
,则算法的时间复杂性的阶
8 f (3n / 7) n,
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
点的单源最短路径,请画出求
获得中间解的结点用单圆圈○
框起(如○
),最优解用双圆圈◎框起。

v2
v2 1 v5 2 v8
6
2 6
3
3
3
v1 v3 10
6 v9
4
4
1 v7
2
2
10
v4v6
三、算法填空(每空 2 分,共计 10 分)
设 R={r1, r2, ..., r n }是要进行排列的 n 个元素,其中元素 r 1, r2, ..., r n可能相同,试设计一个算法,列出 R 的所有不同排列,并给出不同排列的总数。

算法如下,填写缺失的语句。

template<typename Type>
void Swap(Type &a,Type &b){
Type t=b;
________________;., n}要存放在长度为L 的磁带上。

程序i 存放在磁带上的长度是 Li,1≤ i≤ n。

程序存储问题要求确定这n 个程序在磁带上的一个存储方案,使得
能够在磁带上存储尽可能多的程序,在保证存储最多程序的前提下还要求磁带的利用率
达到最大。

(1)给出求解存储最多程序的算法,并证明算法的正确性;
(2)给出求解使磁带的利用率达到最大的方案的算法思路。

五、算法设计(共计15 分)
通过键盘输入一个高精度的正整数n( n 的有效位数≤ 240),去掉其中任意s 个数字后,剩下的数字按原左右次序将组成一个新的正整数。

对给定的n 和 s,寻找一种方案,使得剩下的数字组成的新最小。

如输入 n 为 178543, s 为 4,结果为13
⑴ 简述你的算法思路;
⑵给出算法(用C++描述)。

注:正整数n 存于字符串中,例:
string n="178543";
(0)f(n)= Ω (g(n))
log 7 8
2.n3
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.
v1
3 v3
6 v2 1 v4
5 V2
6 v5 3 v3 11 v6
12 v410 v69 v78 v813 v9
20 v5 12 v7 13 v911 v9
错一处扣 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分
string MinNum(string n,int s)
{
while(s>0)
{
unsigned int i=0; // 从串首开始找
while(i<()&&(i)<(i+1)))
i++;
(i,1); // 删除字符串n 中索引为i 的字符
s--;
}
while()>1&&(0)=='0')
(0,1);// 删除串首可能产生的无用零
return n;
}。

相关主题