算法分析与设计》期末考试复习题纲(完整版)
(完整word版)算法设计与分析复习题目及答案(word文档良心出品)
一。
选择题1、二分搜索算法是利用( A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是( A )。
A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3、最大效益优先是( A )的一搜索方式。
A、分支界限法B、动态规划法C、贪心法D、回溯法4、在下列算法中有时找不到问题解的是( B )。
A、蒙特卡罗算法B、拉斯维加斯算法C、舍伍德算法D、数值概率算法5. 回溯法解旅行售货员问题时的解空间树是( B )。
A、子集树B、排列树C、深度优先生成树D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的是( B )。
A、备忘录法B、动态规划法C、贪心法D、回溯法7、衡量一个算法好坏的标准是(C )。
A 运行速度快B 占用空间少C 时间复杂度低D 代码短8、以下不可以使用分治法求解的是(D )。
A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题9. 实现循环赛日程表利用的算法是( A )。
A、分治策略B、动态规划法C、贪心法D、回溯法10、下列随机算法中运行时有时候成功有时候失败的是(C )A 数值概率算法B 舍伍德算法C 拉斯维加斯算法D 蒙特卡罗算法11.下面不是分支界限法搜索方式的是( D )。
A、广度优先B、最小耗费优先C、最大效益优先D、深度优先12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。
A、备忘录法B、动态规划法C、贪心法D、回溯法13.备忘录方法是那种算法的变形。
( B )A、分治法B、动态规划法C、贪心法D、回溯法14.哈弗曼编码的贪心算法所需的计算时间为( B )。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)15.分支限界法解最大团问题时,活结点表的组织形式是( B )。
A、最小堆B、最大堆C、栈D、数组16.最长公共子序列算法利用的算法是( B )。
A、分支界限法B、动态规划法C、贪心法D、回溯法17.实现棋盘覆盖算法利用的算法是( A )。
算法设计与分析历年期末试题整理_含答案_
《算法设计与分析》历年期末试题整理(含答案)(1)用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制(2)算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程(3)算法的三要素1、操作2、控制结构3、数据结构算法具有以下5 个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法中每一条指令必须有确切的含义。
不存在二义性。
只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。
输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。
输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。
算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。
效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。
一般这两者与问题的规模有关。
经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。
利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代模型。
在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。
迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。
不能让迭代过程无休止地重复执行下去。
《算法分析与设计》期末考试复习题纲(完整版)
《算法分析与设计》期末复习题一、选择题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 )。
算法分析与设计考试复习题及参考答案
15..最坏情况下快速排序退化成冒泡排序,需要比较n2次。 16. 是一种依据最优化量度依次选择输入的分级处理方法。基本思 路是:首先根据题意,选取一种量度标准;然后按这种量度标准对这n 个输入排序,依次选择输入量加入部分解中。如果当前这个输入量的加 入,不满足约束条件,则不把此输入加到这部分解中。 17.回溯法的解(x1,x2,……xn)的隐约束一般指个元素之间应满 足的某种关系。 18. 将数组一分为二,分别对每个集合单独排序,然后将已排序的 两个序列归并成一个含n个元素的分好类的序列。如果分割后子问题还 很大,则继续分治,直到一个元素。 19.快速排序的基本思想是在待排序的N个记录中任意取一个记录, 把该记录放在最终位置后,数据序列被此记录分成两部分。所有关键字 比该记录关键字小的放在前一部分,所有比它大的放置在后一部分,并 把该记录排在这两部分的中间,这个过程称作一次快速排序。之后重复 上述过程,直到每一部分内只有一个记录为止。 20.在定义一个过程或者函数的时候又出现了调用本过程或者函数 的成分,既调用它自己本身,这称为直接递归。如果过程或者函数P调 用过程或者函数Q,Q又调用P,这个称为间接递归。消除递归一般要用 到栈这种数据结构。 21.哈密顿环是指一条沿着图G的N条边环行的路径,它的访问每个 节点一次并且返回它的开始位置。 22.当前选择的节点X[k]是从未到过的节点,即X[k]≠X[i](i=1,2, …,k-1),且C(X[k-1], X[k])≠∞,如果k=-1,则C(X[k], X[1]) ≠∞。 23. 思路是:最初生成树T为空,依次向内加入与树有最小邻接边 的n-1条边。处理过程:首先加入最小代价的一条边到T,根据各节点到 T的邻接边排序,选择最小边加入,新边加入后,修改由于新边所改变 的邻接边排序,再选择下一条边加入,直至加入n-1条边。 二、复杂性分析 1、 递归方程
算法设计与分析期末复习题【试题.知识点】
算法设计与分析期末复习题【试题.知识点】算法设计与分析期末考试复习题1.算法有哪些特点?为什么说⼀个具备了所有特征的算法,不⼀定就是使⽤的算法?2.证明下⾯的关系成⽴:(参考例题1.5--1.6)(1)logn!=Θ(nlogn) (2)2n=Θ(2n+1)(3)n!=Θ(n n) (4)5n2-6n=Θ(n2)13.考虑下⾯的算法:输⼊:n个元素的数组A输出:按递增顺序排序的数组A1. void sort(int A[],int n)2. {3. int i,j,temp;4. for(i=0;i5. for(j=i+1;j6. if(A[j]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(i6. sorted=1;7. for(j=n-1;j>i;j--) {8. if(A[j]9. temp=A[j];210. 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)⽤О、和Ω记号表⽰算法的运⾏时间。
(6)可以⽤Θ记号来表⽰算法的运⾏时间吗?请说明。
35.解下⾯的递归⽅程:(1)f(n)=5f(n-1)-6f(n-2) f(0)=1 f(1)=0(2)f(n)=4f(n-1)-4f(n-2) f(0)=6 f(1)=86.初始链表的内容为:3562,6381,0356,2850,9136,3715,8329,7481,写出⽤基数排序算法对它们进⾏排序的过程。
《算法设计与分析》考试题目及答案
《算法分析与设计》期末复习题一、选择题1.应用Johnson法则的流水作业调度采用的算法是(D)A. 贪心算法B. 分支限界法C.分治法D. 动态规划算法2.Hanoi塔问题如下图所示。
现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。
移动圆盘时遵守Hanoi塔问题的移动规则。
由此设计出解Hanoi塔问题的递归算法正确的为:(B)Hanoi塔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)策略,从根结点出发搜索解空间树。
广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间树。
A.广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块(A)是回溯法中遍历排列树的算法框架程序。
A.B.C.D.10.x[k]的个数。
11. 常见的两种分支限界法为(D)A. 广度优先分支限界法与深度优先分支限界法;B. 队列式(FIFO)分支限界法与堆栈式分支限界法;C. 排列树法与子集树法;D. 队列式(FIFO)分支限界法与优先队列式分支限界法;12. k带图灵机的空间复杂性S(n)是指(B)A.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最大方格数。
《算法分析与设计》期末试题及参考答案
《算法分析与设计》期末试题及参考答案《算法分析与设计》期末试题及参考答案一、简要回答下列问题:1.算法重要特性是什么?1.确定性、可行性、输入、输出、有穷性2.2.算法分析的目的是什么?2.分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。
3.3.算法的时间复杂性与问题的什么因素相关?3. 算法的时间复杂性与问题的规模相关,是问题大小n的函数。
4.算法的渐进时间复杂性的含义?4.当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。
时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。
5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的算法所耗时间。
最坏情况下的时间复杂性取的输入实例中最大的时间复杂度:W(n) = max{ T(n,I) } , I∈Dn平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和:A(n) =∑P(I)T(n,I) I∈Dn6.简述二分检索(折半查找)算法的基本过程。
6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较,如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]<="">7.背包问题的目标函数和贪心算法最优化量度相同吗?7. 不相同。
目标函数:获得最大利润。
最优量度:最大利润/重量比。
8.采用回溯法求解的问题,其解如何表示?有什么规定?8. 问题的解可以表示为n元组:(x1,x2,……x n),x i∈S i, S i为有穷集合,x i∈S i, (x1,x2,……x n)具备完备性,即(x1,x2,……x n)是合理的,则(x1,x2,……x i)(i<n)一定合理。
算法分析与设计-复习提纲
掌握三种渐近符号(O、Ω 、Θ )的含义; 会用三种渐近符号表示算法的时间复杂度; 会用扩展递归技术分析算法时间的复杂性;对
于表示算法时间的简单递推式,能够用扩展递 归技术求出最终结果。 P15:例1.6 P18:实验1 P22:习题1.7
三种渐近符号的含义
大O符号:若存在两个正的常数c和n0,对于任 意n≥n0,都有T(n)≤c×f(n),则称T(n)=O(f(n))
tk 1 "t jk 1t jk 2
t j1 "}
next数组的求法:
已求出next[1],…, next[j],咋求next[j+1]?
设k是t[j]的前缀函数值,从而有 t1…t2tk-1 = tj-k+1tj-k+2…tj-1
比较tk和tj,得2种情况: (1) tk=tj:说明t1…tk-1tk=tj-k+1…tj-1tj,则next[j+1]=k+1; (2) tk≠tj:此时要找出t1…tj-1的后缀中第2大真前缀
动态规划法的求解过程
原问题
子问题1
子问题2 ……
子问题n
填表 原问题的解
例:计算斐波那契数:
0
F
(n)
1
F(n 1) F(n 2)
n0 n 1 n2
n=5时分治法计算斐波那契数的过程。
F(5)
F(4)
F(3)
F(3)
F(2)
F(2)
F(1)
F(2) F(1) F(1) F(0) F(1) F(0)
算法3.9 生成排列对象 (伪代码)
1. 生成初始排列{1};
2. for (i=2; i<=n; i++)
算法设计与分析期末复习题
算法设计与分析期末考试复习题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)用О、和Ω记号表示算法的运行时间。
算法设计与分析考试题目及答案
算法设计与分析考试题目及答案Revised at 16:25 am on June 10, 2021I hope tomorrow will definitely be better算法分析与设计期末复习题一、 选择题1.应用Johnson 法则的流水作业调度采用的算法是DA. 贪心算法B. 分支限界法C.分治法D. 动态规划算法塔问题如下图所示;现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置;移动圆盘时遵守Hanoi 塔问题的移动规则;由此设计出解Hanoi 塔问题的递归算法正确的为:B3. 动态规划算法的基本要素为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. Ofn+Ogn = Omin{fn,gn} D. f (n)O(g(n))g(n)O(f (n))=⇔=Hanoi 塔A. void hanoiint n, int A, int C, int B { if n > 0 {hanoin-1,A,C, B; moven,a,b;hanoin-1, C, B, A; } B. void hanoiint n, int A, int B, int C { if n > 0 {hanoin-1, A, C, B; moven,a,b; hanoin-1, C, B, A; }C. void hanoiint n, int C, int B, int A { if n > 0 { hanoin-1, A, C, B; moven,a,b; hanoin-1, C, B, A; }D. void hanoiint n, int C, int A, int B { if n > 0 {hanoin-1, A, C, B; moven,a,b;hanoin-1, C, B, A; }6.能采用贪心算法求最优解的问题,一般具有的重要性质为:AA. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用7. 回溯法在问题的解空间树中,按D策略,从根结点出发搜索解空间树;广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按A策略,从根结点出发搜索解空间树;A.广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块A是回溯法中遍历排列树的算法框架程序;A.B.C.D.10.xk的个数;11. 常见的两种分支限界法为DA. 广度优先分支限界法与深度优先分支限界法;B. 队列式FIFO分支限界法与堆栈式分支限界法;C. 排列树法与子集树法;D. 队列式FIFO分支限界法与优先队列式分支限界法;12. k带图灵机的空间复杂性Sn是指BA.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最大方格数;B.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的方格数的总和;C.k带图灵机处理所有长度为n的输入时,在k条带上所使用过的平均方格数;D.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最小方格数;13. N P类语言在图灵机下的定义为DA.NP={L|L是一个能在非多项式时间内被一台NDTM所接受的语言};B.NP={L|L是一个能在多项式时间内被一台NDTM所接受的语言};C.NP={L|L是一个能在多项式时间内被一台DTM所接受的语言};D.NP={L|L是一个能在多项式时间内被一台NDTM所接受的语言};14. 记号O的定义正确的是A;A.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ fn ≤cgn };B.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ cgn ≤fn };>0使得对所有n≥n0C.Ogn = { fn | 对于任何正常数c>0,存在正数和n有:0 ≤fn<cgn };>0使得对所有n≥n0D.Ogn = { fn | 对于任何正常数c>0,存在正数和n有:0 ≤cgn < fn };15. 记号Ω的定义正确的是B;A.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ fn ≤cgn };B.Ogn = { fn | 存在正常数c和n0使得对所有n≥n0有:0≤ cgn ≤fn };>0使得对所有n≥n0有:C.gn = { fn | 对于任何正常数c>0,存在正数和n0 ≤fn<cgn };D.gn = { fn | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0有:0 ≤cgn < fn };二、 填空题1. 下面程序段的所需要的计算时间为 2O(n ) ;2.3.4. 5.6. 用回溯法解题的一个显着特征是在搜索过程中动态产生问题的解空间;在任何时刻,算法只保存从根结点到当前扩展结点的路径;如果解空间树 中从根结点到叶结点的最长路径的长度为hn,则回溯法所需的计算空间通常为Ohn ;7. 回溯法的算法框架按照问题的解空间一般分为子集树算法框架与排列树算法框架;8. 用回溯法解0/1背包问题时,该问题的解空间结构为子集树结构; 9.用回溯法解批处理作业调度问题时,该问题的解空间结构为排列树结构; 10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容:11. n m12. 用回溯法解图的m着色问题时,使用下面的函数OK检查当前扩展结点的每一个儿子所相应的颜色的可用性,则需耗时渐进时间上限Omn;13.;设分分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用fn个单位时间;用Tn表示该分治法解规模为|P|=n的问题所需的计算时间,则有:(1)1 ()(/)()1O nT nkT n m f n n=⎧=⎨+>⎩通过迭代法求得Tn的显式表达式为:log1log()(/)nmk j jmjT n n k f n m-==+∑试证明Tn的显式表达式的正确性;2. 举反例证明0/1背包问题若使用的算法是按照p i/w i的非递减次序考虑选择的物品,即只要正在被考虑的物品装得进就装入背包,则此方法不一定能得到最优解此题说明0/1背包问题与背包问题的不同;证明:举例如:p={7,4,4},w={3,2,2},c=4时,由于7/3最大,若按题目要求的方法,只能取第一个,收益是7;而此实例的最大的收益应该是8,取第2,3 个;3. 求证:Ofn+Ogn = Omax{fn,gn} ;证明:对于任意f1n∈ Ofn ,存在正常数c1和自然数n1,使得对所有n≥n1,有f1n≤ c1fn ;类似地,对于任意g1n ∈ Ogn ,存在正常数c2和自然数n2,使得对所有n≥n2,有g1n ≤c2gn ;令c3=max{c1, c2}, n3 =max{n1, n2},hn= max{fn,gn} ;则对所有的 n ≥ n3,有f1n +g1n ≤ c1fn + c2gn≤c3fn + c3gn= c3fn + gn≤ c32 max{fn,gn} = 2c3hn = Omax{fn,gn} .4. 求证最优装载问题具有贪心选择性质;最优装载问题:有一批集装箱要装上一艘载重量为c 的轮船;其中集装箱i 的重量为Wi;最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船; 设集装箱已依其重量从小到大排序,x 1,x 2,…,x n 是最优装载问题的一个最优解;又设1min{|1}i i nk i x ≤≤== ;如果给定的最优装载问题有解,则有1k n ≤≤;证明: 四、 解答题1. 机器调度问题;问题描述:现在有n 件任务和无限多台的机器,任务可以在机器上得到处理;每件任务的开始时间为s i ,完成时间为f i ,s i <f i ;s i ,f i 为处理任务i 的时间范围;两个任务i,j 重叠指两个任务的时间范围区间有重叠,而并非指i,j 的起点或终点重合;例如:区间1,4与区间2,4重叠,而与4,7不重叠;一个可行的任务分配是指在分配中没有两件重叠的任务分配给同一台机器;因此,在可行的分配中每台机器在任何时刻最多只处理一个任务;最优分配是指使用的机器最少的可行分配方案;问题实例:若任务占用的时间范围是{1,4,2,5,4,5,2,6,4,7},则按时完成所有任务最少需要几台机器提示:使用贪心算法画出工作在对应的机器上的分配情况;2. 已知非齐次递归方程:f (n)bf (n 1)g(n)f (0)c =-+⎧⎨=⎩ ,其中,b 、c 是常数,gn 是n 的某一个函数;则fn 的非递归表达式为:nnn i i 1f (n)cb b g(i)-==+∑;现有Hanoi 塔问题的递归方程为:h(n)2h(n 1)1h(1)1=-+⎧⎨=⎩ ,求hn 的非递归表达式;解:利用给出的关系式,此时有:b=2, c=1, gn=1, 从n 递推到1,有: 3. 单源最短路径的求解;问题的描述:给定带权有向图如下图所示G =V,E,其中每条边的权是非负实数;另外,还给定V 中的一个顶点,称为源;现在要计算从源到所有其它各顶点的最短路长度;这里路的长度是指路上各边权之和;这个问题通常称为单源最短路径问题;解法:现采用Dijkstra 算法计算从源顶点1到其它顶点间最短路径;请将此过程填入下表中;4. 请写出用回溯法解装载问题的函数; 装载问题:有一批共n 个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i 的重量为wi,且121ni i w c c =≤+∑;装载问题要求确定是否有一个合理的装载方案可将这n 个集装箱装上这2艘轮船;如果有,找出一种装载方案;解:void backtrack int i{用分支限界法解装载问题时,对算法进行了一些改进,下面的程序段给出了改进部分;试说明斜线部分完成什么功能,以及这样做的原因,即采用这样的方式,算法在执行上有什么不同;初始时将;也就是说,重量仅在搜索进入左子树是增加,因此,可以在算法每一次进入左子树时更新bestw 的值;43 2 110030maxint10 - {1} 初始 dist5 dist4 dist3 dist2 u S 迭代7. 最长公共子序列问题:给定2个序列X={x 1,x2,…,xm }和Y={y 1,y2,…,yn },找出X 和Y 的最长公共子序列;由最长公共子序列问题的最优子结构性质建立子问题最优值的递归关系;用cij 记录序列Xi 和Yj 的最长公共子序列的长度;其中, Xi={x1,x2,…,xi};Y j={y1,y2,…,yj};当i=0或j=0时,空序列是Xi 和Yj 的最长公共子序列;故此时Cij=0;其它情况下,由最优子结构性质可建立递归关系如下:00,0[][][1][1]1,0;max{[][1],[1][]},0;i j i ji j c i j c i j i j x y c i j c i j i j x y ⎧==⎪=--+>=⎨⎪-->≠⎩在程序中,bij 记录Cij 的值是由哪一个子问题的解得到的;8.1.2.3.4.5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________;6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解;7.以深度优先方式系统搜索问题解的算法称为_____________;背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________;9.动态规划算法的两个基本要素是___________和___________;10.二分搜索算法是利用_______________实现的算法;二、综合题50分1.写出设计动态规划算法的主要步骤;2.流水作业调度问题的johnson算法的思想;3.若n=4,在机器M1和M2上加工作业i所需的时间分别为ai 和bi,且a 1,a2,a3,a4=4,5,12,10,b1,b2,b3,b4=8,2,15,9求4个作业的最优调度方案,并计算最优值;4.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间从根出发,左1右0,并画出其解空间树,计算其最优值及最优解;5.设S={X1,X2,···,Xn}是严格递增的有序集,利用二叉树的结点来存储S中的元素,在表示S的二叉搜索树中搜索一个元素X,返回的结果有两种情形,1在二叉搜索树的内结点中找到X=Xi ,其概率为bi;2在二叉搜索树的叶结点中确定X∈Xi ,Xi+1,其概率为ai;在表示S的二叉搜索树T中,设存储元素Xi的结点深度为C i ;叶结点Xi,Xi+1的结点深度为di,则二叉搜索树T的平均路长p为多少假设二叉搜索树Tij={Xi ,Xi+1,···,Xj}最优值为mij,Wij= ai-1+bi+···+bj+aj,则mij1<=i<=j<=n递归关系表达式为什么6.描述0-1背包问题;三、简答题30分1.流水作业调度中,已知有n个作业,机器M1和M2上加工作业i所需的时间分别为ai 和bi,请写出流水作业调度问题的johnson法则中对ai和bi的排序算法;函数名可写为sorts,n2.最优二叉搜索树问题的动态规划算法设函数名binarysearchtree答案:一、填空1.确定性有穷性可行性 0个或多个输入一个或多个输出2.时间复杂性空间复杂性时间复杂度高低3. 该问题具有最优子结构性质4.{BABCD}或{CABCD}或{CADCD}5.一个最优解6.子问题子问题子问题7.回溯法8. on2n omin{nc,2n}9.最优子结构重叠子问题10.动态规划法二、综合题1.①问题具有最优子结构性质;②构造最优值的递归关系表达式;③最优值的算法描述;④构造最优解;2. ①令N1={i|ai<bi},N2={i|ai>=bi};②将N1中作业按ai的非减序排序得到N1’,将N2中作业按bi的非增序排序得到N2’;③N1’中作业接N2’中作业就构成了满足Johnson法则的最优调度;3.步骤为:N1={1,3},N2={2,4};N 1’={1,3}, N2’={4,2};最优值为:384.解空间为{0,0,0,0,1,0,0,0,1,1,0,0,0,1,1,1,0,1, 1,1,0,1,1,1}; 解空间树为:该问题的最优值为:16 最优解为:1,1,0 5.二叉树T 的平均路长P=∑=+ni 1Ci)(1*bi +∑=nj 0dj *aj{mij=0 i>j6.已知一个背包的容量为C,有n 件物品,物品i 的重量为W i ,价值为V i ,求应如何选择装入背包中的物品,使得装入背包中物品的总价值最大; 三、简答题 1.void sortflowjope s,int n {int i,k,j,l;fori=1;i<=n-1;i++ag=0 k++; ifk>n break;ag==0ifsk.a>sj.a k=j; swapsi.index,sk.index; swapsi.tag,sk.tag;} }l=i;<sj.b k=j;swapsi.index,sk.index; ag,sk.tag; }mij=Wij+min{mik+mk+1j} 1<=i<=j<=n,mii-1=0}2.void binarysearchtreeint a,int b,int n,int m,int s,int w{int i,j,k,t,l;fori=1;i<=n+1;i++{wii-1=ai-1;mii-1=0;}forl=0;l<=n-1;l++Init-single-sourceG,s2. S=Φ3. Q=VGQ<> Φdo u=minQS=S∪{u}for each vertex 3do 4四、算法理解题本题10分根据优先队列式分支限界法,求下图中从v1点到v9点的单源最短路径,请画出求得最优解的解空间树;要求中间被舍弃的结点用×标记,获得中间解的结点用单圆圈○框起,最优解用双圆圈◎框起;五、算法理解题本题5分设有n=2k个运动员要进行循环赛,现设计一个满足以下要求的比赛日程表:①每个选手必须与其他n-1名选手比赛各一次;②每个选手一天至多只能赛一次;③循环赛要在最短时间内完成;1如果n=2k,循环赛最少需要进行几天;2当n=23=8时,请画出循环赛日程表;六、算法设计题本题15分分别用贪心算法、动态规划法、回溯法设计0-1背包问题;要求:说明所使用的算法策略;写出算法实现的主要步骤;分析算法的时间;七、算法设计题本题10分通过键盘输入一个高精度的正整数nn的有效位数≤240,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数;编程对给定的n 和s,寻找一种方案,使得剩下的数字组成的新数最小;样例输入178543S=4样例输出13一、填空题本题15分,每小题1分1.规则一系列运算2. 随机存取机RAMRandom Access Machine;随机存取存储程序机RASPRandom Access Stored Program Machine;图灵机Turing Machine3. 算法效率4. 时间、空间、时间复杂度、空间复杂度5.2n6.最好局部最优选择7. 贪心选择最优子结构二、简答题本题25分,每小题5分1、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同;对这k个子问题分别求解;如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止;将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解;2、“最优化原理”用数学化的语言来描述:假设为了解决某一优化问题,需要依次作出n个决策D1,D2,…,Dn,如若这个决策序列是最优的,对于任何一个整数k,1 < k < n,不论前面k个决策是怎样的,以后的最优决策只取决于由前面决策所确定的当前状态,即以后的决策Dk+1,Dk+2,…,Dn也是最优的;3、某个问题的最优解包含着其子问题的最优解;这种性质称为最优子结构性质;4、回溯法的基本思想是在一棵含有问题全部可能解的状态空间树上进行深度优先搜索,解为叶子结点;搜索过程中,每到达一个结点时,则判断该结点为根的子树是否含有问题的解,如果可以确定该子树中不含有问题的解,则放弃对该子树的搜索,退回到上层父结点,继续下一步深度优先搜索过程;在回溯法中,并不是先构造出整棵状态空间树,再进行搜索,而是在搜索过程,逐步构造出状态空间树,即边搜索,边构造;5、PPolynomial问题:也即是多项式复杂程度的问题;NP就是Non-deterministicPolynomial的问题,也即是多项式复杂程度的非确定性问题;NPCNP Complete问题,这种问题只有把解域里面的所有可能都穷举了之后才能得出答案,这样的问题是NP里面最难的问题,这种问题就是NPC问题;三、算法填空本题20分,每小题5分1、n后问题回溯算法1 Mj&&Li+j&&Ri-j+N2 Mj=Li+j=Ri-j+N=1;3 tryi+1,M,L,R,A4 Aij=05 Mj=Li+j=Ri-j+N=0 2、数塔问题; 1c<=r2trc+=tr+1c 3trc+=tr+1c+1 3、Hanoi 算法 1movea,c2Hanoin-1, a, c , b 3Movea,c 4、1pv=NIL 2pv=u3 v ∈adju 4Relaxu,v,w四、算法理解题本题10分五、18天2分;2当n=23=8时,循环赛日程表3分;六、算法设计题本题15分 1贪心算法 Onlogn ➢ 首先计算每种物品单位重量的价值Vi/Wi,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包;若将这种物品全部装入背包后,背包内的物品总重量未超过C,则选择单位重量价值次高的物品并尽可能多地装入背包;依此策略一直地进行下去,直到背包装满为止; ➢ 具体算法可描述如下:void Knapsackint n,float M,float v,float w,float x {Sortn,v,w; int i;for i=1;i<=n;i++ xi=0; float c=M;for i=1;i<=n;i++ {if wi>c break; xi=1; c-=wi; }if i<=n xi=c/wi; }2动态规划法 Oncmi,j 是背包容量为j,可选择物品为i,i+1,…,n 时0-1背包问题的最优值;由0-1背包问题的最优子结构性质,可以建立计算mi,j 的递归式如下;void KnapSackint v,int w,int c,int n,int m11 {int jMax=minwn-1,c;for j=0;j<=jMax;j++ /mn,j=0 0=<j<wn/ mnj=0;1 2 3 4 5 6 7 82 1 43 6 5 8 73 4 1 2 7 8 5 64 3 2 1 8 7 6 55 6 7 8 1 2 3 4 6 5 8 7 2 1 4 37 8 5 6 3 4 1 28 7 6 5 4 3 2 1for j=wn;j<=c;j++ /mn,j=vn j>=wn/mnj=vn;for i=n-1;i>1;i--{ int jMax=minwi-1,c;for j=0;j<=jMax;j++ /mi,j=mi+1,j 0=<j<wi/mij=mi+1j;for j=wi;j<=c;j++/mn,j=vn j>=wn/mij=maxmi+1j,mi+1j-wi+vi;}m1c=m2c;ifc>=w1m1c=maxm1c,m2c-w1+v1;}3回溯法 O2ncw:当前重量 cp:当前价值 bestp:当前最优值voidbacktrack int i//回溯法 i初值1{ifi>n //到达叶结点{ bestp=cp; return; }ifcw+wi<=c //搜索左子树{cw+=wi;cp+=pi;backtracki+1;cw-=wi;cp-=pi;}ifBoundi+1>bestp//搜索右子树backtracki+1;}七、算法设计题本题10分为了尽可能地逼近目标,我们选取的贪心策略为:每一步总是选择一个使剩下的数最小的数字删去,即按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字,否则删除第一个递减区间的首字符;然后回到串首,按上述规则再删除下一个数字;重复以上过程s次,剩下的数字串便是问题的解了;具体算法如下:输入s, n;while s > 0{ i=1; //从串首开始找while i < lengthn && ni<ni+1{i++;}deleten,i,1; //删除字符串n的第i个字符s--;}while lengthn>1&& n1=‘0’deleten,1,1; //删去串首可能产生的无用零输出n;。
计算机算法设计与分析-期末考试复习资料
一、算法设计实例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个规模较小的子问题,这些子问题互相独立且与原问题相同。
算法设计与分析(王多强)算法复习提纲.docx
题型及分数分布:1.填空题2.简答题、证明题3.计算题2-3题4.算法设计题2-3题15分25分左右30分左右30分左右复习提纲算法基础1.什么是算法?2.算法的五个重要特性3.运算的分类:时间囿界于常数的运算、时间非囿界于常数的运算,为什么要定义时间囿界于常数的运算?怎么分析吋间非囿界于常数的运算?4.什么是事前分析和事后测试?各阶段的目标和特点是什么?5.什么是函数表达式的数量级?数量级的大小怎么反应了算法复杂度的高低?6.什么是限界函数?怎么得来的?7.限界函数:上界函数、下界函数、“均值”函数的定义和性质8.理解定理1.2, P76定理9.掌握数学归纳法、反证法、反例法等证明方法二、递归与递归式1.什么是递归和递归程序设计?2.递归的结构是什么?3.什么是直接递归和间接递归?4.递归程序有哪些效率问题?各自的原因是什么?5.怎么消去递归(不要求)6.什么是代换法、递归树法、主方法?(例题、习题)三、分治法1.简述分治法的基本思想?分治法分解问题的基本要求是什么?为什么说分治与递归像一对李生兄弟?2.可用分治法求解的问题应具有的特征?(了解)3.分治法求解的三个步骤。
4.二分检索(3.2节)1)了解算法2)重点掌握算法复杂度的分析技术(1)对成功和不成功检索情况的讨论(2)什么是二元比较树?内结点、外结点分别代表了什么?比较次数和结点在树屮的级数(或根到结点的路径长度)Z间的关系。
3)定理3.1及其证明过程和结论4)什么叫做以比较为基础的检索?其下界是什么?(了解)5)为什么说二分检索是解决检索问题的最优的最坏情况算法?5.找最大和最小元素(3.3节):一般了解,理解递归程序的效率问题6.基于分治的分类算法(3.4节):回顾数据结构相关知识,知道每种分类算法的基本思想、算法复杂度、适用性等方面的性质(不考算法,考应用)1)P46:以关键字比较为基础的分类算法的吋间下界是什么?怎么证明的?(了解)2)P60:一个改进了的快速分类迭代算法模型,其空I'可复杂度为O(logn)是怎么得来的?7.选择问题(3.5节)1)了解基于partition的选择算法设计思想、最坏、平均吋间复杂度的结论和证明。
《算法设计与分析》考试题目及答案
《算法分析与设计》期末复习题一、选择题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.算法的复杂性是 算法效率 的度量,是评价算法优劣的重要依据。
3.以广度优先或以最小耗费方式搜索问题解的算法称为 分支限界法 。
4.回溯法解题的显著特点是在搜索过程中动态产生问题的解空间。
在任何时刻,算法只保存从根结点到当前扩展结点的路径。
如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为 O (h(n)) 。
5.人们通常将问题的解决方案分为两大类:一类是可以通过执行若干个步骤就能得出问题结论的,叫做 算法 方案;另一类是不能通过若干个步骤直截了当地得出结论,而是需要反复验证才能解决的,叫做 启发式 方案。
6.算法就是一组有穷的 规则 ,它们规定了解决某一特定类型问题的 一系列运算 。
7.在进行问题的计算复杂性分析之前,首先必须建立求解问题所用的计算模型。
3个基本计算模型是 随机存取机RAM 、 随机存取存储程序机RASP 、 图灵机 。
8.快速排序算法的性能取决于 划分的对称性 。
9.计算机的资源最重要的是 时间资源 和 空间 资源。
因而, 算法的复杂性有 时间复杂度 和 空间复杂度 之分。
10.贪心算法总是做出在当前看来 最优 的选择。
也就是说贪心算法并不从整体最优考虑,它所做出的选择只是在某种意义上的 局部最优 。
11.许多可以用贪心算法求解的问题一般具有2个重要的性质: 贪心选择 性质和 最优子结构 性质。
12.常见的两种分支限界法为 队列式(FIFO )分支限界 和 优先队列式分支限界 。
13.解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中需要排序的是 回溯法、分支限界法 ,不需要排序的是 动态规划 。
14.f ( n ) = 6 × 2n + n 2,f(n)的渐进性态f ( n ) = O ( 2n )。
15.对于含有n 个元素的排列树问题,最好情况下计算时间复杂性为 ,最坏情况下计算时间复杂性为 n! 。
算法分析与设计期末考试复习题学生版
《算法分析与设计》期末复习题一、选择题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.程序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 kij 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)。
算法分析设计复习提纲
1、二分搜索算法是利用( A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法2、下列不是动态规划算法基本步骤的是( A )。
A、找出最优解的性质B、构造最优解C、算出最优解D、定义最优解3、最大效益优先是( A )的一搜索方式。
A、分支界限法B、动态规划法C、贪心法D、回溯法5. 回溯法解旅行售货员问题时的解空间树是( A )。
A、子集树B、排列树C、深度优先生成树D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的( B )。
A、备忘录法B、动态规划法C、贪心法D、回溯法7、衡量一个算法好坏的标准是(C )。
A 运行速度快B 占用空间少C 时间复杂度低D 代码短8、以下不可以使用分治法求解的是(D )。
A 棋盘覆盖问题B 选择问题C 归并排序D 0/1背包问题11.下面不是分支界限法搜索方式的是( D )。
A、广度优先B、最小耗费优先C、最大效益优先D、深度优先12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。
A、备忘录法B、动态规划法C、贪心法D、回溯法13.备忘录方法是那种算法的变形。
( B )A、分治法B、动态规划法C、贪心法D、回溯法14.哈弗曼编码的贪心算法所需的计算时间为( B )。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)16.最长公共子序列算法利用的算法是( B )。
A、分支界限法B、动态规划法C、贪心法D、回溯法18.下面是贪心算法的基本要素的是( C )。
A、重叠子问题B、构造最优解C、贪心选择性质D、定义最优解19.回溯法的效率不依赖于下列哪些因素( D )A.满足显约束的值的个数B. 计算约束函数的时间C. 计算限界函数的时间D. 确定解空间的时间20.下面哪种函数是回溯法中为避免无效搜索采取的策略( B )A.递归函数 B.剪枝函数C。
随机数函数 D.搜索函数24. ( D )是贪心算法与动态规划算法的共同点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
delete[] ; return ;
}
例 2:批处理作业调度 解空间:排列树 算法描述: class Flowshop {
课件第 5 章(2)P2-5 问题描述,课本 P125-127
static int [][] m,
2A5A
1 A
bestp=0,将物体的序号按价值体积比排序结果是(2,1,3,4,5) N2 1 3 45
void hanoi (int n, int a, int c, int b) { if (n > 0) { hanoi(n-1, a, b, c); move(a,c); hanoi(n-1, b, c, a); } }
2. 用分治法求解快速排序问题。 快速排序算法 P25 、作业、课件第 2 章(2)42 页-50 页 template<class Type> void QuickSort (Type a[], int p, int r) {
C.最小花费生成树问题
D.背包问题
17. 使用二分搜索算法在 n 个有序元素表中搜索一个特定元素,在最好情况和最坏情
况下搜索的时间复杂性分别为( A )。P17
A.O(1),O(logn)
B.O(n),O(logn)
C.O(1),O(nlogn)
D.O(n),O(nlogn)
18. 优先队列式分支限界法选取扩展结点的原则是(C)。P162
解题算法: template<class Type> void GS (int n, Type s[], Type f[], bool A[])
{ A[1]=false; int j=1; int sum=0; for (int i=2;i<=n;i++) { if (s[i]>=f[j]) { A[i]=false; j=i; } else {A[i]=true; sum++;} }
此时已回到根结点,结束。最优解( 1,1,0,0, 1 ),价值为 92. (如图第 10 步)
练习 n=8, M=110, W=( 1, 11,21,23,33,43,45,55 ) P=(11,21,31,33,43,53,55,65 ) 用回溯法求此 0-1 背包问题的最优解。
最优装载问题 P119 课件第 P37- P54 页 假定 n= 4,w= [ 8 , ቤተ መጻሕፍቲ ባይዱ , 2 , 3 ],c1 = c2 =12. 试根据改进后的最优装载算法找出最优装载量及相应的最优装载方案。 要求:
A.先进先出
B.后进先出
C.结点的优先级
D.随机
19. 下面不是分支界限法搜索方式的是( D )。P161
A.广度优先
B.最小耗费优先
C.最大效益优先
D.深度优先
20. 分支限界法解最大团问题时,活结点表的组织形式是( B )。
A.最小堆
B.最大堆
C.栈
D.数组
21. 下列关于计算机算法的描述不正确的是( C )。P1
成概算法的时间为 t 秒。现有另一台计算机,其运行速度为第一台的 64 倍,那么
在这台新机器上用同一算法在 t 秒内能解输入规模为多大的问题( B )解题方
法:3*2^n*64=3*2^x
A.n+8
B.n+6
C.n+7
D.n+5
4. 设 问 题 规 模 为 N 时 , 某 递 归 算 法 的 时 间 复 杂 度 记 为 T(N) , 已 知 T(1)=1 ,
24. 分治法所能解决的问题应具有的关键特征是( C )。P16
A.该问题的规模缩小到一定的程度就可以容易地解决 B.该问题可以分解为若干个规模较小的相同问题 C.利用该问题分解出的子问题的解可以合并为该问题的解 D.该问题所分解出的各个子问题是相互独立的 25. 下列关于回溯法的描述不正确的是( D )。P114 A.回溯法也称为试探法 B.回溯法有“通用解题法”之称 C.回溯法是一种能避免不必要搜索的穷举式搜索法 D.用回溯法对解空间作深度优先搜索时只能用递归方法实现 26. 常见的两种分支限界法为( D )。P161 A. 广度优先分支限界法与深度优先分支限界法; B. 队列式(FIFO)分支限界法与堆栈式分支限界法; C. 排列树法与子集树法; D. 队列式(FIFO)分支限界法与优先队列式分支限界法;
A.算法是指解决问题的一种方法或一个过程
B.算法是若干指令的有穷序列
C. 算法必须要有输入和输出
D.算法是编程的思想
22. 下列关于凸多边形最优三角剖分问题描述不正确的是( A )。
A.n+1 个矩阵连乘的完全加括号和 n 个点的凸多边形的三角剖分对应
B.在有 n 个顶点的凸多边形的三角剖分中,恰有 n-3 条弦
} 题型二: 试用贪心算法求解下列问题:将正整数 n 分解为若干个互不相同的自然数之和,使这些自然 数的乘积最大,写出该算法。先看看几个 n 比较小的例子,看能否从中找出规律:
A.重叠子问题
B.最优子结构性质
C.贪心选择性质
D.定义最优解
9. 下列哪个问题不用贪心法求解( C )。
A.哈夫曼编码问题
B.单源最短路径问题
C.最大团问题
D.最小生成树问题
10. 下列算法中通常以自底向上的方式求解最优解的是( B )。
A.备忘录法
B.动态规划法
C.贪心法
D.回溯法
11. 下列算法中不能解决 0/1 背包问题的是( A )。
{ if (n==0) return 1; 递归出口 return n * factorial (n-1); 递归调用
} 例 2:用递归技术求解 Hanoi 塔问题,Hanoi 塔的递归算法。P15 其中 Hanoi (int n, int a, int c, int b)表示将塔座 A 上的 n 个盘子移至塔座 C,以塔座 B 为辅助。 Move(a,c)表示将塔座 a 上编号为 n 的圆盘移至塔座 c 上。
{
int i = p, j = r + 1;
Type x=a[p];
D=i; Q[i-1].d=*p[i]/w[i];
P+=p[i]; }
W+=w[i];
if(W<=c) D]; [i]=w[Q[i-1].ID]; }
=0; =0;
=c;
=n;
=0; (1);
delete[] Q;
delete[] ;
C.该问题可以用动态规划法来求解
D.在有 n 个顶点的凸多边形的三角剖分中,恰有 n-2 个三角形
23. 动态规划法求解问题的基本步骤不包括( C )。P44
A.递归地定义最优值
B.分析最优解的性质,并刻画其结构特征
C.根据计算最优值时得到的信息,构造最优解 (可以省去的)
D.以自底向上的方式计算出最优值
;分支限界法
三、算法填空题
1. 递归求解 Hanoi 塔问题/阶乘问题。
例 1 :阶乘函数 n! P12
阶乘的非递归方式定义: n! n (n 1) (n 2) 21
试写出阶乖的递归式及算法。
递归式为:
1 n0 n! n(n 1)! n 0
边界条件
递归方程 递归算法: int factorial (int n)
D.2m
14. 二分搜索算法是利用(A)实现的算法。
A.分治策略
B.动态规划法
C.贪心法
D.回溯法
15. 下列不是动态规划算法基本步骤的是(B)。P44
A.找出最优解的性质
B.构造最优解
C.算出最优解(应该是最优值)
D.定义最优解
16. 下面问题( B )不能使用贪心法解决。
A.单源最短路径问题
B.N 皇后问题
if (p<r) { int q=Partition(a,p,r); QuickSort (a,p,q-1); QuickSort (a,q+1,r); }
}
Partition 函数的具体实现
template<class Type>
int Partition (Type a[], int p, int r)
a) 列出问题的解空间。 b) 构造解空间树。 c) 根据递归回溯算法求出最优解和最优值。
四、算法设计题
使用贪心算法求解。
题型一:
开会问题:
某公司的会议很多,以至于全公司唯一的会议室不够用。现在给出这段时期的会议时间表, 要求你适当删除一些会议,使得剩余的会议在时间上互不冲突,要求删除的会议数最少。
A.5,89
B.3,89
C.5,144
D.3,144
7. 在有 8 个顶点的凸多边形的三角剖分中,恰有( B )。
A.6 条弦和 7 个三角形
B.5 条弦和 6 个三角形
C.6 条弦和 6 个三角形
D.5 条弦和 5 个三角形
8. 一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。
T(N)=2T(N/2)+N/2,用 O 表示的时间复杂度为( C )。
A.O(logN)
B.O(N)
C.O(NlogN)
D.O(N2logN)
5. 直接或间接调用自身的算法称为( B )。
A.贪心算法
B.递归算法
C.迭代算法
D.回溯法
6. Fibonacci 数列中,第 4 个和第 11 个数分别是( D )。
二、填空题
1. f(n)=3n2+10 的渐近性态 f(n)= O(n2 ),
g(n)=10log3n 的渐近性态 g(n)= O( n )。
2. 一个“好”的算法应具有正确性、 低存储量需求等特性。