算法设计与分析复习题目及答案..
算法设计与分析考试题及答案_百度文库
____________,先求解___________,然后从这些____________的 解得到原问题的解。
7.以深度优先方式系统搜索问题解的算法称为_____________。 8.0-1 背包问题的回溯算法所需的计算时间为_____________,用动态
个基 的度量,是评价算法优劣的重要依据。 4、 计算机的资源最重要的是 7、 许多可以用贪心算法求解的问题一般具有 2 个重要的性质: 3、Hanoi 算法
Hanoi(n,a,b,c) if (n==1) 1 else { 2 ; 3 ; Hanoi(n-1,b, a, c); } ; 4、Dijkstra
算法求单源最短路径 d[u]:s 到 u 的距离 p[u]:记录前一节点信息 Init-singleInit-single-source(G,s) for
each vertex v∈V[G] do { d[v]=∞; 1 } d[s]=0 Relax(u,v,w) if d[v]>d[u]+w(u,v) then
;c++) 2 ; ; if( t[r+1][c]>t[r+1][c+1]) ) 。 性质和 性 的选择。也就是说贪心算法并不从整体最优考 、
,它们规定了解决某一特定类型问题的 、 和 。 资源。因而,算法的复杂性有 和 。 2、 在进行问题的计算复杂性分析之前,首先必须建立求解问题所用的计算模型。3
规划算法所需的计算时间为____________。 9.动态规划算法的两个基本要素是___________和___________。
《算法设计与分析》复习题参考答案
《算法设计与分析》复习题参考答案一、概念题:请解释下列术语。
1.数据元素的集合。
2.队列是一个线性表,限制为只能在固定的一端进行插入,在固定的另一端进行删除。
3.对于算法a,如果存在一多项式p(),使得对a的每个大小为n的输入,a的计算时间为o(p(n)),则称a具有多项式复杂度4.二叉树的层数i与该层上的结点数n的关系为:n(i)=i2。
5.如果可满足性约化为一个问题L,则称该问题为NP-难度的。
6.算法就是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。
7.多数据单指令流8.若图的任意两个节点间均存在路径可达,则称该图为连通图。
9. 是指一个数学模型以及定义在该模型上的一组操作。
10.算法的复杂度只能用指数函数对其限界。
11.函数或过程直接或间接调用它自己。
12.和高度相同的满二叉树的每个对应的顶点编号相同的树13.由所有可行状态所构成的树。
14.如果L时NP难度的且L∈NP,则称问题L是NP-完全的。
15.算法是一个步骤的序列,满足:有穷性、可行性、确定性、输入、输出;过程不需要满足由穷性。
16.有向图的每条边有起点与终点之分,且用箭头指向边的终点。
无向图的边无起点和终点之分,边无箭头。
17.树(tree)是一个或多个结点的有限集合,,它使得:①有一个特别指定的称作根(root)的结点;②剩下的结点被分成m≥0个不相交的集合tl,…,tm,这些集合的每一个都是一棵树,并称t1,…,tm为这根的子树(subtree)。
18.P是所有可在多项式时间内用确定算法求解的判定问题的集合。
19.运算结果是唯一确定的算法20. nP是所有可在多项式时间内用不确定算法求解的判定问题的集合二、填空题1.n2.O ( n )3.最优化问题4.宽度优先搜索5.结点的最大级数6.互异7.内结点和外结点8.方形9.内部路径长度、外部路径长度10.一次11.归并分类算法12.贪心选择性质13.最优子结构14.二元归并15.最小成本生成树16.最优性17.最优决策18.可容许最大成本c19.最小成本三、程序填空题。
(完整版)算法设计与分析考试题及答案
一、填空题(20分)1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。
2.算法的复杂性有_____________和___________之分,衡量一个算法好坏的标准是______________________。
3.某一问题可用动态规划算法求解的显著特征是____________________________________。
4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。
5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。
6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。
7.以深度优先方式系统搜索问题解的算法称为_____________。
8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。
9.动态规划算法的两个基本要素是___________和___________。
10.二分搜索算法是利用_______________实现的算法。
二、综合题(50分)1.写出设计动态规划算法的主要步骤。
2.流水作业调度问题的johnson算法的思想。
3.若n=4,在机器M1和M2上加工作业i所需的时间分别为a i和b i,且(a1,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),并画出其解空间树,计算其最优值及最优解。
(完整版)算法设计与分析考试题及答案,推荐文档
____________________________________。 4.若序列 X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列
X 和 Y 的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至
和
之分。
5、 f(n)= 6×2n+n2,f(n)的渐进性态 f(n)= O(
)
6、 贪心算法总是做出在当前看来
的选择。也就是说贪心算法并不从整体最优考
虑,它所做出的选择只是在某种意义上的
。
7、 许多可以用贪心算法求解的问题一般具有 2 个重要的性质:
性质和
性质。
二、简答题(本题 25 分,每小题 5 分)
五、算法理解题(本题 5 分) 设有 n=2k 个运动员要进行循环赛,
现设计一个满足以下要求的比赛日程表:
①每个选手必须与其他 n-1 名选手比赛各一次; ②每个选手一天至多只能赛一次;
③循环赛要在最短时间内完成。
我去(人1)如也果 就n=2k有,循人环赛!最少为需要U进R行扼几天腕; 入站内信不存在向你偶同意调剖沙 (2)当 n=23=8 时,请画出循环赛日程表。
六、算法设计题(本题 15 分) 分别用贪心算法、动态规划法、回溯法设计 0-1 背包问题。要求:说明所使用的算法
策略;写出算法实现的主要步骤;分析算法的时间。 七、算法设计题(本题 10 分)
建议收藏下载本文,以便随时学习! 通过键盘输入一个高精度的正整数 n(n 的有效位数≤240),去掉其中任意 s 个数字后, 剩下的数字按原左右次序将组成一个新的正整数。编程对给定的 n 和 s,寻找一种方案, 使得剩下的数字组成的新数最小。 【样例输入】 178543 S=4 【样例输出】 13
算法设计与分析复习题目及答案
分治法1、二分搜索算法是利用(分治策略)实现的算法。
9. 实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略)实现的算法。
34.实现合并排序利用的算法是(分治策略)。
实现大整数的乘法是利用的算法(分治策略)。
17.实现棋盘覆盖算法利用的算法是(分治法)。
29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。
不可以使用分治法求解的是(0/1背包问题)。
动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。
下列算法中通常以自底向上的方式求解最优解的是(动态规划法)备忘录方法是那种算法的变形。
(动态规划法)最长公共子序列算法利用的算法是(动态规划法)。
矩阵连乘问题的算法可由(动态规划算法B)设计实现。
实现最大子段和利用的算法是(动态规划法)。
贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。
回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。
剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(分支界限法)的一搜索方式。
分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。
分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。
算法分析与设计试题及答案
算法分析与设计试题及答案一、选择题1. 下列哪个是属于分治算法的例子?A. 冒泡排序B. 归并排序C. 顺序查找D. 选择排序答案:B2. 在排序算法中,时间复杂度最优的是:A. 冒泡排序B. 插入排序C. 归并排序D. 快速排序答案:C3. 哪个不是动态规划的特点?A. 具有重叠子问题B. 通过递归求解C. 需要保存子问题的解D. 具有最优子结构答案:B4. 在图的广度优先搜索算法中,使用的数据结构是:A. 栈B. 队列C. 数组D. 堆栈答案:B5. 在最小生成树算法中,下列哪个不属于贪心策略?A. Kruskal算法B. Prim算法C. Dijkstra算法D. Prim-Kruskal混合算法答案:C二、简答题1. 请简述分治算法的思想和应用场景。
答案:分治算法的思想是将原问题分解成若干个规模较小且类似的子问题,然后解决子问题,最后将子问题的解合并得到原问题的解。
其应用场景包括排序算法(如归并排序、快速排序)、搜索算法(如二分查找)等。
2. 什么是动态规划算法?请给出一个动态规划算法的示例。
答案:动态规划算法是一种通过将问题分解成子问题并解决子问题来解决复杂问题的方法。
它的特点是具有重叠子问题和最优子结构性质。
以斐波那契数列为例,可以使用动态规划算法求解每一项的值,而不需要重复计算。
3. 图的深度优先搜索和广度优先搜索有什么区别?答案:图的深度优先搜索(Depth First Search,DFS)是一种先访问子节点再访问兄弟节点的遍历算法,通常使用递归或者栈实现。
而广度优先搜索(Breadth First Search,BFS)则是以层次遍历的方式展开搜索,使用队列来实现。
DFS更适合用于搜索路径,BFS则适用于寻找最短路径等。
4. 请简述贪心算法的特点及其应用场景。
答案:贪心算法的特点是每一步都采取当前状态下最优的选择,以期望得到全局最优解。
然而,贪心算法并不一定能求解所有问题的最优解,但对于一些特定问题,贪心算法往往能得到近似最优解。
算法设计与分析考试题目及答案
算法设计与分析考试题目及答案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;。
算法分析与设计考试复习题及参考答案
5 2 8 6 3 1 7 4 各边的代价如下: C(1,2)=3, C(1,3)=5 ,C(1,4)=2 C(2,6)=8 ,C(2,7)=4 ,C(3,5)=5 C(4,6)=1
,C(3,6)=4,
C(4,5)=2,
C(5,8)=4, C(6,8)=5 ,C(7,8)=6 2、 写出maxmin算法对下列实例中找最大数和最小数的过程。 数组 A=(48,12,61,3,5,19,32,7) 3、 给出5个数(3,6,9,1,7),M=13,用递归树描述sumofsub算法求 和数=M的一个子集的过程。 4、 快速排序算法对下列实例排序,算法执行过程中,写出数组A 第一次被分割的过程。 A=(65,70,75,80,85,55,50,2) 5、 归并排序算法对下列实例排序,写出算法执行过程。 A=(48,12,61,3,5,19,32,7) 6、 写出图着色问题的回溯算法的判断X[k]是否合理的过程。 7、 对于下图,写出图着色算法得出一种着色方案的过程。 2 3 1 4 8、 写出第7题的状态空间树。 9、 写出归并排序算法对下列实例排序的过程。 (6,2,9,3,5,1,8,7) 10、 写出用背包问题贪心算法解决下列实例的过程。 P=(18,12,4,1) W=(12,10,8,3) M=25 11、有一个有序表为{1,3,9,12,32,41,45,62,75,77, 82,95,100},当使用二分查找值为82的结点时,经过多少次比较后查 找成功并给出过程。 12、使用prim算法构造出如下图G的一棵最小生成树。 1 2 4 3 5
then
xmax←A(i); j←i;endif
repeat end MAX 6.procedure BINSRCH(A,n,x,j) integer low,high,mid,j,n; low←1;high←n while low≤high do mid←|_(low+high)/2_| case :x<A(mid):high←mid-1 :x>A(mid):low←mid+1 :else:j←mid; return endcase repeat j←0 end BINSRCH 三、算法理解 1、写出多段图最短路经动态规划算法求解下列实例的过程,并求出 最优值。
算法设计与分析复习题目及参考答案
算法设计与分析复习题目及参考答案算法设计与分析复习题目及参考答案一。
选择题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 )。
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 )。
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 )。
《算法设计与分析》考试题目及答案
《算法分析与设计》期末复习题一、选择题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)策略,从根结点出发搜索解空间树。
算法题--计算机算法设计与分析期末试题4套(含答案)
(1)用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制(2)算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程(3)算法的三要素1、操作2、控制结构3、数据结构算法具有以下5个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法中每一条指令必须有确切的含义。
不存在二义性。
只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。
输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。
输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。
算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。
效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。
一般这两者与问题的规模有关。
经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。
利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代模型。
在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。
迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。
不能让迭代过程无休止地重复执行下去。
迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。
《算法设计与分析》试卷及答案
《算法设计与分析》试卷及答案算法设计与分析考试复习试卷《算法设计与分析》试卷1一、多项选择题(每空2分,共20分):1、以下关于算法设计问题的叙述中正确的是__________。
A、计算机与数值问题的求解——方程式求根、插值问题、数值积分、函数逼近等有关B、利用计算机无法解决非数值问题C、计算机在解决分类、语言翻译、图形识别、解决高等代数和组合分析等方面的数学问题、定理证明、公式推导乃至日常生活中各种过程的模拟等问题中,主要进行的是判断、比较,而不是算术运算D、算法设计与分析主要研究对象是非数值问题,当然也包含某些数值问题2、算法的特征包括_________。
A、有穷性B、确定性C、输入和输出D、能行性或可行性3、以下描述是有关算法设计的基本步骤:①问题的陈述②算法分析③模型的拟制④算法的实现⑤算法的详细设计⑥文档的编制,应与其它环节交织在一起其中正确的顺序是__________。
A、①②③④⑤⑥B、①③⑤②④⑥C、②④①③⑤⑥D、⑥①③⑤②④4、以下说法正确的是__________。
A、数学归纳法可以证明算法终止性B、良序原则是证明算法的正确性的有力工具C、x = 小于或等于x的最大整数(x的低限)D、x = 小于或等于x的最大整数(x的高限)5、汉诺塔(Hanoi)问题中令h(n)为从A移动n个金片到C 上所用的次数,则递归方程为__________,其初始条件为__________,将n个金片从A柱移到C柱上的移动次数是__________;设菲波那契(Fibonacci)数列中Fn为第n个月时兔子的对数,则有递归方程为__________,其中F1=F2=__________。
A、Fn=Fn-1+Fn-2B、h(n)= 2h(n-1)+1C、1D、h(1)= 1E、h(n)=2n-1F、06、在一个有向连通图中(如下图所示),找出点A到点B的一条最短路为____ ______。
A、最短路:1→3→5→8→10,耗费:20B、最短路:1→4→6→9→10,耗费:16。
算法分析与设计考试复习题及参考答案.doc
一、简要回答下列问题: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、MERGESORT(low,high)if low<high;then mid←(low,high)/2;MERGESORT(low,mid);MERGESORT(mid+1,high);MERGE(low,mid,high);endifend MERGESORT2、procedure S1(P,W,M,X,n)i←1; a←0while i≤ n doif W(i)>M then return endifa←a+ii←i+1 ;repeatend3.procedure PARTITION(m,p)Integer m,p,i;global A(m:p-1)v←A(m);i←mlooploop i←i+1 until A(i) ≥v repeatloop p←p-1 until A(p) ≤v repeatif i<pthen call INTERCHANGE(A(i),A(p))else exitendifrepeatA(m) ←A(p);A(p) ←vEnd PARTITION4.procedure F1(n)if n<2 then return(1)else return(F2(2,n,1,1))endifend F1procedure F2(i,n,x,y)if i≤nthen call F2(i+1,n,y,x+y)endifreturn(y)end F25.procedure MAX(A,n,j)xmax←A(1);j←1for i←2 to n doif A(i)>xmax then xmax←A(i); j←i;endif repeatend MAX6.procedure BINSRCH(A,n,x,j)integer low,high,mid,j,n;low←1;high←nwhile low≤high domid←|_(low+high)/2_|case:x<A(mid):high←mid-1:x>A(mid):low←mid+1:else:j←mid; returnendcaserepeatj←0end BINSRCH三、算法理解1、写出多段图最短路经动态规划算法求解下列实例的过程,并求出最优值。
算法设计与分析复习题目及答案(汇编)
选择题 1、 二分搜索算法是利用( )实现的算法。
A 、 分治策略 B 、动态规划法 C 、贪心法 D 、回溯法 2、 列不是动态规划算法基本步骤的是()。
A 、 找出最优解的性质 B 、构造最优解 C 、算出最优解 D 、定义最 优解 3、 最大效益优先是(的一搜索方式。
A 、 分支界限法 B 、动态规划法C 、贪心法D 、回溯法 4、 在下列算法中有时找不到问题解的是( )。
A 、 B 、拉斯维加斯算法 C 、舍伍德算法 D 、数值 概率算法 5. 回溯法解旅行售货员问题时的解空间树是( A 、 子集树 B 、排列树 C 、深度优先生成树 D 、 广度优先生成树 6. 列算法中通常以自底向上的方式求解最优解的是( )。
A 、 备忘录法 B 、动态规划法 C 、贪心法 D 、 回溯法 7、 衡量一个算法好坏的标准是( C )。
A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 8、以下不可以使用分治法求解的是( D )。
A 棋盘覆盖问题B 选择问题C 归并排序D 0/1 背包问题 9. 实现循环赛日程表利用的算法是( A 、分治策略 B 、动态规划法 C 、贪心法 D 、 回溯法 10、下列随机算法中运行时有时候成功有时候失败的是( C ) A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法11.下面不是分支界限法搜索方式的是( )。
A 、 广度优先B 、最小耗费优先C 、最大效益优先D 、 深度优先12 .下列算法中通常以深度优先方式系统搜索问题解的是 D )。
A 、 备忘录法B 、动态规划法C 、贪心法D 、回溯法13. 备忘录方法是那种算法的变形。
( B )25. 矩阵连乘问题的算法可由(B )设计实现A 、分治法B 、动态规划法C 、贪心法D 、回溯法14.哈弗曼编码的贪心算法所需的计算时间为( B )。
A 、O (n2n)B 、O (nlogn )C 、O (2n)D 、O (n )15.分支限界法解最大团问题时, 活结点表的组织形式是 ( B )20. 下面哪种函数是回溯法中为避免无效搜索采取的策略( B ) A .递归函数B. 剪枝函数C 。
算法设计与分析复习题目及答案
分治法1、二分搜索算法是利用分治策略实现的算法;9. 实现循环赛日程表利用的算法是分治策略27、Strassen矩阵乘法是利用分治策略实现的算法;34.实现合并排序利用的算法是分治策略 ;实现大整数的乘法是利用的算法分治策略 ;17.实现棋盘覆盖算法利用的算法是分治法 ;29、使用分治法求解不需要满足的条件是子问题必须是一样的 ;不可以使用分治法求解的是0/1背包问题 ;动态规划下列不是动态规划算法基本步骤的是构造最优解下列是动态规划算法基本要素的是子问题重叠性质 ;下列算法中通常以自底向上的方式求解最优解的是动态规划法备忘录方法是那种算法的变形; 动态规划法最长公共子序列算法利用的算法是动态规划法 ;矩阵连乘问题的算法可由动态规划算法B设计实现;实现最大子段和利用的算法是动态规划法 ;贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是贪心选择性质和最优子结构性质;回溯法回溯法解旅行售货员问题时的解空间树是排列树 ;剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素确定解空间的时间分支限界法最大效益优先是分支界限法的一搜索方式;分支限界法解最大团问题时,活结点表的组织形式是最大堆 ;分支限界法解旅行售货员问题时,活结点表的组织形式是最小堆优先队列式分支限界法选取扩展结点的原则是结点的优先级在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是分支限界法.从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除栈式分支限界法之外都是最常见的方式.1队列式FIFO分支限界法:按照队列先进先出FIFO原则选取下一个节点为扩展节点;2优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点;最优子结构性质是贪心算法与动态规划算法的共同点;贪心算法与动态规划算法的主要区别是贪心选择性质 ;回溯算法和分支限界法的问题的解空间树不会是无序树.14.哈弗曼编码的贪心算法所需的计算时间为 B ;A、On2nB、OnlognC、O2nD、On21、下面关于NP问题说法正确的是BA NP问题都是不可能解决的问题B P类问题包含在NP类问题中C NP完全问题是P类问题的子集D NP类问题包含在P类问题中40、背包问题的贪心算法所需的计算时间为 BA、On2nB、OnlognC、O2nD、On42.0-1背包问题的回溯算法所需的计算时间为 AA、On2nB、OnlognC、O2nD、On.47.背包问题的贪心算法所需的计算时间为 B ;A、On2nB、OnlognC、O2nD、On53.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为 B ;A、On2nB、OnlognC、O2nD、On56、算法是由若干条指令组成的有穷序列,而且满足以下性质D(1)输入:有0个或多个输入(2)输出:至少有一个输出(3)确定性:指令清晰,无歧义(4)有限性:指令执行次数有限,而且执行时间有限A 123 B124 C134 D 1 23457、函数32n+10nlog n的渐进表达式是 B .A. 2nB. 32nC. nlog nD. 10nlog n59、用动态规划算法解决最大字段和问题,其时间复杂性为B .A.lognB.nC.n2D.nlogn61、设fN,gN是定义在正数集上的正函数,如果存在正的常数C和自然数N0,使得当N≥N0时有fN≤CgN,则称函数fN当N充分大时有下界gN,记作fN∈○gN,即fN的阶 A gN的阶.A.不高于B.不低于C.等价于D.逼近二、填空题2、程序是算法用某种程序设计语言的具体实现;3、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的;6、算法是指解决问题的一种方法或一个过程 ;7、从分治法的一般设计模式可以看出,用它设计出的程序一般是递归算法 ;11、计算一个算法时间复杂度通常可以计算循环次数、基本操作的频率或计算步;14、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是动态规划 ,需要排序的是回溯法 ,分支限界法 ;15、使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是 0/1背包问题 ,只使用约束条件进行裁剪的是 N皇后问题 ;30.回溯法是一种既带有系统性又带有跳跃性的搜索算法;33.回溯法搜索解空间树时,常用的两种剪枝函数为约束函数和限界函数 ;34.任何可用计算机求解的问题所需的时间都与其规模有关;35.快速排序算法的性能取决于划分的对称性 ;36. Prim算法利用贪心策略求解最小生成树问题,其时间复杂度是On2;37. 图的m着色问题可用回溯法求解,其解空间树中叶子结点个数是m n,解空间树中每个内结点的孩子数是m ;4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X和Y的一个最长公共子序列 {BABCD}或{CABCD}或{CADCD};5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个最优解8.0-1背包问题的回溯算法所需的计算时间为__on2n__,用动态规划算法所需的计算时间为___omin{nc,2n}_;二、综合题50分1.写出设计动态规划算法的主要步骤;①问题具有最优子结构性质;②构造最优值的递归关系表达式;3最优值的算法描述;④构造最优解;2.流水作业调度问题的johnson算法的思想;①令N1={i|ai<bi},N2={i|ai>=bi};②将N1中作业按ai的非减序排序得到N1’,将N 2中作业按bi的非增序排序得到N2’;③N1’中作业接N2’中作业就构成了满足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个作业的最优调度方案,并计算最优值;步骤为:N1={1,3},N2={2,4};N 1’={1,3}, N2’={4,2};最优值为:384.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间从根出发,左1右0,并画出其解空间树,计算其最优值及最优解;解空间为{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,05.设S={X1,X2,···,Xn}是严格递增的有序集,利用二叉树的结点来存储S中的元素,在表示S的二叉搜索树中搜索一个元素X,返回的结果有两种情形,1在二叉搜索树的内结点中找到X=Xi ,其概率为bi;2在二叉搜索树的叶结点中确定X∈X i ,Xi+1,其概率为ai;在表示S的二叉搜索树T中,设存储元素Xi的结点深度为Ci;叶结点Xi ,Xi+1的结点深度为di,则二叉搜索树T的平均路长p为多少假设二叉搜索树Tij={Xi ,Xi+1,···,Xj}最优值为mij,Wij= ai-1+bi+···+bj+aj,则mij1<=i<=j<=n递归关系表达式为什么二叉树T的平均路长P=∑=+ni1Ci)(1*bi+∑=nj0dj*aj{mij=0 i>j6.描述0-1背包问题;已知一个背包的容量为C,有n件物品,物品i的重量为Wi ,价值为Vi,求应如何选mij=Wij+min{mik+mk+1j} 1<=i<=j<=n,mii-1=0择装入背包中的物品,使得装入背包中物品的总价值最大;三、简答题30分1.流水作业调度中,已知有n个作业,机器M1和M2上加工作业i所需的时间分别为ai 和bi,请写出流水作业调度问题的johnson法则中对ai和bi的排序算法;函数名可写为sorts,n2.最优二叉搜索树问题的动态规划算法设函数名binarysearchtree 1.void sortflowjope s,int n{int i,k,j,l;fori=1;i<=n-1;i++//-----选择排序{k=i;whilek<=n&&sk.tag=0 k++;ifk>n break;//-----没有a i,跳出else{forj=k+1;j<=n;j++ifsj.tag==0ifsk.a>sj.a k=j;swapsi.index,sk.index;swapsi.tag,sk.tag; }}l=i;//-----记下当前第一个b i的下标fori=l;i<=n-1;i++{k=i;forj=k+1;j<=n;j++ifsk.b<sj.b k=j;swapsi.index,sk.index; //-----只移动index和tagswapsi.tag,sk.tag; }}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++//----l是下标j-i的差fori=1;i<=n-l;i++{ j=i+l;wij=wij-1+aj+bj;mij=mii-1+mi+1j+wij;sij=i;fork=i+1;k<=j;k++{ t=mik-1+mk+1j+wij;ift<mij{ mij=t;sij=k;}}}}一、填空题本题15分,每小题1分1、算法就是一组有穷的规则 ,它们规定了解决某一特定类型问题的一系列运算2、在进行问题的计算复杂性分析之前,首先必须建立求解问题所用的计算模型;3个基本计算模型是随机存取机RAM 、随机存取存储程序机RASP 、图灵机 ;3、算法的复杂性是算法效率的度量,是评价算法优劣的重要依据;4、计算机的资源最重要的是时间和空间资源5、fn= 6×2n+n2,fn的渐进性态fn= O 2^n6、贪心算法总是做出在当前看来最好的选择;也就是说贪心算法并不从整体最优考虑,它所做出的选择只是在某种意义上的局部最优结构二、简答题本题25分,每小题5分1、简单描述分治法的基本思想;2、简述动态规划方法所运用的最优化原理;3、何谓最优子结构性质4、简单描述回溯法基本思想;5、何谓P、NP、NPC问题三、算法填空本题20分,每小题5分1、n后问题回溯算法1用二维数组ANN存储皇后位置,若第i行第j列放有皇后,则Aij为非0值,否则值为0;2分别用一维数组MN、L2N-1、R2N-1表示竖列、左斜线、右斜线是否放有棋子,有则值为1,否则值为0;forj=0;j<N;j++if 1 /安全检查/{ Aij=i+1; /放皇后/2 ;ifi==N-1 输出结果;else 3 ;; /试探下一行/4 ; /去皇后/5 ;;}2、数塔问题;有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一起走到底层,要求找出一条路径,使路径上的值最大;forr=n-2;r>=0;r-- //自底向上递归计算forc=0; 1 ;c++if tr+1c>tr+1c+1 2 ;else 3 ;3、Hanoi算法Hanoin,a,b,cif n==1 1 ;else{ 2 ;3 ;Hanoin-1,b, a, c;}4、Dijkstra算法求单源最短路径du:s到u的距离 pu:记录前一节点信息Init-single-sourceG,sfor each vertex v∈VGdo { dv=∞; 1 }ds=0Relaxu,v,wif dv>du+wu,vthen { dv=du+wu,v;2}dijkstraG,w,s1. Init-single-sourceG,s2. S=Φ3. Q=VG4.while Q<> Φ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二、简答题本题25分,每小题5分6、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同;对这k个子问题分别求解;如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止;将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解;7、“最优化原理”用数学化的语言来描述:假设为了解决某一优化问题,需要依次作出n个决策D1,D2,…,Dn,如若这个决策序列是最优的,对于任何一个整数k,1 < k < n,不论前面k个决策是怎样的,以后的最优决策只取决于由前面决策所确定的当前状态,即以后的决策Dk+1,Dk+2,…,Dn也是最优的;8、某个问题的最优解包含着其子问题的最优解;这种性质称为最优子结构性质;9、回溯法的基本思想是在一棵含有问题全部可能解的状态空间树上进行深度优先搜索,解为叶子结点;搜索过程中,每到达一个结点时,则判断该结点为根的子树是否含有问题的解,如果可以确定该子树中不含有问题的解,则放弃对该子树的搜索,退回到上层父结点,继续下一步深度优先搜索过程;在回溯法中,并不是先构造出整棵状态空间树,再进行搜索,而是在搜索过程,逐步构造出状态空间树,即边搜索,边构造;10、PPolynomial问题:也即是多项式复杂程度的问题;NP就是Non-deterministic Polynomial的问题,也即是多项式复杂程度的非确定性问题;NPCNP Complete问题,这种问题只有把解域里面的所有可能都穷举了之后才能得出答案,这样的问题是NP 里面最难的问题,这种问题就是NPC 问题; 三、算法填空本题20分,每小题5分 1、n 后问题回溯算法 1 Mj&&Li+j&&Ri-j+N 2 Mj=Li+j=Ri-j+N=1; 3 tryi+1,M,L,R,A 4 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,然后,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包;若将这种物品全部装入背包后,背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 46 5 87 2 1 4 37 8 5 6 3 4 1 28 7 6 5 4 3 2 1包内的物品总重量未超过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;for 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 :当前最优值i i i i w j w j j i m v w j i m j i m j i m <≤≥⎩⎨⎧++-++=0),1(}),1(),,1(max{),(nn nw j w j v j n m <≤≥⎩⎨⎧=00),(void backtrack 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.背包问题的贪心算法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.最大子段和: 动态规划算法int MaxSumint n, int a{int sum=0, b=0; //sum存储当前最大的bj, b存储bjforint j=1; j<=n; j++ {if b>0 b+= aj ;else b=ai; ; //一旦某个区段和为负,则从下一个位置累和 ifb>sum sum=b;}return sum;}3.快速排序template<class Type>void QuickSort Type a, int p, int r{if p<r {int q=Partitiona,p,r;QuickSort a,p,q-1; //对左半段排序QuickSort a,q+1,r; //对右半段排序}}4.排列问题Template <class Type>void permType list, int k, int m{ //产生listk:m的所有排列ifk==m{ //只剩下一个元素for int i=0;i<=m;i++ cout<<listi;cout<<endl;}else //还有多个元素待排列,递归产生排列for int i=k; i<=m; i++{swaplistk,listi;permlist,k+1;m;swaplistk,listi;}}5.给定已按升序排好序的n个元素a0:n-1,现要在这n个元素中找出一特定元素x;据此容易设计出二分搜索算法:template<class Type>int BinarySearchType a, const Type& x, int l, int r{while l<=r {int m = l+r/2;if x == am return m;if x < am r = m-1; else l = m+1;}return -1;}6、合并排序描述如下:template<class Type>void MergesortType a , int left, int right{if left<right{int i= left+right/2;Mergesorta, left, i ;Mergesorta, i+1, right;Mergea,b, left,i,right;//合并到数组bCopya,b, left,right ; //复制到数组a}}7、以下是计算x m的值的过程int power x, m{//计算x m的值并返回;y= 1 ;i=m;Whilei- - >0y=yx;return y ;}四、问答题1.用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制2. 算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程3.算法的三要素1、操作2、控制结构3、数据结构13. 分治法与动态规划法的相同点是:将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解;两者的不同点是:适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的;而用分治法求解的问题,经分解得到的子问题往往是互相独立的;回溯法中常见的两类典型的解空间树是子集树和排列树;22.请叙述动态规划算法与贪心算法的异同;共同点:都需要最优子结构性质,都用来求有优化问题;不同点:动态规划:每一步作一个选择—依赖于子问题的解;贪心方法:每一步作一个选择—不依赖于子问题的解;动态规划方法的条件:子问题的重叠性质;可用贪心方法的条件:最优子结构性质;贪心选择性质;动态规划:自底向上求解;贪心方法:自顶向下求解;可用贪心法时,动态规划方法可能不适用;可用动态规划方法时,贪心法可能不适用; 23. 请说明动态规划方法为什么需要最优子结构性质;答:最优子结构性质是指大问题的最优解包含子问题的最优解;动态规划方法是自底向上计算各个子问题的最优解,即先计算子问题的最优解,然后再利用子问题的最优解构造大问题的最优解,因此需要最优子结构.24. 请说明:1优先队列可用什么数据结构实现2优先队列插入算法基本思想3优先队列插入算法时间复杂度答:1堆;2在小根堆中,将元素x插入到堆的末尾,然后将元素x 的关键字与其双亲的关键字比较, 若元素x 的关键字小于其双亲的关键字,则将元素x 与其双亲交换,然后再将元素x 与其新双亲的关键字相比,直到元素x 的关键字大于双亲的关键字,或元素x 到根为止; 3O log n26. 在算法复杂性分析中,O 、Ω、Θ这三个记号的意义是什么 在忽略常数因子的情况下,O 、Ω、Θ分别提供了算法运行时间的什么界 答:如果存在两个正常数c 和N 0,对于所有的N ≥N 0,有|fN |≤C |gN |,则记作:fN = OgN ;这时我们说fN 的阶不高于gN 的阶;若存在两个正常数C 和自然数N0,使得当N ≥ N 0时有|f N|≥C |gN |,记为fN =ΩgN ;这时我们说fN 的阶不低于gN 的阶;如果存在正常数c1,c2和n0,对于所有的n ≥n0,有c1|gN| ≤|fN| ≤ c2|gN| 则记作 fN = g ,NO 、Ω、Θ分别提供了算法运行时间的上界、下界、平均 五、算法设计与分析题1.用动态规划策略求解最长公共子序列问题: 1给出计算最优值的递归方程;2给定两个序列X={B,C,D,A},Y={A,B,C,B},请采用动态规划策略求出其最长公共子序列,要求给出过程;答:1⎪⎩⎪⎨⎧≠>--=>+--===时y 0且x j 当i,)j]1,c[i 1],j max(c[i,时y 0且x j 当i,11]j 1,c[i 0时0或j 当i 0j]c[i,i i i i2Y A B C B X 0 0 0 0 B 0 0 1 1 1ΘC 0 0 1 2 2 D 0 0 1 2 2A0 1 1 2 2 最长公共子序列:{BC}2.对下列各组函数f n 和g n,确定f n = O g n 或f n =Ωg n 或fn =θgn,并简要说明理由;1 fn=2n ; gn=n2 fn=n ; g n=log n 23 fn=100; gn=log1004 fn=n 3; gn= 3n5 fn=3n ; gn=2n 答:(1) fn = Ogn 因为gn 的阶比fn 的阶高; (2) fn = Ωgn 因为gn 的阶比fn 的阶低; (3) fn = θgn 因为gn 与fn 同阶; (4) fn = Ogn 因为gn 的阶比fn 的阶高; (5) fn = Ωgn 因为gn 的阶比fn 的阶低;3.对下图所示的连通网络G ,用克鲁斯卡尔Kruskal 算法求G 的最小生成树T ,请写出在算法执行过程中,依次加入T 的边集TE 中的边;说明该算法的贪心策略和算法的基本思想,并简要分析算法的时间复杂度;答:TE={3,4, 2,3,1,5,4,64,5}贪心策略是每次都在连接两个不同连通分量的边中选权值最小的边; 基本思想:首先将图中所有顶点都放到生成树中,然后每次都在连接两个不同连通分量的边中选权值最小的边,将其放入生成树中,直到生成树中有n-1条边;时间复杂度为:Oeloge4. 请用分治策略设计递归的归并排序算法,并分析其时间复杂性要求:分别给出divide 、conquer 、combine 这三个阶段所花的时间,并在此基础上列出递归方程,最后用套用公式法求出其解的渐进阶; 答 : Template <class Type>void MergeSort Type a , int left, int right { if left<right { int i=left+right/2; MergeSorta, left, i; MergeSorta, i+1, right; Mergea, b, left, right; Copya, b, left, right; }}Divide 阶段的时间复杂性: O1 Conquer 阶段的时间复杂性: 2Tn Combine 阶段的时间复杂性: Θn用套用公式法:a=2, b=2, n log b a = n , fn=n, 因为fn 与n log b a 同阶, ∴Tn =Θnlogn⎩⎨⎧>+==1当n θ(n)2T(n/2)1当n θ(1)T(n)1 2 3 4 5 6 75、设有n=2k个运动员要进行循环赛,现设计一个满足以下要求的比赛日程表:每个选手必须与其他n-1名选手比赛各一次;每个选手一天至多只能赛一次;循环赛要在最短时间内完成.14分循环赛最少需要进行n-1 天.26分当n=23=8时,请画出循环赛日程表:6、考虑用哈夫曼算法来找字符a,b,c,d,e,f 的最优编码;这些字符出现在文件中的频数之比为20:10:6:4:44:16;要求:14 分简述使用哈夫曼算法构造最优编码的基本步骤;25 分构造对应的哈夫曼树,并据此给出a,b,c,d,e,f 的一种最优编码;解:1、哈夫曼算法是构造最优编码树的贪心算法;其基本思想是,首先所有字符对应n 棵树构成的森林,每棵树只有一个结点,根权为对应字符的频率;然后,重复下列过程n-1 次:将森林中的根权最小的两棵树进行合并产生一个新树,该新树根的两个子树分别是参与合并的两棵子树,根权为两个子树根权之和;2、根据题中数据构造哈夫曼树如下图所示;由此可以得出a,b,c,d,e,f 的一组最优的编码:01,0000,00010,00011, 1,001;7.考虑在序列A1..n中找最大最小元素的问题;一个分治算法描述如下:如果n≤2 就直接求解;否则,将序列等分成两个子序列A1..n/2和An/2+1..n,分别找出这两子序列的最大最小元素x1,y1 和x2,y2;然后据此求出A1..n的最大元素x=max{x1,x2}及最小元素y=min{y1,y2};请给出该算法计算时间Tn满足的递归方程,并解方程来确定算法的时间复杂度;假定n=2k k 为正整数;答:算法时间复杂度满足如下递归方程:Tn=2Tn/2+2n>2;T2=1;因为n=2 k k 为正整数,所以,Tn= T2 k= 2T2 k-1+2= 22T2 k-2+ 22+2⋯= 2k-1T2+ 2k-2+⋯+23+22+2= 2k-1+⋯+23+22+2;因此,Tn= n;8.考虑使用动态规划方法求解下列问题:01背包数据如下表,求:能够放入背包的最有价值的物品集合;如设: Vi, j —— 前 i 个物品中能够装入承重量 j 的背包中的最大总价值;请将如下递推式填写完整: V0, j = 00个物品,Vi, 0 = 0承重量0Vi, j = Vi-1, j 第 i 个物品不能装入, j < wi 超重Vi, j = max { , } j > wi 不超重 i 在最优子集中 i 不在最优子集中 自底向上:按行或列填写下表;答:V0, j = 00个物品,Vi, 0 = 0承重量0Vi, j = Vi-1, j 第 i 个物品不能装入, j < wi 超重Vi, j = max { v i + Vi-1,j-w j , Vi-1, j } j > wi 不超重 i 在最优子集中 i 不在最优子集中V j=0 1 2 3 4 5i=0 0 0 0 0 0 01 0 0 12 12 12 122 0 10 12 22 22 223 0 10 12 22 30 324 0 10 15 25 30 379.请画出用回溯法解4皇后问题的解空间树和搜索空间树:解空间树:用回溯法的搜索空间树:10.考虑用分支限界解0-1背包问题给定n 种物品和一背包;物品i 的重量是wi,其价值为vi,背包的容量为C;问应如何选择装入背包的物品,使得装入背包中物品的总价值最大示例:n=3, C=30, w={16, 15, 15}, v={45, 25, 25} 求:1、问题的解空间树2、约束条件 2、如何剪枝解:问题的解空间树:11c xw ni ii ≤∑=约束条件: 如何剪枝 :设r 是当前尚未考虑的剩余物品价值总和;Cv 是当前价值;bestv 是当前最优价值;当r +Cv ≤bestv 时,可剪去右子树;11,请画出用回溯法解n=3的0-1背包问题的解空间树和当三个物品的重量为{20, 15, 10},价值为{20, 30, 25},背包容量为25时搜索空间树; 答:解空间树:搜索空间树:1111111123457 8 1112 14 15310691不可行解价值=20价值=55价值=30价值=25价值=011 110 0 01128 1112 14 15 131069。
算法设计与分析复习题目及答案
算法设计与分析复习题目及答案一、算法的基本概念1、什么是算法?算法是指解决特定问题的一系列明确步骤,它具有确定性、可行性、有穷性、输入和输出等特性。
例如,计算两个数的最大公约数的欧几里得算法,就是通过反复用较小数去除较大数,然后将余数作为新的较小数,直到余数为 0,此时的除数就是最大公约数。
2、算法的复杂度包括哪些?它们的含义是什么?算法的复杂度主要包括时间复杂度和空间复杂度。
时间复杂度是指算法执行所需要的时间量,通常用大 O 记号来表示。
例如,一个算法的时间复杂度为 O(n),表示其执行时间与输入规模 n成正比。
空间复杂度则是算法在运行过程中所需要的额外存储空间的大小。
比如说,一个算法需要创建一个大小为 n 的数组来存储数据,那么其空间复杂度就是 O(n)。
二、分治法1、分治法的基本思想是什么?分治法的基本思想是将一个规模为 n 的问题分解为 k 个规模较小的子问题,这些子问题相互独立且与原问题结构相同。
然后分别求解这些子问题,最后将子问题的解合并得到原问题的解。
2、请举例说明分治法的应用。
例如归并排序算法。
将一个未排序的数组分成两半,对每一半分别进行排序,然后将排好序的两部分合并起来。
其时间复杂度为 O(nlogn),空间复杂度为 O(n)。
三、动态规划1、动态规划的基本步骤有哪些?动态规划的基本步骤包括:(1)定义问题的状态。
(2)找出状态转移方程。
(3)确定初始状态。
(4)计算最终的解。
2、解释最长公共子序列问题,并给出其动态规划解法。
最长公共子序列问题是指找出两个序列的最长公共子序列的长度。
假设我们有两个序列 X 和 Y,用 dpij 表示 X 的前 i 个字符和 Y 的前 j 个字符的最长公共子序列长度。
状态转移方程为:如果 Xi 1 == Yj 1,则 dpij = dpi 1j 1 + 1否则 dpij = max(dpi 1j, dpij 1)四、贪心算法1、贪心算法的特点是什么?贪心算法在每一步都做出当前看起来最优的选择,希望通过这种局部最优选择达到全局最优解。
《算法设计与分析》考试题目及答案(DOC)
构。 10.用回溯法解 0/1 背包问题时,计算结点的上界的函数如下所示,请在空
格中填入合适的内容:
Typep Knap<Typew, Typep>::Bound(int i) {// 计算上界
return true; }
13. 旅行售货员问题的解空间树是(排列树)。
三、 证明题
1. 一个分治法将规模为 n 的问题分成 k 个规模为 n/m 的子问题去解。设分
解阀值 n0=1,且 adhoc 解规模为 1 的问题耗费 1 个单位时间。再设将原问
题分解为 k 个子问题以及用 merge 将 k 个子问题的解合并为原问题的解需用
12. 用回溯法解图} 的 m 着色问题时,使用下面的函数 OK 检查当前扩展结点的
每一个儿子所相应的颜色的可用性,则需耗时(渐进时间上限)(O(mn))。
Bool Color::OK(int k) {//
for(int j=1;j<=n;j++) if((a[k][j]= =1)&&(x[j]= =x[k])) return false;
Typew cleft = c - cw; // 剩余容量
Typep b = cp;
// 结点的上界
// 以物品单位重量价值递减序装入物品
while (i <= n && w[i] <= cleft) {
cleft -= w[i];
b += p[i];
i++;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分治法1、二分搜索算法是利用(分治策略)实现的算法。
9. 实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略)实现的算法。
34.实现合并排序利用的算法是(分治策略)。
实现大整数的乘法是利用的算法(分治策略)。
17.实现棋盘覆盖算法利用的算法是(分治法)。
29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。
不可以使用分治法求解的是(0/1背包问题)。
动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。
下列算法中通常以自底向上的方式求解最优解的是(动态规划法)备忘录方法是那种算法的变形。
(动态规划法)最长公共子序列算法利用的算法是(动态规划法)。
矩阵连乘问题的算法可由(动态规划算法B)设计实现。
实现最大子段和利用的算法是(动态规划法)。
贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。
回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。
剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(分支界限法)的一搜索方式。
分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。
分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。
(最优子结构性质)是贪心算法与动态规划算法的共同点。
贪心算法与动态规划算法的主要区别是(贪心选择性质)。
回溯算法和分支限界法的问题的解空间树不会是( 无序树).14.哈弗曼编码的贪心算法所需的计算时间为( B )。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)21、下面关于NP问题说法正确的是(B )A NP问题都是不可能解决的问题B P类问题包含在NP类问题中C NP完全问题是P类问题的子集D NP类问题包含在P类问题中40、背包问题的贪心算法所需的计算时间为( B )A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)42.0-1背包问题的回溯算法所需的计算时间为( A )A、O(n2n)B、O(nlogn)C、O(2n)D、O(n).47.背包问题的贪心算法所需的计算时间为( B )。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)53.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为 ( B ) 。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)56、算法是由若干条指令组成的有穷序列,而且满足以下性质(D )(1)输入:有0个或多个输入(2)输出:至少有一个输出(3)确定性:指令清晰,无歧义(4)有限性:指令执行次数有限,而且执行时间有限A (1)(2)(3) B(1)(2)(4) C(1)(3)(4) D (1) (2)(3)(4)57、函数32n+10nlog n的渐进表达式是( B ).A. 2nB. 32nC. nlog nD. 10nlog n59、用动态规划算法解决最大字段和问题,其时间复杂性为( B ).A.lognB.nC.n2D.nlogn61、设f(N),g(N)是定义在正数集上的正函数,如果存在正的常数C和自然数N0,使得当N≥N0时有f(N)≤Cg(N),则称函数f(N)当N充分大时有下界g(N),记作f(N)∈○(g(N)),即f(N)的阶( A )g(N)的阶.A.不高于B.不低于C.等价于D.逼近二、填空题2、程序是算法用某种程序设计语言的具体实现。
3、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。
6、算法是指解决问题的一种方法或一个过程。
7、从分治法的一般设计模式可以看出,用它设计出的程序一般是递归算法。
11、计算一个算法时间复杂度通常可以计算循环次数、基本操作的频率或计算步。
14、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是动态规划,需要排序的是回溯法,分支限界法。
15、使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是 0/1背包问题,只使用约束条件进行裁剪的是 N皇后问题。
30.回溯法是一种既带有系统性又带有跳跃性的搜索算法。
33.回溯法搜索解空间树时,常用的两种剪枝函数为约束函数和限界函数。
34.任何可用计算机求解的问题所需的时间都与其规模有关。
35.快速排序算法的性能取决于划分的对称性。
36.Prim算法利用贪心策略求解最小生成树问题,其时间复杂度是O(n2) 。
37. 图的m着色问题可用回溯法求解,其解空间树中叶子结点个数是m n,解空间树中每个内结点的孩子数是m 。
4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X和Y的一个最长公共子序列 {BABCD}或{CABCD}或{CADCD}。
5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解8.0-1背包问题的回溯算法所需的计算时间为__o(n*2n)__,用动态规划算法所需的计算时间为___o(min{nc,2n}_。
二、综合题(50分)1.写出设计动态规划算法的主要步骤。
①问题具有最优子结构性质;②构造最优值的递归关系表达式;3最优值的算法描述;④构造最优解;2.流水作业调度问题的johnson算法的思想。
①令N1={i|ai<bi},N2={i|ai>=bi};②将N1中作业按ai的非减序排序得到N1’,将N 2中作业按bi的非增序排序得到N2’;③N1’中作业接N2’中作业就构成了满足Johnson法则的最优调度。
3.若n=4,在机器M1和M2上加工作业i所需的时间分别为ai 和bi,且(a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。
步骤为:N1={1,3},N2={2,4};N 1’={1,3}, N2’={4,2};最优值为:384.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。
解空间为{(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.设S={X1,X2,···,Xn}是严格递增的有序集,利用二叉树的结点来存储S中的元素,在表示S的二叉搜索树中搜索一个元素X,返回的结果有两种情形,(1)在二叉搜索树的内结点中找到X=Xi ,其概率为bi。
(2)在二叉搜索树的叶结点中确定X∈(Xi ,Xi+1),其概率为ai。
在表示S的二叉搜索树T中,设存储元素Xi的结点深度为Ci ;叶结点(Xi,Xi+1)的结点深度为di,则二叉搜索树T的平均路长p为多少?假设二叉搜索树T[i][j]={Xi ,Xi+1,···,Xj}最优值为m[i][j],W[i][j]= ai-1+bi+···+bj+aj,则m[i][j](1<=i<=j<=n)递归关系表达式为什么?二叉树T的平均路长P=∑=+ni1Ci)(1*bi+∑=nj0dj*aj{m[i][j]=0 (i>j) 6.描述0-1背包问题。
已知一个背包的容量为C,有n件物品,物品i的重量为Wi ,价值为Vi,求应如m[i][j]=W[i][j]+min{m[i][k]+m[k+1][j]} (1<=i<=j<=n,m[i][i-1]=0)何选择装入背包中的物品,使得装入背包中物品的总价值最大。
三、简答题(30分)1.流水作业调度中,已知有n个作业,机器M1和M2上加工作业i所需的时间分别为ai 和bi,请写出流水作业调度问题的johnson法则中对ai和bi的排序算法。
(函数名可写为sort(s,n))2.最优二叉搜索树问题的动态规划算法(设函数名binarysearchtree))1.void sort(flowjope s[],int n){int i,k,j,l;for(i=1;i<=n-1;i++)//-----选择排序{k=i;while(k<=n&&s[k].tag!=0) k++;if(k>n) break;//-----没有a i,跳出else{for(j=k+1;j<=n;j++)if(s[j].tag==0)if(s[k].a>s[j].a) k=j;swap(s[i].index,s[k].index);swap(s[i].tag,s[k].tag); }}l=i;//-----记下当前第一个b i的下标for(i=l;i<=n-1;i++){k=i;for(j=k+1;j<=n;j++)if(s[k].b<s[j].b) k=j;swap(s[i].index,s[k].index); //-----只移动index和tagswap(s[i].tag,s[k].tag); }}2.void binarysearchtree(int a[],int b[],int n,int **m,int **s,int **w){int i,j,k,t,l;for(i=1;i<=n+1;i++){ w[i][i-1]=a[i-1];m[i][i-1]=0;}for(l=0;l<=n-1;l++)//----l是下标j-i的差for(i=1;i<=n-l;i++){ j=i+l;w[i][j]=w[i][j-1]+a[j]+b[j];m[i][j]=m[i][i-1]+m[i+1][j]+w[i][j];s[i][j]=i;for(k=i+1;k<=j;k++){ t=m[i][k-1]+m[k+1][j]+w[i][j];if(t<m[i][j]){ m[i][j]=t;s[i][j]=k;}}}}一、填空题(本题15分,每小题1分)1、算法就是一组有穷的规则,它们规定了解决某一特定类型问题的一系列运算2、在进行问题的计算复杂性分析之前,首先必须建立求解问题所用的计算模型。