c标准答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

西北民族大学计算机科学与信息工程学院期末考试算法设计与分析试卷( C 卷)
参考答案及评分标准
专业: 课程代码: 一、填空题(每空 1 分,共 25 分)
1.输入,输出,确定性,有限性。

2。

某种程序设计语言的具体实现,有限性,无限循环中。

3.时间复杂性,空间复杂性,问题的规模,算法的输入,算法本身的函数。

4.最坏情况,最好情况,平均情况,最坏情况。

5.备忘录方法。

6.最优子结构性质,子问题重叠性质。

7.数值概率算法、蒙特卡罗算法、拉斯维加斯算法、舍伍德算法。

8.整体最优考虑、局部最优选择。

1、通俗地讲,算法是指解决问题的方法或过程。

严格地讲,算法是满足下述性质的指令序列:(输入)、(输出)、(确定性)、(有限性)。

2、程序(program)与算法不同。

程序是算法用(某种程序设计语言的具体)实现。

程序可以不满足算法的(有限性)性质。

例如操作系统,它是在(无限循环中)执行的程序。

3、算法的复杂性是算法运行所需要的计算机资源的量,它有(时间复杂
性和(空间复杂性)之分。

这个量应该集中反映算法的效率。

它只依赖算法要解的(问题的规模)、(算法的输入)和(算法本身的函数)。

4、一般情况下,时间复杂度分为(最坏情况)、(最好情况)
和(平均情况)。

但实践表明,可操作性最好且最有实际价值的是
(最坏情况)下的时间复杂度。

5、动态规划法的变形是(备忘录方法)。

6、动态规划算法的基本要素是(最优子结构性质)和
(子问题重叠性质)。

7、概率算法可分为:(数值概率算法)算法、(蒙特卡罗算法)
算法、(拉斯维加斯算法)算法、(舍伍德算法)算法。

8、贪心算法并不从(整体最优考虑)考虑,它所做出的选择只是
在某种意义上的(局部最优选择)。

二、证明简答(每小题10 分,共40 分)
1、分析线性时间选择问题的划分基准和算法的设计思想。

(10分)
线性时间(元素)选择问题的一般提法是:给定线性序集中n个元素和一个正数k,1<=k<=n,要求找出这n个元素中第k小的元素,即如果将这n个元素依其线性序排列时,排在第k个的元素即为要找的元素。

划分
基准:(1)将n 个输入元素划分成n /5个组(上取整),每组5个元素,用任意一种排序算法,将每组中的元素排好序,并取出每组的中位数,共[n /5]个(2)递归调用算法select 来找出[n /5]个元素的中位数。

以它作为划分基准。

Randomized-select(A,P,r,i) if p=r;
then return A[P];
q=randomized-partition(A,p,r); k=q-p+1; if i=k;
then return A[q];
else i<k;
then return randomized-select(A,p,q-1,i) else return randomized-select(A,q+1,r,i-k) 2、简述动态规划算法的基本要素,并写出其递归不等式。

(10分)
最优子结构性质和子问题重叠性质是动态规划算法求解的基本要素。

动态规划算法中,利用问题的最优子结构性质,以自底向上的方式递归德从子问题的最优解逐步构造出整个问题的最优解。

算法考察的子问题空间的规模较小。

在递归算法自顶向下求解问题是,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。

动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只求解一次,而后将其解保存在一个表格中,当再次需要解此问题时,只是简单的用常数时间查看一下结果。

不同的子问题个数随问题的大小呈多项式增长。

T(n)≥O(1) n=1
T(n)≥1+)1)k n (T )k ((T 1
n 1
k +-+∑-= n>1
3.用分支限界法求单源最短路径画出解空间树。

单源最短路径问题适合于用分支限界法求解。

在有向图G中,每一边都有一个非负边权。

优先队列式分支限界法用极小堆来存储活结点表,其优先级是结点所对应的当前路长。

算法从源顶点s 和空优先队列开始,结点被扩展后,它的儿子结点被依次插入堆中,此后,算法从堆中取出具有最小当前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。

如果从当前扩展结点i 到顶点j 有边可达,且从源出发,途经顶点i 到顶点j 的所相应的路径的长度小于当前最优路径长度,则将该顶点作为活结点插入到活结点优先队列中。

这个结点的扩展过程一直继续到活结点优先队列为空时为止。

4、用回溯法解旅行售货员问题,画出解空间树,并简述搜索过程。

(10分) 旅行售货员问题的解空间可以组成一棵树,回溯法找最小费用周游路线时,从解空间树的根结点A 出发,搜索至B,C,F,L 。

在叶结点L 处记录找到的周游路线1、2、3、4、1。

依次类推。

三、分析计算( 共3题35分)
1、用动态规划的思想分析矩阵连乘问题(1)分析最优解的结构(2)建立递归关系(3)写出算法过程。

(15分)
(1)分析最优解的结构
:矩阵连乘积A[1:n]设其计算次序在Ak 和Ak+1
之间将矩阵链断开,则计算A[1:n]的最优次序所包含的计算矩阵子链A[1:k]和 A[k+1:n]的次序也是最优的。

事实上,若有一个计算A[1:k]的次序需要的计算量更少,则用此次序替换原来的A[1:k]的次序,得到的计算A[1:n]的计算量将更少,这是一个矛盾。

同理,计算A[1:n]的最优次序所包含的计算矩阵子链A[k+1:n]的次序也是最优的。

(2)建立递归关系: m[i][j]={
.......................................................................................................0............................................1]][1[]][[min j i j
i pkpj pi j k k i i =<-+++≤
(3)写出算法过程。

MATRIXCHAIN(p[],m[],s[])
{
n=length[p]-1;
for(i=1;i<=n ;i++) m[i][j]=0; for(r=2;r<=n ;r++) for(i=1;i<=n-r+1;i++){
j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j]; s[i][j]= i;
for(k=i+1;k<j ;k++)
t= m[i][k]+ m[k+1][j]+ p[i-1]*p[i]*p[j];
if(t=m[i][j]){
m[i][j]=t; s[i][j]=k;}
}
} }
2、 货物装箱问题:设有一艘货船装物品,共有n=6件物品,它们的重量如下表示:[w1,..., w6] = [100, 200, 50, 90, 50, 20],船的限载重量是c=300。

要求物品装得最多。

试用贪心算法装船。

(5分)
解:w2,w1
3、 在题2 的条件下如果物品具有价值,[p1,..., p6] = [20, 50, 25, 15, 20, 10]。

试设计一个背包问题的贪心算法,要求背包的物品价值最大。

请用伪代码描述你的算法。

针对你的算法,分析算法的时间复杂性。

(15分) 解:
public static float knapsack(float c,float []w,float[]v,float []x) {
int n=v.length;
Element []d=nes Element[n];
for(int i=0;i<n;i++)
d[i]=new Element(w[i],v[i],i); MergeSort.mergeSort(d);
int I;
float opt=0;
for(i=0;i<n;i++) x[i]=0;
for(i=0;i<n;i++){
if(d[i].w>c) break;
x[d[i].i]=1;
opt+=d[i].w;
}
if(i<n){
x[d[i].i]=c/d[i].w;
opt+= x[d[i].i]*d[i].v;
}
return opt;
}。

相关文档
最新文档