算法分析与设计习题集整理.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法分析与设计习题集整理
第一章算法引论
一、填空题:
1、算法运行所需要的计算机资源的量,称为算法复杂性,主耍包括时间复杂度和空间复杂度。
2、多项式A{n) = a m n m+…+ a/ + q的上界为O(rT)。
3、算法的基本特征:输入、输出、确定性、有限性。
4、如何从两个方面评价一个算法的优劣:时间复杂度、空间复杂度。
5、计算下面算法的时间复杂度记为:0(n3) 0
for(i=l;i<=n;i++)
for(j=l;j<=n;j++)
{c[i][j]二 0;
for (k二1;k〈=n;k++)
c[i][j]= c[i][j]+a[i][k]*b[k][j];
}
6、描述算法常川的方法:自然语言、伪代码、程序设计语言、流程图、盒图、PAD图。
7、算法设计的基本要求:正确性和H J读性。
8、计算下面算法的时间复杂度记为:0(/)。
for (i = l; i { y=y+l; for (j=0; j <=2n; j++ ) x + + ; } 9、计算机求解问题的步骤:问题分析、数学模型建立、算法设计与选择、算法表示、算法分析、算法实现、程序调试、结果整理文档编制。 10、算法是指解决问题的方法或过程。 11、算法由操作、控制结构、数据结构三要素组成。 二、简答题: 1、按照时间复杂度从低到高排列:0(4i?)、0(logn)、0(3")、0(20n)、0(2)、0( n2/3), 0( n!)应该排在哪一位? 答:0( 2), 0( logn), 0( n2/3), 0( 20n), 0( 4n2), 0( 3n), 0( n!) 2、什么是算法?算法的特征有哪些? 答:1) 法:指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。 通俗讲,算法:就是解决问题的方法或过程。 2)特征:1)算法有零个或多个输入;2)算法有一个或多个输岀;3)确定性;4)有穷性 3、给出算法的定义?何谓算法的复杂性? 计算下例在最坏情况下的时间复杂性? for(j=l;j<=n;j++) (1) for(i=l;i<=n;i++) (2) (c[i][j]=O; ⑶ for(k=l;k<=n;k++) (4) c[i][j]= c[i][j]+a[i][k]*b[k][j]; } (5) 答:1)定义:指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程。 2) 算法的复杂性:指的是算法在运行过程中所需要的资源(时间、空间)多少。所需 资源越多,表明算法的复杂性越高 3) 该算法的主要元操作是语句5,其执行次数是r?次。 故该算法的时间复杂度记 为0 (n 8 )・ 4、算法A 和算法B 解同一问题,设算法A 的时间复杂性满足递归方程 ,若要使得算法A 时间复杂性的阶高于算法B 时间复杂性的阶, T(n) = aT(n/4) + n , n > 1 a 的最大整数值可取多少? 答:分别记算法A 和算法B 的时间复杂性为丁八(n)和T B (n),解相应的递归方程得: T A (n) = O(n 2) 0(n) ,a < 4 T B (n) = < 0(nlogn) ,a = 4 O(n ,og4a ) ,a>4 依题意,要求最人的整数a 使得T B (n) =16o 所以,所求的a 的最人整数值为15。 5、 算法分析的目的? 答:1)为了对算法的某些特定输入,估算该算法所協的内存空间和运行时间; 2)是为了建立衡最算法优劣的标准,用以比较同一类问题的不同算法。 6、 算法设计常用的技术?(写5种) 答:①分治法;②回溯法; ③贪心法;④动态规划法 ⑤分治限界法;⑥蛮力法;⑦倒推法 三、算法设计题 1、 蛮力法:百鸡百钱问题? 2、 倒推法:穿越沙漠问题? 第二章分治算法(1) 一一递归循环 一、 填空题: 1、 总接或间接地调用自身的算法称为 递归算法,用函数自身给出定义的函数称为 递归 函数。 2、 递归方程利约束函数(递归终止条件)是递归函数的两个要素。 二、 判断题: 1、所有的递归函数都能找到对应的非递归定义。 (V ) T(n) = 1 , n = 1 ' T(n) = 4T(n/2) + n , n>l 算法B 的时间复杂性满足递归方程 2、定义递归函数时可以没冇初始值。(X ) 三、简答题: 1、什么是递归算法?递归算法的特点? 答:1)递归算法:是一个模块(函数、过程)除了可调用其它模块(函数、过程)夕卜,述可以宜接或间接地调用自身的算法。 2)递归算法特点: ①每个递归函数都必须有非递归定义的初值;否则,递归函数无法计算;(递归终止条件) ②递归中用较小自变量函数值來表达较大自变量函数值;(递归方程式) 2、比较循环与递归的异同? 答:相同:递归与循环都是解决“重复操作”的机制。 不同:①就效率而言,递归算法的实现往往要比迭代算法耗费更多的时间(调用和返回均需耍额外的吋间)与存贮空间(用来保存不同次调用情况下变量的当前值的栈栈空间),也限制了递归的深度。②每个迭代算法原则上总可以转换成与它等价的递归算法;反Z不然。③递归的层次是可以控制的,而循坏嵌套的层次只能是固定的,因此递归是比循环更灵活的重复操作的机制。 3、递归算法解题通常有三个步骤? 答:1)分析问题、寻找递归:找出人规模问题与小规模问题的关系,这样通过递归使问题的规模逐渐变小。 2)设置边界、控制递归:找出停止条件,即算法对解的最小规模问题。 3)设计函数、确定参数:和其它算法模块一样设计函数体屮的操作及相关参数。 四、算法设计题: 1、楼梯上有n个台阶,上楼时可以上1步,也可以上2步,设计一递归算法求出共有多少种上楼方法F(n)o ①写出F(n)的递归表达式? ②并写岀其相应的递归算法? 解:①写出F(n)的递归表达式 分析:到n阶有两种走法: 1)n-l阶到n阶; 2)n-2阶到n阶; 1 n=l F(n) = y 2 n=2 J(n-l) + F(n-2) n〉2 ②写出其相应的递归算法? Int F(int n) { if(n=l) return 1; else if(n=2) return 2; else return F(nT)+ F(n-2); } 2、设a, b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1, 2,…,n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置。在移动圆盘时应遵守以下移动规则: