算法分析与设计 第三次课外作业
一. 单选题(共7题,70分)
-
(单选题)
给定已排好序的 n n n 个元素 a [ 0 : n − 1 ] a[0:n-1] a[0:n−1] ,现在要在这 n n n 个元素中找出一特定元素 x x x 。如果采用二分搜索技术,在最坏情况下的时间复杂性为( )。
A. T ( n ) = O ( n 2 l o g n ) T(n)=O(n^2logn) T(n)=O(n2logn)
B. T ( n ) = θ ( n l o g n ) T(n)=\theta(nlogn) T(n)=θ(nlogn)
C. T ( n ) = O ( n ! ) T(n)=O(n!) T(n)=O(n!)
D. T ( n ) = O ( l o g n ) T(n)=O(logn) T(n)=O(logn)正确答案: D :T(n)=O(logn);
10分 -
(单选题)
利用分治法求解大整数乘法问题时,将两个 n n n 位二进制整数 X X X 和 Y Y Y 都分为两段,每段 n / 2 n/2 n/2 位,即: X = a 2 n / 2 + b X = a2^{n/2} + b X=a2n/2+b, Y = c 2 n / 2 + d Y = c 2^{n/2} + d Y=c2n/2+d,根据( )可以得到复杂度为 O ( n l o g 3 ) O(n^{log3}) O(nlog3)的解。A. X Y = a c 2 n + ( ( a + b ) ( d − c ) + a c − b d ) 2 n / 2 + b d XY = ac \; 2^n + ((a+b)(d-c)+ac-bd) \; 2^{n/2} + bd XY=ac2n+((a+b)(d−c)+ac−bd)2n/2+bd
B. X Y = a c 2 n + ( ( a − b ) ( d − c ) + a c + b d ) 2 n / 2 + b d XY = ac \; 2^n + ((a-b)(d-c)+ac+bd) \; 2^{n/2} + bd XY=ac2n+((a−b)(d−c)+ac+bd)2n/2+bd
C. X Y = a c 2 n + ( ( a + b ) ( d + c ) + a c − b d ) 2 n / 2 + b d XY = ac \; 2^n + ((a+b)(d+c)+ac-bd) \; 2^{n/2} + bd XY=ac2n+((a+b)(d+c)+ac−bd)2n/2+bd
D. X Y = a c 2 n + ( a d + b c ) 2 n / 2 + b d XY = ac \; 2^n + (ad + bc) \; 2^{n/2} + bd XY=ac2n+(ad+bc)2n/2+bd正确答案: B :XY = ac 2n + ((a-b)(d-c)+ac+bd) 2n/2 + bd;
10分 -
(单选题)
Strassen矩阵乘法是利用( )实现的算法。
A. 分治策略
B. 动态规划法
C. 贪心法
D. 回溯法正确答案: A :分治策略 ;
10分 -
(单选题)
在棋盘覆盖问题中,对于 2 k × 2 k 2^k \times 2^k 2k×2k 的特殊棋盘(有一个特殊方格),所需的L型骨牌的个数是( )。
A. ( 4 k − 1 ) / 3 (4^k-1)/3 (4k−1)/3
B. 2 k / 3 2^k/3 2k/3
C. 4 k 4^k 4k
D. 2 k 2^k 2k正确答案: A : (4^k-1)/3 ;
10分 -
(单选题)
关于合并排序,以下叙述中错误的是( )。
A. 合并排序算法是渐近最优算法
B. 从分治策略的机制入手,容易消除算法中的递归
C. 合并排序算法只针对长度为 2 n 2^n 2n的数组有效
D. 在通常情况下,自然合并排序所需的合并次数较少正确答案: C :合并排序算法只针对长度为2^n的数组有效 ;
10分 -
(单选题)
快速排序算法的性能取决于划分的对称性。在以下关于划分基准选择的解释中,最合理的是( )。
A. 随机选择一个元素作为划分基准
B. 取子序列的第一个元素作为划分基准
C. 用中位数方法寻找划分基准
D. 以上皆可行,但不同方法,算法复杂度上界可能不同正确答案: D :以上皆可行,但不同方法,算法复杂度上界可能不同;
10分 -
(单选题)
下列问题中( )不能用分治法求解。
A. 合并排序
B. 矩阵乘法
C. 背包问题
D. 大整数的乘法正确答案: C :背包问题;
10分
二. 填空题(共2题,20分)
-
(填空题)
Strassen矩阵乘法之所以能够提高算法效率,其根本原因在于该算法把2个n阶方阵的乘积转化成_____个n/2阶方阵的乘积。正确答案:
(1) 7 -
(填空题)
合并排序算法可递归地描述如下:public static void mergeSort(Comparable a[],int left, int right) { if(left<right){ //至少有2个元素 int i=(left+right)/2; //取中点 mergeSort(a,left,i); ___________; merge(a,b,left,i,right); //合并到数组b copy(a,b,left,right); //复制回数组a } }
正确答案:
(1)
mergeSort(a,i+1,right)
三. 判断题(共1题,10分)
-
(判断题)
针对已按降序排好序的n个元素,二分搜索算法将n个元素分成个数大致相同的两半,取a[n/2]与x进行比较。若x<a[n/2],则只要在数组a的左半部继续搜索x。
A. 对
B. 错正确答案: 错
10分