算法分析与设计总复习

合集下载

《算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末复习题一、选择题1.算法必须具备输入、输出和( D )等4个特性。

A.可行性和安全性 B.确定性和易读性C.有穷性和安全性 D.有穷性和确定性2.算法分析中,记号O表示( B ),记号Ω表示( A )A.渐进下界B.渐进上界C.非紧上界D.紧渐进界3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。

在某台计算机上实现并完成概算法的时间为t秒。

现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题?( B )解题方法:3*2^n*64=3*2^xA.n+8 B.n+6C.n+7 D.n+54.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1,T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。

A.O(logN) B.O(N)C.O(NlogN) D.O(N²logN)5.直接或间接调用自身的算法称为( B )。

A.贪心算法 B.递归算法C.迭代算法 D.回溯法6.Fibonacci数列中,第4个和第11个数分别是( D )。

A.5,89 B.3,89C.5,144 D.3,1447.在有8个顶点的凸多边形的三角剖分中,恰有( B )。

A.6条弦和7个三角形 B.5条弦和6个三角形C.6条弦和6个三角形 D.5条弦和5个三角形8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。

A.重叠子问题 B.最优子结构性质C.贪心选择性质 D.定义最优解9.下列哪个问题不用贪心法求解( C )。

A.哈夫曼编码问题 B.单源最短路径问题C.最大团问题 D.最小生成树问题10.下列算法中通常以自底向上的方式求解最优解的是( B )。

A.备忘录法 B.动态规划法C.贪心法 D.回溯法11.下列算法中不能解决0/1背包问题的是( A )。

A.贪心法 B.动态规划C.回溯法 D.分支限界法12.下列哪个问题可以用贪心算法求解( D )。

《算法分析与设计》期末测验复习题纲(完整版)

《算法分析与设计》期末测验复习题纲(完整版)

《算法分析与设计》期末测验复习题纲(完整版)————————————————————————————————作者:————————————————————————————————日期:《算法分析与设计》期末复习题一、选择题1.算法必须具备输入、输出和( D )等4个特性。

A.可行性和安全性 B.确定性和易读性C.有穷性和安全性 D.有穷性和确定性2.算法分析中,记号O表示( B ),记号Ω表示( A )A.渐进下界B.渐进上界C.非紧上界D.紧渐进界3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。

在某台计算机上实现并完成概算法的时间为t秒。

现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题?( B )解题方法:3*2^n*64=3*2^xA.n+8 B.n+6C.n+7 D.n+54.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1,T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。

A.O(logN) B.O(N)C.O(NlogN) D.O(N²logN)5.直接或间接调用自身的算法称为( B )。

A.贪心算法 B.递归算法C.迭代算法 D.回溯法6.Fibonacci数列中,第4个和第11个数分别是( D )。

A.5,89 B.3,89C.5,144 D.3,1447.在有8个顶点的凸多边形的三角剖分中,恰有( B )。

A.6条弦和7个三角形 B.5条弦和6个三角形C.6条弦和6个三角形 D.5条弦和5个三角形8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。

A.重叠子问题 B.最优子结构性质C.贪心选择性质 D.定义最优解9.下列哪个问题不用贪心法求解( C )。

A.哈夫曼编码问题 B.单源最短路径问题C.最大团问题 D.最小生成树问题10.下列算法中通常以自底向上的方式求解最优解的是( B )。

《算法设计与分析》考试题目及答案(DOC)

