一份《算法设计与分析》试卷+答案

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

2006-2007学年度第一学期
计算机科学系《算法设计与分析》期末试卷(A)
一对于下列各组函数,确定f(n)=O(g(n))是否成立。

(每题5分,
共20分)
1f(n)=3n,g(n)=n
f(n)=O(g(n))成立,因为存在正的常数C和自然数n,使得N>=n时,有F(n)<=Cg(n)
2f(n)=nlogn+n,g(n)=logn
不成立!N>=n时,有f(n)>=og(n);属于f(n)=πg(n)这种情况
3f(n)=log2n,g(n)=logn
不成立!当logN>=1时,总有f(n)>=log n,属于f(n)=πg(n)这种情况!
4f(n)=5,g(n)=log5
成立!总存在一个正的常数C,使得f(n)<=Cg(n)
1二分搜索法 int bin_seach ( int k[ ] , int n , int key ) { int low = 0 , high = n=1 , mid ; while ( low <= high ) { mid = ( low + high ) / 2 ; if ( key == k[ mid ] ) return mid ; if ( key > k[ mid ] ) low = mid + 1 ; else high = mid - 1 ; } return -1 ;} T(n)=n 2利用一维一级指针数组及二级指针输出二维数组元素。

#include "stdio.h" void main() { int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int *arr[3]={a[0],a[1],a[2]}; int i,j,**p; p=arr; for(i=0;i<3;i++){
for(j=0;j<4;j++)
printf("%3d",a[i][j]));
printf("%3d",*(&p[0][0]+i*4+j));
printf("%3d",*(p[i]+j));
printf("%3d",(*(p+i))[j]);
printf("%3d",*(*(p+i)+j));
printf("\n");}
printf("\n");
三 写出下列算法的时间复杂度函数.(每题5分,共10分)
————————————

————————————————

}
T(n)=12
四根据给定的算法求出下列问题的解。

(每题10分,共
50分)
1用合并排序法对数组{12,1,8,5,6,4,5}从小到大排序,并计算其时间复杂度T(n)。

2求解背包问题。

给定4种物品和一个背包,物品i的重量是Wi,其价值为Vi,背包的容量为C。

已知:w=(10,20,15,30),v=(30,45,60,60),c=50。

如何选择装入背包的物品,使得装入背包中物品的总价值最大? 3 2.5 4 2
画出树形图!
求解出答案!
最终结果:
3用回溯法求解旅行售货问题。

一售货员要到4个城市去推销商品,已知各城市间的路程如
表所示,选择一条从①点出发,经过各城市一遍,最后又回到①的最短路线。

1——>2--→4---->3-→1
————————————装————————————————
4根据kruskal算法画出下图的最小生成树。

p128
5用优先队列式分支限界法求解0-1背包问题:
给定n种物品和一背包。

物品i的重量是wi,其价值为vi,背包的容量为C。

当n=3时, w=[16,15,15],v=[45,25,25],c=30 问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
答: P197
优先队列式分支限界法:
•[A] B, C => B(45), C(0)
•[B, C] D, E => E(45)
•[E, C] J, K => K(45) [1, 0, 0] •[C] F, G => F(25), G(0)
•[F, G] L, M => L(50), [0, 1, 1] M(25) •[G] N, O => N(25), O(0)。

相关文档
最新文档