第7章算法程序与计算系统之灵魂练习题答案解析 下载本文

(C)O(n3);

(D)上述都不对;

答案:B 解释:

本题考查时间复杂性,和大“O”记法;具体分析如下: (10) sum=0; 1次 (20) For(i=1; i<=n; i++) n次 (30) For(j=1; j<=n; j++) n2次 (40) For(k=1; k<=5; k++) 5 n2次 (50) sum=sum+1; 5 n2次

T(n)= 11n2 + n + 1 = O(n2),所以正确答案选B; 具体内容请参考课堂视频“高级问题初探: 算法分析与计算复杂性”和第七章课件;

(6)阅读下面的程序,其时间复杂度为_________?

A. O(1) B. O(n) C. O(n2) D. O(n*log n)

int index = 5; int condition=1;

if (condition==1) then index++;

else index--; for i = 1 to 100 for j = 1 to 200 index=index+2;

答案:A 解释: 本题考查时间复杂性,和大“O”记法;具体分析如下:

int index = 5; 1次 int condition=1; 1次 if (condition==1) then 1次 index++; 1次

else index--; for i = 1 to 100 100次 for j = 1 to 200 200×100次 index=index+2; 200×100次 所以T(n)=O(1),正确答案选A; 具体内容请参考课堂视频“高级问题初探: 算法分析与计算复杂性”和第七章课件;

(7)为什么要评估算法的复杂性?下列说法不正确的是_________。

(A)当算法的时间复杂性量级为多项式函数时,计算机是能够完成计算的;

(B)当算法的时间复杂性量级为非多项式函数时,如指数函数、阶乘函数时,计算机是不能够完成计算的;

(C)当算法的时间复杂性量级为非多项式函数时,如指数函数、阶乘函数时,对于大规模问题,计算机是不能够完成计算的;

(D)上述说法有不正确的;

答案:B 解释:

本题考查算法分析与计算复杂性;

当算法的时间复杂度的表示函数是一个多项式时,如O(n2)时,则计算机对于大规模问题是可以处理的。当算法的时间复杂度是用指数函数表示时,如O(2n),当n很大(如10000)时计算机是无法处理的,在计算复杂性中将这一类问题被称为难解性问题。所以对于B的表达,只有当n很大时,属于大规模问题时,计算机才不能完成,表达不精确,所以正确答案为B; 具体内容请参考课堂视频“高级问题初探: 算法分析与计算复杂性”和第七章课件;

(*8)算法的时间复杂性T(n),可以通过评估算法基本语句的执行次数来获得。分析下列算法的时间复杂性。

Start of the algorithm(算法开始)

(1) 输入结点的数目n;

(2) 当前最短路径Path设为空,当前最短距离Dtemp设为最大值;

注:一个路径是n个结点的一个组合,任何一个结点在路经中不能重复出现 (3) 组合一条新路径NewPath并计算该路径的距离D; (4) 如果D

(5) 如果所有路径组合完毕,则结束;否则转第(3)步继续执行; (6) 输出Path及Dtemp; End of the algorithm(算法结束)

该算法的时间复杂性表达正确的是_________。

(A)O(3n); (B)O(n2); (C)O(n3); (D)O(n!); (E)上述都不对;

答案:D 解释:

本题考查时间复杂性,和大“O”记法;

由以上步骤可知,由于输入结点的数目为n,总共有n!种组合方式,所以时间复杂性应为O(n!);正确答案选D; 具体内容请参考课堂视频“高级问题初探: 算法分析与计算复杂性”和第七章课件;

(*9)分析下列算法的时间复杂性。

Start of the Algorithm

(1) S[1]=1; Sum=0; 初始化距离数组D[n][n];

/*I层的循环,即下列步骤为每次找出一个城市,I从2到n,即从找出第2个城市一直到找出第n个城市

(2) I=2;

/*K层的循环,即下列步骤为从所有未访问过的城市中查找距离S[I-1]最近的城市j,K依然从2到n寻找

(3) K=2;

(4) 将Dtemp设为一个大数(比所有两个城市之间的距离都大)

/*L层的循环,即下列步骤为判断一个城市是否已被访问过,如果已被访问,则跳过该城市,寻找新的城市,L从1到I-1,因为已经有I-1个城市被访问过。

(5) L=1;

(6) 如果S[L]==K,转步骤(10); (7) L=L+1;

(8) 如果L

(9) 如果D[K,S[I-1]]

(11) 如果K<=N,转步骤(5)。 /*K层的循环结束

(12) S[I]=j;

(13) Sum=Sum+Dtemp; (14) I=I+1;

(15) 如果I<=N,转步骤(3),否则,转步骤(16); /*I层的循环结束

(16) Sum=Sum+D[1, j]; (17) 逐个输出S[N]中的全部元素; (18) 输出Sum。

End of the Algorithm

该算法的时间复杂性表达正确的是_________。

(A)O(3n); (B)O(n2); (C)O(n3); (D)O(n!); (E)上述都不对;

答案:C 解释: 本题考查TSP算法和时间复杂性;

TSP问题贪心算法的复杂性:粗略看是一个关于n的三重循环,即复杂度为n3级别。所以时间复杂度是O(n3),正确答案选C;

具体内容请参考课堂视频“高级问题初探: 算法分析与计算复杂性”和第七章课件;

14.关于算法类问题的基本求解步骤,回答下列问题: (1)下列说法不正确的是_________。

(A)算法类问题求解首先要进行数学建模,即用数学语言对问题进行抽象;

(B)一个问题,进行了数学建模后,可以通过模型的一些性质的分析判断该问题是否有解;在有解的情况下,再设计算法进行求解,否则则可能做的是无用功! (C)一个问题,进行了数学建模后,可以依据数学的一些求解方法,设计出让计算机求解的算法。 (D)一个问题,虽然进行了数学建模但可以不依据数学求解方法,设计出让计算机求解的算法; (E)上述说法有不正确的。

答案:E 解释: 本题考查算法问题求解的基本步骤;

求解一个算法问题,首先要进行数学建模,用数学语言对问题进行抽象,A正确;进行数学建模后,要判断该问题是否有解,所以B也正确;之后要根据数学模型,设计出求解的算法,C正确;对于一个数学模型,我们可以用不同的数学方法设计出不同的解法,所以D也正确;综上所述,正确答案选E; 具体内容请参考第七章所有视频和课件;

(2)对于算法类问题求解,下列说法正确的是_________。

(A)一般而言,算法类问题求解包括数学建模、算法策略设计、算法的数据结构与控制结构设计三个基本步骤;

(B)一般而言,算法类问题求解包括数学建模、算法策略设计、算法的数据结构与控制结构设计、算法的正确性与复杂性分析四个基本步骤; (C)一般而言,算法类问题求解包括数学建模、算法策略设计、算法的数据结构与控制结构设计、算法的程序实现、算法的正确性与复杂性分析五个基本步骤; (D)上述说法都正确。

答案:C 解释: 本题考查算法问题求解的基本步骤;

对于算法类问题求解主要包括数学建模、算法策略设计、算法的数据结构与控制结构设计、算法的程序实现、算法的正确性与复杂性分析五个基本步骤,所以C正确; 具体内容请参考课堂视频“算法与算法类问题求解”和第七章课件;