《算法设计与分析》考试题目及答案(DOC)
}
Hanoi 塔
D. void hanoi(int n, int C, int A, int B) { if (n > 0) { hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); }
3. 动态规} 划算法的基本要素为(C) A. 最优子结构性质与贪心选择性质 B.重叠子问题性质与贪心选择性质 C.最优子结构性质与重叠子问题性质 D. 预排序与递归调用
(排列树)算法框架。 8. 用回溯法解 0/1 背包问题时,该问题的解空间结构为(子集树)结构。 9.用回溯法解批处理作业调度问题时,该问题的解空间结构为(排列树)结
构。 10.用回溯法解 0/1 背包问题时,计算结点的上界的函数如下所示,请在空
格中填入合适的内容:
Typep Knap<Typew, Typep>::Bound(int i) {// 计算上界
B. f (n) O(g(n)), g(n) O(h(n)) h(n) O(f (n)) C. O(f(n))+O(g(n)) = O(min{f(n),g(n)}) D. f (n) O(g(n)) g(n) O(f (n))
6. 能采用贪心算法求最优解的问题,一般具有的重要性质为:(A) A. 最优子结构性质与贪心选择性质 B.重叠子问题性质与贪心选择性质
《算法分析与设计》期末复习 法则的流水作业调度采用的算法是(D)
A. 贪心算法
B. 分支限界法 C.分治法
D. 动态规划算法
2.Hanoi 塔问题如下图所示。现要求将塔座 A 上的的所有圆盘移到塔座 B 上, 并仍按同样顺序叠置。移动圆盘时遵守 Hanoi 塔问题的移动规则。由此设计出 解 Hanoi 塔问题的递归算法正确的为:(B)

算法设计与分析复习题整理 (1)

算法设计与分析复习题整理 (1)

一、基本题:算法:1、程序是算法用某种程序设计语言的具体实现。

2、算法就是一组有穷的序列(规则) ,它们规定了解决某一特定类型问题的一系列运算。

3、算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。

4、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。

5、算法满足的性质:输入、输出、确定性、有限性。

6、衡量一个算法好坏的标准是时间复杂度低。

7、算法运行所需要的计算机资源的量,称为算法复杂性,主要包括时间复杂性和空间复杂性。

8、任何可用计算机求解的问题所需的时间都与其规模有关。

递归与分治:9、递归与分治算法应满足条件:最优子结构性质与子问题独立。

10、分治法的基本思想是首先将待求解问题分解成若干子问题。

11、边界条件与递归方程是递归函数的两个要素。

12、从分治法的一般设计模式可以看出,用它设计出的程序一般是递归算法。

13、将一个难以直接解决的大问题,分解成一些规模较小的相同问题,以便各个击破。

这属于分治法的解决方法。

14、Strassen矩阵乘法是利用分治策略实现的算法。

15、大整数乘积算法是用分治法来设计的。

16、二分搜索算法是利用分治策略实现的算法。

动态规划:17、动态规划算法的两个基本要素是最优子结构性质和重叠子问题性质。

18、下列算法中通常以自底向上的方式求解最优解的是动态规划法。

19、备忘录方法是动态规划算法的变形。

20、最优子结构性质是贪心算法与动态规划算法的共同点。

21、解决0/1背包问题可以使用动态规划、回溯法,其中不需要排序的是动态规划,需要排序的是回溯法。

贪心算法:22、贪心算法总是做出在当前看来最好的选择。

也就是说贪心算法并不从整体最优考虑,它所做出的选择只是在某种意义上的局部最优解。

23、最优子结构性质是贪心算法与动态规划算法的共同点。

24、背包问题的贪心算法所需的计算时间为 O(nlogn) 。

回溯法:25、回溯法中的解空间树结构通常有两种,分别是子集树和排列树。

算法分析设计期末复习

算法分析设计期末复习

通过解递归方程
logm n1
T (n) nlogm k k j f (n / m j ) j0
学习要点: 理解递归的概念。 掌握设计有效算法的分治策略。 通过下面的范例学习分治策略设计技巧。 (1)二分搜索技术; (2)大整数乘法; (3)Strassen矩阵乘法; (4)棋盘覆盖; (5)合并排序和快速排序; (6)线性时间选择; (7)最接近点对问题; (8)循环赛日程表。
基本运算Oi的执行次数ei分别进行统计分析。 – T(N,I)还需进一步简化,只在某些有代表性的合法输
入中去统计相应的ei来评价其复杂性。 – 一般只考虑三种情况下的时间性:最坏情况、最好
情况和平均情况下的复杂性,分别记为Tmax(N)、 Tmin(N)和Tavg(N)
四种渐近意义下的符号
• 四种渐近意义下的符号 –O –Ω –θ –o
}
----------------------------------------------------------------------------------------
CheckNum( T , p , q , element): ▹计算T[p..q]中element出现的次数
{ cnt ← 0
• 思路二:直接统计各 元素出现的次数,用 某一线性数据结构 存储统计结果(例如 用一个辅助数组存 储统计结果,统计时 用数组下标对应相 应元素)
第三章:动态规划
动态规划算法的基本思想
• 动态规划算法的基本思想
– 其基本思想与分治算法的思想类似——分而治之 – 与分治法的不同之处
• 分解后的子问题往往不互相独立; • 采用记录表的方法来保存所有已解决问题的答案
考虑时间 资源

算法设计与分析期末复习题

算法设计与分析期末复习题

算法设计与分析期末考试复习题1.算法有哪些特点?为什么说一个具备了所有特征的算法,不一定就是使用的算法?2.证明下面的关系成立:(参考例题1.5--1.6)(1)logn!=Θ(nlogn) (2)2n=Θ(2n+1)(3)n!=Θ(n n) (4)5n2-6n=Θ(n2)3.考虑下面的算法:输入:n个元素的数组A输出:按递增顺序排序的数组A1. void sort(int A[],int n)2. {3. int i,j,temp;4. for(i=0;i<n-1;i++)5. for(j=i+1;j<n;j++)6. if(A[j]<A[i]) {7. temp=A[i];8. A[i]=A[j];9. A[j]=temp;10. }11. }(1)什么时候算法所执行的元素赋值的次数最少?最少多少次?(2)什么时候算法所执行的元素赋值的次数最多?最多多少次?4.考虑下面的算法:输入:n个元素的数组A输出:按递增顺序排序的数组A1. void bubblesort(int A[],int n)2. {3. int j,i,sorted;4. i=sorted=0;5. while(i<n-1 && !sorted) {6. sorted=1;7. for(j=n-1;j>i;j--) {8. if(A[j]<A[j-1]) {9. temp=A[j];10. A[j]=A[j-1];11. A[j-1]=temp;12. sorted=0;13. }14. }15. i=i+1;16. }17. }(1)算法所执行的元素比较次数最少是多少次?什么时候达到最少?(2)算法所执行的元素比较次数最多是多少次?什么时候达到最多?(3)算法所执行的元素赋值次数最少是多少次?什么时候达到最少?(4)算法所执行的元素赋值次数最多是多少次?什么时候达到最多?(5)用О、和Ω记号表示算法的运行时间。

算法设计与分析复习题目及答案

算法设计与分析复习题目及答案

分治法1、二分搜索算法是利用(分治策略)实现的算法。

9. 实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略)实现的算法。

34.实现合并排序利用的算法是(分治策略)。

实现大整数的乘法是利用的算法(分治策略)。

17.实现棋盘覆盖算法利用的算法是(分治法)。

29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。

不可以使用分治法求解的是(0/1背包问题)。

动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。

下列算法中通常以自底向上的方式求解最优解的是(动态规划法)备忘录方法是那种算法的变形。

(动态规划法)最长公共子序列算法利用的算法是(动态规划法)。

矩阵连乘问题的算法可由(动态规划算法B)设计实现。

实现最大子段和利用的算法是(动态规划法)。

贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。

回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。

剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(分支界限法)的一搜索方式。

分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。

分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。

(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。

算法分析与设计复习题及参考答案

算法分析与设计复习题及参考答案

《算法分析与设计》课程复习资料一、名词解释:1.算法2.程序3.递归函数4.子问题的重叠性质5.队列式分支限界法6.多机调度问题7.最小生成树 二、简答题:1.备忘录方法和动态规划算法相比有何异同?简述之。

2.简述回溯法解题的主要步骤。

3.简述动态规划算法求解的基本要素。

4.简述回溯法的基本思想。

5.简要分析在递归算法中消除递归调用,将递归算法转化为非递归算法的方法。

6.简要分析分支限界法与回溯法的异同。

7.简述算法复杂性的概念,算法复杂性度量主要指哪两个方面? 8.贪心算法求解的问题主要具有哪些性质?简述之。

9.分治法的基本思想是什么?合并排序的基本思想是什么?请分别简述之。

10.简述分析贪心算法与动态规划算法的异同。

三、算法编写及算法应用分析题:1.已知有3个物品:(w1,w2,w3)=(12,10,6),(p1,p2,p3)=(15,13,10),背包的容积M=20,根据0-1背包动态规划的递推式求出最优解。

2.按要求完成以下关于排序和查找的问题。

①对数组A={15,29,135,18,32,1,27,25,5},用快速排序方法将其排成递减序。

②请描述递减数组进行二分搜索的基本思想,并给出非递归算法。

③给出上述算法的递归算法。

④使用上述算法对①所得到的结果搜索如下元素,并给出搜索过程:18,31,135。

3.已知1()*()i i k k ij r r A a +=,k =1,2,3,4,5,6,r 1=5,r 2=10,r 3=3,r 4=12,r 5=5,r 6=50,r 7=6,求矩阵链积A 1×A 2×A 3×A 4×A 5×A 6的最佳求积顺序(要求给出计算步骤)。

4.根据分枝限界算法基本过程,求解0-1背包问题。

已知n=3,M=20,(w1,w2,w3)=(12,10,6),(p1,p2,p3)=(15,13,10)。

计算机算法设计与分析期末复习资料

计算机算法设计与分析期末复习资料

一填空题(20x1=20分)1.当设定的问题有多种算法去解决时,其选择算法的主要原则是选择其中复杂性最低者。

2.用函数自身给出定义的函数是一种递归函数。

3.动态规划算法适用于解最优化问题。

4.贪心算法的两个基本要素是最优子结构性质、贪心选择性质。

5.回溯法在搜索解空间树的时候,为了避免无效搜索,通常使用深度优先手段来提高搜索效率。

6.依据求解目标的不同,分支界限法和回溯法分别用广度优先遍历或者最小耗费优先、深度优先的方式搜索解空间树。

7.分支界限法和回溯法主要区别在于求解目标和搜索方式不同。

8.在分支界限法实现的时候,通常采用方式来实现最大优先队列。

9.依据求解所花费的时间和所得到的结果不同,随机化算法大致分为数值随机化算法、蒙特卡罗算法、拉斯维加斯算法和舍伍德算法四类。

10.产生伪随机数最常用的方法是线性同余法。

11.线性规划算法中转轴变化的目的是将入基变量与离基变量互调位置。

12.最大网络流问题中可增广路是残留网络中一条容量大于0的路。

13.待解决问题适用于动态规划法的两个基本要素是。

14.算法必须满足的四个特征是输入、输出、确定性、有限性。

15.算法复杂性依赖于、、三个方面的复杂因素。

16.实现递归调用的关键是17.动态规划算法求解问题的重要线索是问题的性质。

18.最优子结构性质是贪心算法求解问题的关键特征。

19.分支界限法的求解目标是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。

20.问题的解空间树常见的有子集树、排列树两种类型。

21.分支界限算法依据其从和节点表中选择获得下一扩展节点的不同方式被分为22.对于任何约束标准型线性规划问题,只要将所用分基本变量都设置为0,就可以获得一个解。

三概念题(6x2=12分)1.算法复杂性:是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要空间资源的量称为空间复杂性。

2.递归算法:直接或间接地调用自身的算法称为递归算法。

算法分析与设计习题答案

算法分析与设计习题答案

算法分析与设计习题答案《算法分析与设计》期末复习题及答案⼀、简要回答下列问题:1.算法重要特性是什么?2.算法分析的⽬的是什么?3.算法的时间复杂性与问题的什么因素相关?4.算法的渐进时间复杂性的含义?5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?6.简述⼆分检索(折半查找)算法的基本过程。

7.背包问题的⽬标函数和贪⼼算法最优化量度相同吗?8.采⽤回溯法求解的问题,其解如何表⽰?有什么规定?9.回溯法的搜索特点是什么?10.n皇后问题回溯算法的判别函数place的基本流程是什么?11.为什么⽤分治法设计的算法⼀般有递归调⽤?12.为什么要分析最坏情况下的算法时间复杂性?13.简述渐进时间复杂性上界的定义。

14.⼆分检索算法最多的⽐较次数?15.快速排序算法最坏情况下需要多少次⽐较运算?16.贪⼼算法的基本思想?17.回溯法的解(x1,x2,……x n)的隐约束⼀般指什么?18.阐述归并排序的分治思路。

19.快速排序的基本思想是什么。

20.什么是直接递归和间接递归?消除递归⼀般要⽤到什么数据结构?21.什么是哈密顿环问题?22.⽤回溯法求解哈密顿环,如何定义判定函数?23.请写出prim算法的基本思想。

参考答案:1. 确定性、可实现性、输⼊、输出、有穷性2. 分析算法占⽤计算机资源的情况,对算法做出⽐较和评价,设计出额更好的算法。

3. 算法的时间复杂性与问题的规模相关,是问题⼤⼩n的函数。

4.当问题的规模n趋向⽆穷⼤时,影响算法效率的重要因素是T(n)的数量级,⽽其他因素仅是使时间复杂度相差常数倍,因此可以⽤T(n)的数量级(阶)评价算法。

时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。

5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输⼊实例下的算法所耗时间。

最坏情况下的时间复杂性取的输⼊实例中最⼤的时间复杂度:W(n) = max{ T(n,I) } , I∈Dn平均时间复杂性是所有输⼊实例的处理时间与各⾃概率的乘积和:A(n) =∑P(I)T(n,I) I∈Dn6. 设输⼊是⼀个按⾮降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x⽐较,如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]回溯法的搜索特点是什么7. 不相同。

