算法设计复习题 下载本文

一、选择题

1.选出不是算法所必须具备的特征(C)。

A有穷性 B确切性 C高效性 D可行性 2.不属于给合问题的是( C )。

A Euler的36名军官问题 B 图的Hamiliton C求二项式展开系数 D 集合的幂集 3.下列( C )不是衡量算法的标准。

A 时间效率 B 空间效率 C 问题的难度 D 适应能力

4.下列函数关系随着输入量增大增加量最快的是( D )。 A logn Bn3 C2n D n!

5.如果某一算法的执行时间不超过输入规模的2倍,那么算法渐近时间复杂度为( B )。 A O(2n) B O(n) C? (n) D ?(n) 6.下列程序段的算法时间复杂度是( D ) for (i=1;i<=n;i++)

for (j=1;i<=m;m++)

S;

A O(n2) B O(m2) C O(m+n) D O(mn) 7.下列程序段S执行次数为( C )。 for (i=1;i<=n;i++)

for (j=1;i<=m;m++) S;

A nB n/2 C n(n+1) D n(n+1)/2 8.使用F(n)=n*f(n-1)递归求F(4),递归调用子函数的次数为(D )。 A 3次 B 4次 C 5次 D 8次 9.递推关系M(n)=M(n-1)+1,M(0)=0的算法时间复杂度为( C )。 A O(n!) B O(2n) C O(n) D O(1) 10.与递推关系x(n)=2x(n-1)+1,x(1)=1等价的通项公式为( B )。 A x(n)=2n B x(n)=2n-1 C x(n)=2n+1 D x(n)=n! 11.三个盘子的汉诺塔,至少要执行移动操作次数为( D )。 A1次 B 3次 C 6次 D 7次 12.Fibonacci数列第10项为(D)。 A 3 B 13 C 21 D 34 13.12个金币中有一枚是假币,至少需要称量的次数是( C )。

A 0 B 1 C 3 D 4

14.二维最近邻点问题,如果使用分治法,对于一个子集上的某一点,另一个子集上需要检查的点的个数是(C )。

A 1个 B 2个 C 6个 D 8个

15.一维最近邻点问题,如果使用分治法,对于一个子集上的某一点,另一个子集上需要检查的点的个数是( B )。

A 1个 B 2个 C 6个 D 8个 15.下列图形不属于凸集的是( D )。

A 三角形 B 四边形 C 五边形 D 五角星

16.对于凸集下列说法正确的是( B )。 A 凸集中的所有点都属于凸包; B 凸集中任意两点的连线都在凸中;C 凸集中任意两点的连线都不在凸集中;D一个点集如果不是凸集,则点集中任意两点的连线都不在凸集中

2

2

1

17.下列是动态规划算法基本要素的是( A )。

A 最优子结构 B构造最优解 C 贪心选择因子 D界限函数 18.下列问题中具有多项式解法的是(C)。

A背包问题 B生成排列序列问题 C n个元素的排序问题 D 集合的幂集问题 19.如果背包的容量为100,而物体共有10件,则使用动态规划求解背包问题数组大小为(D )。

A 10 B 100 C 1000 D 10000 20.排列问题属于( D )。

A 可解问题 B不可解问题 C P问题 D NP问题 21.(A )算法应用到广度优先遍历策略。

A 分支界限法 B 动态规划法 C分治法 D回溯法 22.Dijstra算法属于( A )。

A 贪心算法 B概率算法 C回溯法 D分支限界法 23.若f(n)=2n3+3n,g(n)=100n2+2n+100,则f=O(g)为( B )。 A 真 B 假 C 无法确定 D均不是

24.若f(n)=50n+logn,g(n)=10n+loglogn,则f=O(g)为(A )。 A 真 B 假 C 无法确定 D均不是 25.Prim算法求最小生成树采用的是( A )算法思想。

A 贪心算法 B 动态规划法 C 回溯法 D 蛮力法 二、简答题

1.给出递推公式x(n)=x(n-1)+n,x(0)=0对应的通项公式计算过程? 解:

X(n)-X(n-1)=n X(n-1)-X(n-2)=n-1 …… …… X(1)-X(0)=1

X(n)-X(0)=(n+1)n\\2

X(n)= (n+1)n\\2

2.?、?、?之间的区别与联系是什么? 答:?描述增长率的上限

?用来表示算法的精确阶

?描述增长率的下限

只要当考察问题规模充分大时,算法中基本语句的执行次数在渐近意义下的阶,……3种等渐近符号。

3.什么是数据结构,什么是算法,两者有什么关系? 答:

数据结构:计算机存储/族素质数据的方式。 算法:一系列解决问题的指令。 程序=算法+数据结构

4.将4n2,logn,3n,20n,2,n2/3,n!按渐近阶从低到高顺序排序。 答:

2

2

5.举例说明分治法、动态规划法和贪心法适用范围,及三者之间的区别。

答:

分治法:适用于原问题可划分为子问题时如汉诺塔问题(循环赛,最近对,棋盘覆盖等)

动态规划:当原问题可分解为子问题茄子问题重叠并且具有最优子结构时可用动态规划法,如TSP问题(多端最短路径问题,0/1背包问题等)

贪心:当一个问题具有最优子结构性质且具有贪心选择性时可用贪心算法,如最小生成树问题(背包问题,活动安排问题等)

在分治法德基础上,满足最优子结构性质才能用动态规划,在动态规划可行的基础上满足贪心选择性才能用贪心。

