2006-2007学年第二学期《算法设计与分析》 A卷
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、对于下列各组函数,确定f(n) = O(g(n)),或者f(n) =Ω(g(n)),或f(n)=
(g(n))。(15分)
1. f(n)=logn2, g(n)=logn+5
2. f(n)=logn2, g(n) = n
3. f(n) = n, g(n)=log2n
4. f(n)=nlogn+n, g(n)=logn
三、给定如下矩阵连乘问题,用动态规划算法计算最优计算次序及最优值(15
分)。
A1 A2 A3 A4 A5 A6
20×10 10×35 35×15 15×40 40×25 25×30
四、对于数组a[0 : n-1],给定n段合并排序算法如下,建立其计算复杂性递归
表达式并求解(15分)。
Public static void mergesort(int [] a, int left, int right)
{
if(left < right)
{
int j = (int)Math.sqrt(right – left + 1);
if(j > 1)
{
for(int i = 0; i < j; i++)
mergesort(a, left + i*j, left + (i + 1) *j – 1);
mergesort(a, left+j*j, right);
}
mergeall(a, left, right);
}
}
其中,算法mergeall合并n个排好序的数组段。
五、给定图如下,求出最小生成树以及以顶点1为源的单源最短路径。(15分)
六、证明求最大公约数的欧几里得算法的正确性,并分析其算法复杂性。(15分)
int gcd(int a, int b)
{
if(b = = 0)
return a;
return gcd(b, a % b);
}
其中%为求模运算。
七、给定分别有n个元素的两个集合S和T,试设计一个判定S和T是否相等的
蒙特卡罗算法,并分别就相等和不相等(有一个元素不同)两种情形分析算法正确的概率。(15分)