《算法设计与分析》期末必考复习及答案题整理

《算法设计与分析》期末必考复习及答案题整理

《算法设计与分析》期末必考复习及答案题整理1、分治法的基本思想:是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题互相独立且与原问题相同。

递归地解这些子问题,然后将各子问题的解合并得到原问题的解。

2、贪心选择性质:指所求问题的整体最优解可以通过一系列局部最优的选择,3、 Prim算法:设G=(V,E)是连通带权图,V={1,2,…,n}。

构造G的最小生成树的Prim算法的基本思想是:首先置S={1},然后,只要S是V的真子集,就作如下的贪心选择:选取满足条件i?S,j?V-S,且c[j]最小的边,将顶点j添加到S 中。

这个过程一直进行到S=V时为止。

4、什么是剪枝函数:回溯法搜索解空间树时,通常采用两种策略避免无效搜索,提高回溯法的搜索效率。

其一是用约束函数在扩展结点处剪去不满足约束的子树;其二是用限界函数剪去得不到最优解的子树。

这两类函数统称为剪枝函数。

6、分支限界法的基本思想:(1)分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。

(2)在分支限界法中,每一个活结点只有一次机会成为扩展结点。

活结点一旦成为扩展结点,就一次性产生其所有儿子结点。

在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。

(3)此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程,这个过程一直持续到找到所需的解或活结点表这空时为止。

5、什么是算法的复杂性:是该算法所需要的计算机资源的多少,它包括时间和空间资源。

6、最优子结构性质:该问题的最优解包含着其子问题的最优解。

7、回溯法:是一个既带有系统性又带有跳跃性的搜索算法。

这在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。

算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。

如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。

计算机算法设计与分析总复习公开课获奖课件百校联赛一等奖课件