6.简述分治法、贪心法、蛮力法、回溯法、减治法的设计思想。 答:

分治:建一个难以直接解决的大问题划分成一些规模较小的子问题,以便各个击破,分而治之。

贪心:指根据当前已有信息做出选择,不从整体最优考虑,只选择局部最优。

蛮力:采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解。 回溯:只构造可能解的一部分,然后评估这个部分解,如果这个部分解有可能导致一个完全解,则对其进一步构造,否则,就不必继续构造这个解了。

减治:把一个大问题划分为若干子问题,但些子问题不需要分别求解,只需求解其中那个一个子问题。

7.举例说明分治法和减治法的在设计上区别与联系。 答:

分治法是将一个大问题分解为若干子问题分别求解,而减治法是只求解部分子问题。

8.简述什么是欧拉回路,TSP问题,哈密顿回路问题。 答:

欧拉回路:图G的一个回路,若它恰它通过G 中每条边一次,则称该回路为欧拉回路。 TSP:从图的一个顶点出发,每个定点只能访问一次,最后回到原点且使路径最短。 哈密顿回路:从一个城市出发,紧锅盖每一个城市恰好一次,然后回到出发城市。

9.Strassen矩阵乘法可以利用什么算法实现. 答:可用分治法实现。 三.应用题

1.给出应用动态规划法设计算法的一般步骤,并用动态规划法求下面多段图中从顶点0到顶点15的最短路径,写出求解过程。 1 9 8 6 7 4 5 7 7 9 8 5 3 4 0 2 3 2 8 4 7 3

6 8 5 6 6 6 3

解:

d(0,9)=min{c01 +d(1,9) , c02+d(2,9) , c03 +d(3,9)} d(1,9)=min{c14 +d(4,9) , c15+d(5,9) }

d(2,9)=min{c24 +d(4,9) , c25+d(5,9) , c26 +d(6,9)} d(3,9)=min{c35 +d(5,9) , c36+d(6,9) }

d(4,9)=min{c47 +d(7,9) , c48+d(8,9) } d(5,9)=min{c57 +d(7,9) , c58+d(8,9) } d(0,9)=min{c67 +d(7,9) , c68+d(8,9) }

d(7,9)= c79 =7 (7→9)

d(8,9)= c89 =3(8→9)

d(6,9)=min{6+7,5+3}=8(6→8) d(5,9)= min{8+7,6+3}=9(5→8) d(4,9)= min{5+7,6+3}=9(4→8) d(3,9)= min{4+9,7+8}=13(3→5) d(2,9)= min{6+9,7+9,8+8}=15(2→4) d(1,9)= min{9+9,8+9}=17(1→5)

d(0,9)= min{4+17,2+15,3+13}=16(0→3)

最后得最短路径为0→3→5→8→9 长度为16。

2.有4个物品,其重量分别为(4, 7, 5, 3),物品的价值分别为(40, 42, 25, 12),背包容量为10。试设计3种贪心策略,并给出在每种贪心策略下背包问题的解。 解:

按单位价值最大,装入物品1、3 总价值65 按背包容量最大,装入物品2,4 总价值54

3.给出{23 13 49 6 31 19 28}采用快速排序思想进行排序时一次划分的过程示意图。 解:

19 13 49 6 31 23 28 19 13 23 6 31 49 28 19 13 6 23 31 49 28 4.画出当n?4时,货郎担问题的状态空间树。给出

1 4 2 3 2 4 1 4 1 4 1 3 3 3 2 2 3 4 2 4 2 3 3 4 1 4 1 3 2 4 1 4 1 2 2 3 1 3 2 1 4 3 4 2 3 2 4 3 4 1 3 1 4 2 4 1 2 1 3 2 3 1 1 2

有4个顶点的货郎担问题,其费用矩阵如图所示,求从顶点1出发,最后回到顶点1的最短路线。画出解空间树搜索过程。

4

∞ ∞ 1 7 8 ∞ 5 1 7 2 ∞ 6 2 5 3 ∞

5.画出当n?4时,0/1背包问题的状态空间树

1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 给定背包容量W=10,每件物体的重量以及价值为14(42),6(12),8(40),10(25) ,画出解空间树搜索过程。

四、算法设计题

1.给定数组A[n],存储n个实数,试设计一个算法,在最坏情况下用最少比较次数找出该数组中元素的最大值和最小值,并说明采用了何种算法设计思想,其最坏比较多少次。 2.描述贪心法的求解过程,给出基于最近邻点策略采用贪心法求解TSP问题伪代码,并分析该算法的时间性能。

3.设计算法实现求数组中相差最小的两个元素(称为最接近数)的差。

4.有n枚硬币,其中有一枚硬币是假币,且假币的重量较轻,通过一架天平找出假币,设计找出假币的方案,要求在最坏情况下用天平的比较次数最少。

5.一个农夫带着一条狼、一只羊和一筐菜,想从河一边(左岸)乘船到另一边(右岸),由于船太小,农夫每次只能带一样东西过河,而且如果没有农夫看管,则狼会吃羊,羊会吃菜。农夫怎样过河才能把每样东西安全地送过河呢?请将这个问题的模型抽象出来,并设计算法求解。

6.已知某系统在通信联络中只可能出现八种字符,其概率分别为0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11,试设计其哈夫曼编码,并请画出其图形,说明其设计思想。

5

6

7