计算机算法设计与分析总复习公开课获奖课件百校联赛一等奖课件
边界条件
1
n0
F
(n)
1
n 1
F (n 1) F (n 2) n 1
递归方程
第n个Fibonacci数可递归地计算如下: int fibonacci(int n)
{ if (n <= 1) return 1; return fibonacci(n-1)+fibonacci(n-2);
}
分治算法总体思想
环被执行了O(logn) 次。
if (x < a[m]) r = m-1;
循环体内运算需要O(1)
else l = m+1; } return -1; }
时间,所以整个算法在最 坏情况下旳计算时间复杂 性为O(logn) 。
合并排序
基本思想:将待排序元素提成大小大致相同旳2个子集合,分 别对2个子集合进行排序,最终将排好序旳子集合合并成为所 要p求{ub旳lic排s复t好a杂t序ic度旳vo分集id析合Tm(。en)rgeS2Tor(nt(/CO2o()1m) Opa(nra) bnnlea11[], int left, int right)
多项式时间算法:可用多项式(函数)对其计 算时间限界旳算法。
常见旳多项式限界函数有:
Ο(1) < Ο(logn) < Ο(n) < Ο(nlogn) < Ο(n2) < Ο(n3)
指数时间算法:计算时间用指数函数限界旳算 法。
常见旳指数时间限界函数:
Ο(2n) < Ο(n!) < Ο(nn)
阐明:当n取值较大时,指数时间算法和多项式
线性时间选择问题
问题描述:给定线性集中n个元素和一种整数
k,要求找出这n个元素中第k小旳元素,即假如 将这n个元素依其线性序排列时,排在第k个位 置旳元素即为我们要找旳元素。 当k=1时,即找最小元素;当k=n时,即找最大 元素;当k=(n+1)/2时,称为找中位数。

计算机算法设计与分析-期末考试复习资料

计算机算法设计与分析-期末考试复习资料

一、算法设计实例1、快速排序(分治法)int partition(float a[],int p,int r) {int i=p,j=r+1;float x=a[p];while(1){while(a[++i]<x);while(a[--j]<x);if(i>=j)break;swap(a[i],a[j]);}a[p]=a[j];a[j]=x;return j;}void Quicksort(float a[],int p,int r){//快速排序if(p<r){int q=partition(a,p,r);Quicksort(a,p,q-1);Quicksort(a,p+1,r);}}2、归并排序(分治法)void mergesort(Type a[],int left,int right) {if(left<rigth){int mid=(left+right)/2;//取中点mergesort(a,left,mid);mergesort(a,mid+1,right);mergesort(a,b,left,right);//合并到数组bmergesort(a,b,left,right);//复制到数组a}}3、背包问题(贪心算法)void knapsack(int n,float m,float v[],float w[],float x[]) {sort(n,v,w)//非递增排序int i;for(i=1;i<=n;i++)x[i]=0;float c=m;for(i=1;i<=n;i++){if(w[i]>c)break;x[i]=1;c-=w[i];}if(i<=n)x[i]=c/w[i];}4、活动安排问题(贪心算法)void Greadyselector(int n,Type s[],Type f[],bool A[]) {//s[i]为活动结束时间,f[j]为j活动开始时间A[i]=true;int j=1;for(i=2;i<=n;i++){if(s[i]>=f[j]){A[i]=true;j=i;}elseA[i]=false;}}5、喷水装置问题(贪心算法)void knansack(int w,int d,float r[],int n){//w为草坪长度d为草坪宽度r[]为喷水装置的喷水半径,//n为n种喷水装置,喷水装置的喷水半径>=d/2sort(r[],n);//降序排序count=0;//记录装置数for(i=1;i<=n;i++)x[i]=0;//初始时,所有喷水装置没有安装x[i]=0for(i=1;w>=0;i++){x[i]=1;count++;w=w-2*sqart(r[i]*r[i]-1);}count<<装置数:<<count<<end1;for(i=1;i<=n;i++)count<<喷水装置半径:<<r[i]<<end1;}6、最优服务问题(贪心算法)double greedy(rector<int>x,int s){rector<int>st(s+1,0);rector<int>su(s+1,0);int n=x.size();//st[]是服务数组,st[j]为第j个队列上的某一个顾客的等待时间//su[]是求和数组,su[j]为第j个队列上所有顾客的等待时间sort(x.begin(),x.end());//每个顾客所需要的服务时间升序排列int i=0,j=0;while(i<n){st[j]+=x[i];//x[i]=x.begin-x.endsu[j]+=st[j];i++;j++;if(j==s)j=0;}double t=0;for(i=0;i<s;i++)t+=su[i];t/=n;return t;}7、石子合并问题(贪心算法)float bebig(int A[],int n) {m=n;sort(A,m);//升序while(m>1){for(i=3;i<=m;i++)if(p<A[i])break;elseA[i-2]=A[i];for(A[i-2]=p;i<=m;i++){A[i-1]=A[i];m--;}}count<<A[1]<<end1}8、石子合并问题(动态规划算法)best[i][j]表示i-j合并化最优值sum[i][j]表示第i个石子到第j个石子的总数量|0f(i,j)=||min{f(i,k)+f(k+1,j)}+sum(i,j)int sum[maxm]int best[maxm][maxn];int n,stme[maxn];int getbest();{//初始化,没有合并for(int i=0;i<n;i++)best[i][j]=0;//还需要进行合并for(int r=1;r<n;r++){for(i=0;i<n-r;i++){int j=i+v;best[i][j]=INT-MAX;int add=sum[j]-(i>0!sum[i-1]:0);//中间断开位置,取最优值for(int k=i;k<j;++k){best[i][j]=min(best[i][j],best[i][k]+best[k+1][j])+add;}}}return best[0][n-1];}9、最小重量机器设计问题(回溯法)typedef struct Qnode{float wei;//重量float val;//价格int ceng;//层次int no;//供应商struct Qnode*Parent;//双亲指针}Qnode;float wei[n+1][m+1]=;float val[n+1][m+1]=;void backstack(Qnode*p){if(p->ceng==n+1){if(bestw>p->wei){testw=p->wei;best=p;}}else{for(i=1;i<=m;i++)k=p->ceng;vt=p->val+val[k][i];wt=p->wei+wei[k][i];if(vt<=d&&wt<=bestw){s=new Qnode;s->val=vt;s->wei=wt;s->ceng=k+1;s->no=1;s->parent=p;backstrack(S);}}}10、最小重量机器设计问题(分支限界法)typedef struct Qnode{float wei;//重量float val;//价格int ceng;//层次int no;//供应商struct Qnode*Parent;//双亲指针}Qnode;float wei[n+1][m+1]=;float val[n+1][m+1]=;void minloading(){float wt=0;float vt=0;float bestw=Max;//最小重量Qnode*best;s=new Qnode;s->wei=0;s->val=0;s->ceng=1;s->no=0;s->parent=null;Iinit_Queue(Q); EnQueue(Q,S);do{p=OutQueue(Q);//出队if(p->ceng==n+1){if(bestw>p->wei){bestw=p->wei;best=p;}}else{for(i=1;i<=m;i++){k=p->ceng;vt=p->val+val[k][i];wt=p->wei+wei[k][i];if(vt<=d&&wt<=bestw){s=new Qnode;s->ceng=k+1;s->wt=wt;s->val=val;s->no=i;s->parent=p;EnQueue(Q,S);}}}}while(!empty(Q));p=best;while(p->parent){count<<部件:<<p->ceng-1<<end1;count<<供应商:<<p->no<<end1;p=p->parent;}}11、快速排序(随机化算法—舍伍德算法)int partion(int a[],int l,int r){key=a[l];int i=l,j=r;while(1){while(a[++i]<key&&i<=r);while(a[--j]>key&&j>=l);if(i>=j)break;if(a[i]!=a[j])swap(a[i],a[j]);}if((j!=l)&&a[l]!=a[j])swap(a[l],a[j]);return j;}int Ranpartion(int a[],int l,int r) {k=rand()%(r-1+l)+1;swap(a[k],a[l]);int ans=partion(a,l,r);return ans;}int Quick_sort(int a[],int l,int r,int k){int p=Randpartion(a,l,r);if(p==k)return a[k];else if(k<p)return Quick_sort(a,l,p-1,k);else{int j=0;for(int i=p+1;i<=r;i++)b[j++]=a[i]return Quick_sort(b,1,j,k-p);}}12、线性选择(随机化算法—舍伍德算法)二、简答题1.分治法的基本思想分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。

《算法设计与分析》考试题目及答案

《算法设计与分析》考试题目及答案

《算法分析与设计》期末复习题一、选择题1.应用Johnson 法则的流水作业调度采用的算法是(D )A. 贪心算法B. 分支限界法C.分治法D. 动态规划算法2.Hanoi 塔问题如下图所示。

现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置。

移动圆盘时遵守Hanoi 塔问题的移动规则。

由此设计出解Hanoi 塔问题的递归算法正确的为:(B )Hanoi 塔A. void hanoi(int n, int A, int C, int B) { if (n > 0) {hanoi(n-1,A,C, B); move(n,a,b);hanoi(n-1, C, B, A); } B. void hanoi(int n, int A, int B, int C) {if (n > 0) {hanoi(n-1, A, C, B); move(n,a,b);hanoi(n-1, C, B, A); }C. void hanoi(int n, int C, int B, int A) {if (n > 0) {hanoi(n-1, A, C, B); move(n,a,b);hanoi(n-1, C, B, A); }3. 动态规划算法的基本要素为(C)A. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用4. 算法分析中,记号O表示(B),记号Ω表示(A),记号Θ表示(D)。

A.渐进下界B.渐进上界C.非紧上界D.紧渐进界E.非紧下界5. 以下关于渐进记号的性质是正确的有:(A)A.f(n)(g(n)),g(n)(h(n))f(n)(h(n))=Θ=Θ⇒=ΘB. f(n)O(g(n)),g(n)O(h(n))h(n)O(f(n))==⇒=C. O(f(n))+O(g(n)) = O(min{f(n),g(n)})D. f(n)O(g(n))g(n)O(f(n))=⇔=6.能采用贪心算法求最优解的问题,一般具有的重要性质为:(A)A. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用7. 回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。

算法分析与设计—部分复习题答案

算法分析与设计—部分复习题答案

算法设计与分析复习题1、一个算法应有哪些主要特征?有限性、确定性、输入、输出、可行性2、分治法(Divide and Conquer)与动态规划(Dynamic Programming)有什么不同?分治法是将一个问题划分成一系列独立的子问题,分别处理后将结果组合以得到原问题的答案。

动态规划同样将一个问题划分成一系列子问题进行处理,但当子问题不是互相独立而是互有联系时,动态规划不会重复计算子问题间联系的问题,是更高效的解决办法。

(具体解释太长了这个答案可以得点分)3、试举例说明贪心算法对有的问题是有效的,而对一些问题是无效的。

贪心算法的思想是通过选择局部最优以求得最优解,但某些最优解问题无法由局部最优推出,如0-1 knapsack problem(背包问题,一个能装20斤的背包装入一定商品,要求价值最高)4、求解方程f(n)=f(n-1)+f(n-2),f(1)=f(2)=1。

(斐波那契数列)(证明太复杂了不贴了)k5、求解方程T(n)=2T(n/2)+1,T(1)=1,设n=2。

T(n)=2*(2*T(n/4)+1)+1=2*(2*(T(n/8)+1)+1)+1 推出以下方程且且证明用数学归纳法。

void max_min(int a[],int m, int n, int* min) //运用分治法查找最大值与最小值{ int middle,hmin,gmin; if( m==n ) { * min = a[m]; } else if(m == n-1) { if( a[m] > a[n]) {*min = a[n]; } else { *min =a[m]; } } else { middle = (m+n)/2; max_min(a,m,middle,&gmin); max_min(a,middle+1,n,&hmin); if(gmin < hmin) { *min = gmin; } else { *min= hmin; } } } 6、编写一个Quick Sorting 算法,并分析时间复杂性。

计算机算法设计与分析期终考试复习题

计算机算法设计与分析期终考试复习题

计算机算法设计与分析复习题一、填空题1、一个算法复杂性的高低体现在计算机运行该算法所需的时间和存储器资源上,因此算法的复杂性有时间复杂性和空间复杂性之分。

2、出自于“平衡子问题”的思想,通常分治法在分割原问题,形成若干子问题时,这些子问题的规模都大致相同。

3、使用二分搜索算法在n个有序元素表中搜索一个特定元素,在最佳情况下,搜索的时间复杂性为O(1),在最坏情况下,搜索的时间复杂性为O (logn)。

4、已知一个分治算法耗费的计算时间T(n),T(n)满足如下递归方程: n?2O(1)? T(n)??2T(n/2)?O(n)n?2?解得此递归方可得T(n)= O()。

nlogn 5、动态规划算法有一个变形方法备忘录方法。

这种方法不同于动态规划算法“自底向上”的填充方向,而是“自顶向下”的递归方向,为每个解过的子问题建立了备忘录以备需要时查看,同样也可避免相同子问题的重复求解。

递归的二分查找算法在divide阶段所花的时间是 O(1) ,conquer阶段6.所花的时间是 T(n/2) ,算法的时间复杂度是 O( log n) 。

7.Prim算法利用贪心策略求解最小生成树问题,其时间复杂度是2O(n) 。

8.背包问题可用贪心法,回溯法等策略求解。

39.用动态规划算法计算矩阵连乘问题的最优值所花的时间是 O(n) ,子2问题空间大小是 O(n) 。

10.图的m着色问题可用回溯法求解,其解空间树中叶子结点个数是nm ,解空间树中每个内结点的孩子数是 m 。

11.单源最短路径问题可用贪心法、分支限界等策略求解。

12、一个算法的优劣可以用(时间复杂度)与(空间复杂度)与来衡量。

13、回溯法在问题的解空间中,按(深度优先方式)从根结点出发搜索解空间树。

14、直接或间接地调用自身的算法称为(递归算法)。

15、?记号在算法复杂性的表示法中表示(渐进确界或紧致界)。

16、在分治法中,使子问题规模大致相等的做法是出自一种(平衡(banlancing)子问题)的思想。

算法分析与设计考试复习题及参考答案jing

算法分析与设计考试复习题及参考答案jing

一、填空题1、算法的复杂性是算法效率2、的度量,是评价算法优劣的重要依据。

1、设n为正整数,利用大“O(·)”记号,将下列程序段的执行时间表示为n的函数,则下面程序段的时间复杂度为O(n)2、。

i=1; k=0;while(i<n) { k=k+10*i;i++; }3、计算机的资源最重要的是时间和空间资源。

因而,算法的复杂性有时间复杂度和空间复杂度之分。

3、f(n)= 6×2n+n2,f(n)的渐进性态f(n)= O( 2n4、 )5、递归是指函数直接或者间接通过一些语句调用自身。

4、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立6、且与原问题相同。

二、选择题(本题20分,每小题2分)1、分支限界法与回溯法都是在问题的解空间树T上搜索问题的解,二者( B )。

A.求解目标不同,搜索方式相同B.求解目标不同,搜索方式也不同C.求解目标相同,搜索方式不同D.求解目标相同,搜索方式也相同2、回溯法在解空间树T上的搜索方式是( A)。

A.深度优先B.广度优先C.最小耗费优先D.活结点优先3、在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( B )。

A.回溯法B.分支限界法C.回溯法和分支限界法D.回溯法求解子集树问题4、以下关于判定问题难易处理的叙述中正确的是( C )。

A.可以由多项式时间算法求解的问题是难处理的B.需要超过多项式时间算法求解的问题是易处理的C.可以由多项式时间算法求解的问题是易处理的D.需要超过多项式时间算法求解的问题是不能处理的5、设f(N),g(N)是定义在正数集上的正函数,如果存在正的常数C和自然数N0,使得当N≥N0时有f(N)≤Cg(N),则称函数f(N)当N充分大时有上界g(N),记作f(N)=O(g(N)),即f(N)的阶( A )g(N)的阶。

A.不高于B.不低于C.等价于D.逼近6、对于含有n个元素的子集树问题,最坏情况下其解空间的叶结点数目为( B )。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2011-3-22
2 3 4 5 6 3 0 5 3 5 5 6 7 8 9 a5 a6 a7 a8 a9 a10 a11
7 8 9 6 8 8 10 11 12
10 2 13
11 12 14
相容活动: 相容活动:{a3, a9, a11},
{a1,a4,a8,a11}, {a2,a4,a9,a11}
算法分析与设计总复习
计算机学院 林永钢
绪言
标准复杂性函数的比较
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
多项式时间阶
指数时间阶
一个算法的时间复杂性如果是O(n )(k为有 一个算法的时间复杂性如果是O(nk)(k为有 理数),则称此算法需要多项式时间。 ),则称此算法需要多项式时间 理数),则称此算法需要多项式时间。 有效算法 以多项式时间为限界的算法称为有效算法
2011-3-22 3 of 158
标准复杂性函数的比较
O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)
多项式时间阶
指数时间阶
注意:1)不能划等号 2)以下若无特殊声明, 注意: ) )以下若无特殊声明, log是以 为底的对数 是以2为底的对数 是以 3)上式只有在 较大的时候成立 )上式只有在n较大的时候成立 O(1)的含义? 的含义? 的含义 计算时间由一个常数(零次多项式) 计算时间由一个常数(零次多项式)来限界
2011-3-22
29 of 158
贪心策略 将各活动按结束时间 排序f ≤…≤f 排序 1≤f2≤…≤ n,先选出活动 1,然后按活动编好从小到大的次 , 序依次选择与当前活动相容的活动。 序依次选择与当前活动相容的活动。
注:这种策略使剩余的可安排 时间极大化, 时间极大化,以便于安排尽可 能多的相容活动。 能多的相容活动。
2011-3-22
8 of 158
P类问题是NP类问题的一个子集合 尚无法证明: P=NP还是P是NP的真子集? NP完全问题:除非P=NP,否则不可 能找到多项式时间的确定性算法的一 类问题
2011-3-22 9 of 158
尽管理论上没有证明,但大量研究表明, P似乎不等于NP,所以,一旦一个问题 被证明是NP完全的,则基本可以断定, 它不可能在多项式时间内求解
2011-3-22
}
31 of 158
活动安排: 计算示例
11个活动已按结束时间排序,用贪心算法求解: 11个活动已按结束时间排序,用贪心算法求解: 个活动已按结束时间排序
i 1 start_timei 1 finish_timei 4 time a1 a2 a3 a4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
2011-3-22 6 of 158
NP类问题举例:哈密顿回路问题
1.非确定(猜测)阶段 2.确定(验证)阶段 首先判断猜测阶段所产生的输出是否 具有正确形式。 若具有正确形式,则继续检查是否是 问题的解。
2011-3-22 7 of 158
P类问题:可以用多项式时间的确定性 类问题: 类问题 算法来进行判定或求解; 算法来进行判定或求解; NP类问题:可以用多项式时间的确定 类问题: 类问题 性算法来检查和验证在推测阶段产生 的答案。 的答案。
n! = ω(2n) log n! = Θ(n log n)
2011-3-22
17 of 158
符号
三、求和 等比级数的求和公式
−1 ∑ x = x −1 k =0
n k
x
n +1
2011-3-22
18 of 158
O、o、Ω、ω、Θ第二种理解方法
求复杂性函数阶的极限方法
f ( n) =s 若 lim n →∞ g ( n) 当s ≠ 0时, f (n)和g (n)同阶, f = θ ( g ); 说明 则 当s = 0时, f (n)比g (n)的阶低, f = O( g ); 说明 则 当s=∞时, f (n)比g (n)的阶高, f = Ω( g ); 说明 则
2011-3-22 5 of 158
NP类问题
NP类问题:非多项式 (non polynomial)时间 NP类问题:非确定的多项式时间 (nondeterministic polynomial-time) 存在以多项式时间运行的非确定性算法。 1.非确定(猜测)阶段 非确定性算法 2.确定(验证)阶段
2011-3-22 27 of 158
n=3, M=20 , (v1, v2, v3) =(25,24,15) (w1 , w2 , w3)=(18,15,10) 按vi/wi的非增次序将物品依次放入背 包 (x1,x2,x3) Σwixi Σvixi 20 31.5 (0,1,1/2)
2011-3-22
28 of 158
活动安排: 问题描述
个活动集E={1,2,…,n}使用同一资 有n个活动集 个活动集 使用同一资 源,而同一时间内同一资源只能由一 个活动使用。 个活动使用。每个活动的使用时间为 [si, fi) i=1,…,n,si为开始时间,fi为 i=1,…,n, 为开始时间, 结束时间, )不相交 结束时间,若[si, fi) 与[sj, fj)不相交 称活动i和活动 是相容的。 和活动j是相容的 称活动 和活动 是相容的。 问题:选出最大的相容活动子集合。 问题:选出最大的相容活动子集合。
NP完全
ห้องสมุดไป่ตู้
NP
P
2011-3-22
10 of 158
NP完全(NPC)问题举例
SAT问题(Boolean Satisfiability Problem) 旅行商问题(Traveling Salesman Problem) 0-1背包问题( 0-1 Knapsack Problem) 子集和问题(Sum of Subset Problem) 哈密顿回路问题(Hamiltonian Cycle Problem)
2011-3-22
23 of 158
求递归关系T(n) = 5T(n–1) –6T(n–2) (n≥2) 例 求递归关系 满足初始条件T(0) =0, T(1) =1的解 满足初始条件 的解 解 此递归关系的特征方程为 x2–5x+6=0 即(x–2)(x–3) =0 所以,特征根为x 所以,特征根为 1= 2, x2=3 因此递归关系的通解为T(n) = A12n+A23n 因此递归关系的通解为
2011-3-22
24 of 158
算法设计的基本方法
贪心法(贪婪法)
背包问题
已知一个容量大小为M重量的背包和 种 已知一个容量大小为 重量的背包和n种 重量的背包和 物品,物品i的重量为 假定物品 的重量为w 假定物品i的一部 物品,物品 的重量为 i,假定物品 的一部 放入背包会得到v 这么大的收益, 分xi放入背包会得到 ixi这么大的收益, 这里,0≤xi≤1,vi>0。采用怎样的装包方 这里, ≤1, >0。 法才会使装入背包的物品总效益最大? 法才会使装入背包的物品总效益最大? 例:考虑以下情况下的背包问题 n=3, M=20 , (v1, v2, v3)=(25,24,15) (w1 , w2 , w3)=(18,15,10)
2011-3-22 21 of 158
递归方程及其求解
特征方程 xk-a1xk-1-a2xk-2-…-ak=0 特征方程无重根: 如果递归关系的k 特征方程无重根: 如果递归关系的 个特征根q 互不相等, 个特征根 1,q2,…,qk互不相等,则 T(n) =A1q1n+ A2q2n +…+Akqkn是递归 关系的通解。其中A 关系的通解。其中 1,A2,…Ak为任意 常数。 常数。
最优化证明( 最优化证明(略) 算法正确性证明
2011-3-22
也就是贪心
30 of 158
void ActivitySelection(int n,s[],f[], bool a[])
选择
{//f[]已排序,a[]记录选择的活动,即a[i]=true表示活动 已 已排序, 记录选择的活动 记录选择的活动, 表示活动i已 已排序 表示活动 a[1]=true; int j=1; for(int i=2; i<=n; i++) if(s[i]>=f[j]) { a[i]=true; j=i;} else a[i]=false; } T(n)=O(nlogn) {
2011-3-22 4 of 158
P类问题
如果对某个判定问题Π 如果对某个判定问题Π,存在着一 个非负整数k,对输入规模为n的实 个非负整数 ,对输入规模为 的实 能够以O(nk)的时间运行一个确 例,能够以 的时间运行一个确 定性的算法,得到yes或no的答案, 的答案, 定性的算法,得到 或 的答案 则该判定问题Π是一个P类判定问题 类判定问题。 则该判定问题Π是一个 类判定问题。 P类问题:多项式(polynomial)时间
time a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
32 of 158
有限期的任务安排问题
用贪心法求解有限期的任务安排问题:假 用贪心法求解有限期的任务安排问题: 设只能在同一台机器上加工n个任务 个任务, 设只能在同一台机器上加工 个任务,每 个任务i完成时间均是一个单位时间 完成时间均是一个单位时间。 个任务 完成时间均是一个单位时间。又 设每个任务i都有一个完成期限 都有一个完成期限d 设每个任务 都有一个完成期限 i>0,当且 当且 仅当任务i在它的期限截止以前被完成时 在它的期限截止以前被完成时, 仅当任务 在它的期限截止以前被完成时, 任务i才能获得 的效益, 才能获得p 任务 才能获得 i的效益,每个任务的期限 从整个工序的开工开始计时, 从整个工序的开工开始计时,问应如何安 排加工顺序,才能获得最大效益? 排加工顺序,才能获得最大效益? n=6,(p1,p2,p3,p4,p5,p6)=(5,25,20,30,10,15),( d1,d2,d3,d4,d5,d6)=(1,5,2,3,3,2)
相关文档
最新文档