算法练习题-分章节-带答案.doc_第1页
算法练习题-分章节-带答案.doc_第2页
算法练习题-分章节-带答案.doc_第3页
算法练习题-分章节-带答案.doc_第4页
算法练习题-分章节-带答案.doc_第5页
免费预览已结束,剩余11页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

算法练习题-算法概述一、选择题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、A和C6、算法分析中,记号O表示( ), 记号表示( )。A.渐进下界 B.渐进上界 C.非紧上界 D.非紧下界7、以下关于渐进记号的性质是正确的有:( )A.B.C. O(f(n)+O(g(n) = O(minf(n),g(n) D.8、记号O的定义正确的是( )。A. O(g(n) = f(n) | 存在正常数c和n0使得对所有nn0有:0 f(n) cg(n) ;B. O(g(n) = f(n) | 存在正常数c和n0使得对所有nn0有:0 cg(n) f(n) ;C. O(g(n) = f(n) | 对于任何正常数c0,存在正数和n0 0使得对所有nn0有0 f(n)0,存在正数和n0 0使得对所有nn0有:0 cg(n) 0,存在正数和n0 0使得对所有nn0有:0 f(n)0,存在正数和n0 0使得对所有nn0有:0 cg(n) 0) hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); 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); 10、Hanoi塔问题如下图所示。现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。移动圆盘时遵守Hanoi塔问题的移动规则。由此设计出解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); 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); 11、二分搜索算法是利用( )实现的算法。A、分治策略 B、动态规划法 C、贪心法 D、回溯法12、以下不可以使用分治法求解的是( )。A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题13、实现循环赛日程表利用的算法是( )。A、分治策略B、动态规划法C、贪心法D、回溯法14、实现棋盘覆盖算法利用的算法是( )。A、分治法 B、动态规划法 C、贪心法 D、回溯法15、Strassen矩阵乘法是利用( )实现的算法。A、分治策略 B、动态规划法 C、贪心法 D、回溯法16、使用分治法求解不需要满足的条件是()。A子问题必须是一样的 B子问题不能够重复C子问题的解可以合并 D原问题和子问题使用相同的方法解17、实现合并排序利用的算法是( )。A、分治策略B、动态规划法C、贪心法D、回溯法18、实现大整数的乘法是利用的算法( )。A、贪心法B、动态规划法C、分治策略D、回溯法二、填空题5、分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相 且与原问题相同。10、从分治法的一般设计模式可以看出,用它设计出的程序一般是 。14、快速排序算法是基于 的一种排序算法。17、快速排序算法的性能取决于 三、简答题3、分治法所能解决的问题一般具有的几个特征是:答:(1)该问题的规模缩小到一定的程度就可以容易地解决; (2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质; (3)利用该问题分解出的子问题的解可以合并为该问题的解; (4)原问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。4、分治法与动态规划法的异同。答:相同点:将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。不同点:适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。而用分治法求解的问题,经分解得到的子问题往往是互相独立的。8、老板有一袋金块(共n块,n是2的幂(n=2),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。假设有一台比较重量的仪器,希望用最少的比较次数找出最重的金块。答:n2 ,识别出最重和最轻的金块,一次比较就足够了。n2,第一步,把这袋金块平分成两个小袋A和B。第二步,分别找出在A和B 中最重和最轻的金块。设A中最重和最轻的金块分别为HA与LA,以此类推,B中最重和最轻的金块分别为HB和LB。第三步,通过比较HA和HB,可以找到所有金块中最重的;通过比较LA和LB,可以找到所有金块中最轻的。在第二步中,若n2,则递归地应用分而治之方法。9、Tom很顽皮。一天,他把假币投到储钱罐里。之后,他担心爸爸揍它,想从 N个钱币里找出那个假币。他知道假币的重量比其他钱币轻,但不知道如何找到它,于是禁不住哭了。也许你能帮他。请描述一个通过使用天平找到假币的算法,并分析你算法的运行时间。11、对下面的递归算法,写出调用f(4)的执行结果。void f(int k) if( k0 ) printf(%dn ,k); f(k-1); f(k-1); 四、算法填空5.快速排序void QuickSort (int a, int p, int r) if (pr) int q=Partition(a,p,r); ; /对左半段排序 ; /对右半段排序 6.排列问题void perm(int list, int k, int m ) /产生listk:m的所有排列 if( ) /只剩下一个元素 for (int i=0;i=m;i+) coutlisti; coutendl; else /还有多个元素待排列,递归产生排列 for ( ) swap(listk,listi); ; swap(listk,listi); 五、算法题1. 给定已按升序排好序的n个元素a0:n-1,现要在这n个元素中找出一特定元素x,返回其在数组中的位置,如果未找到返回-1。写出二分搜索的算法,并分析其时间复杂度。template int BinarySearch(Type a, const Type& x, int n)/在a0:n中搜索x,找到x时返回其在数组中的位置,否则返回-1 Int left=0; int right=n-1; While (leftamiddle) left=middle+1; else right=middle-1; Return -1; 时间复杂性为O(logn)2. 利用分治算法写出合并排序的算法,并分析其时间复杂度void MergeSort(Type a, int left, int right) if (leftright) /至少有2个元素 int i=(left+right)/2; /取中点 mergeSort(a, left, i); mergeSort(a, i+1, right); merge(a, b, left, i, right); /合并到数组b copy(a, b, left, right); /复制回数组a 算法在最坏情况下的时间复杂度为O(nlogn)。算法练习题-动态规划一、选择题19、下列不是动态规划算法基本步骤的是( )。A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解20、最长公共子序列算法利用的算法是( )。A、分支界限法B、动态规划法C、贪心法D、回溯法21、动态规划算法的基本要素为( )A. 最优子结构性质与贪心选择性质 B重叠子问题性质与贪心选择性质C最优子结构性质与重叠子问题性质 D. 预排序与递归调用22、矩阵连乘问题的算法可由( )设计实现。A、分支界限算法 B、动态规划算法 C、贪心算法 D.分治法23、下列算法中通常以自底向上的方式求解最优解的是( )。A、备忘录法 B、动态规划法 C、贪心法 D、回溯法24、应用Johnson法则的流水作业调度采用的算法是( )A. 贪心算法 B. 分支限界法 C.分治法 D. 动态规划算法25、下列不是动态规划算法基本步骤的是( )。题目不好A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解二、填空题2、动态规划算法的基本思想就将待求问题 、先求解子问题,然后从这些子问题的解得到原问题的解。 3、设计动态规划算法的4个步骤:(1) ,并刻画其结构特征。(2) 。(3) 。(4)根据计算最优值得到的信息, 。 12、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是 ,需要排序的是 , 。18、下面程序段的所需要的计算时间为 。int MaxSum(int n, int *a, int &besti, int &bestj)int sum=0;for(int i=1;i=n;i+) int thissum=0; for(int j=i;jsum) sum=thissum; besti=i; bestj=j; return sum;21、所谓最优子结构性质是指 。三、简答题1、请叙述动态规划算法与贪心算法的异同。答:共同点:都需要最优子结构性质,不同点:(1)动态规划:每一步作一个选择依赖于子问题的解。 贪心方法:每一步作一个选择不依赖于子问题的解。(2)动态规划方法的条件:子问题的重叠性质。 贪心方法的条件:最优子结构性质;贪心选择性质。(3)动态规划:自底向上求解; 贪心方法: 自顶向下求解。2、设计动态规划算法的主要步骤为:答: (1)找出最优解的性质,并刻划其结构特征。(2)递归地定义最优值。(3)以自底向上的方式计算出最优值。(4)根据计算最优值时得到的信息,构造最优解。4、分治法与动态规划法的异同。答:相同点:将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。不同点:适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。而用分治法求解的问题,经分解得到的子问题往往是互相独立的。四、算法填空2.最大子段和: 动态规划算法int MaxSum(int n, int a) int sum=0, b=0; /sum存储当前最大的bj, b存储bj for(int j=1; j0) b += aj ; else ; /一旦某个区段和为负,则从下一个位置累和 if(bsum) sum=b; return sum; 算法练习题-贪心算法一、选择题26、能采用贪心算法求最优解的问题,一般具有的重要性质为:( )A. 最优子结构性质与贪心选择性质 B重叠子问题性质与贪心选择性质C最优子结构性质与重叠子问题性质 D. 预排序与递归调用27、贪心算法与动态规划算法的共同点是( )。A、重叠子问题 B、构造最优解 C、贪心选择性质 D、最优子结构性质28、贪心算法与动态规划算法的主要区别是( )。A、最优子结构B、贪心选择性质C、构造最优解D、定义最优解29、哈弗曼编码的贪心算法所需的计算时间为( )。A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)30、下面是贪心算法的基本要素的是( )。A、重叠子问题B、构造最优解C、贪心选择性质D、定义最优解31、下面问题(B )不能使用贪心法解决。A 单源最短路径问题 B N皇后问题 C 最小花费生成树问题 D 背包问题32、背包问题的贪心算法所需的计算时间为( )A、O(n2n) B、O(nlogn) C、O(2n) D、O(n)45、下列算法中不能解决0/1背包问题的是( )A 贪心法 B 动态规划 C 回溯法 D 分支限界法二、填空题19、 有11个待安排的活动,它们具有下表所示的开始时间与结束时间,如果以贪心算法求解这些活动的最优安排(即为活动安排问题:在所给的活动集合中选出最大的相容活动子集合),得到的最大相容活动子集合为活动 。1413121110987654fi122886535031Si1110987654321i20、所谓贪心选择性质是指 所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到 。21、所谓最优子结构性质是指 问题的最优解包含了其子问题的最优解 。四、算法填空1.背包问题的贪心算法void Knapsack(int n,float M,float v,float w,float x) Sort(n,v,w); int i; float c=M; for (i=1;i=n;i+) xi=0; for (i=1;ic) break; xi=1; ; ;3.贪心算法求装载问题void Loading(int x, int w, int c, int n) int *t = new int n+1; ; for (int i = 1; i = n; i+) xi = 0; for (int i = 1; i = n & wti = c; i+) xti = 1; ;4.贪心算法求活动安排问题templatevoid GreedySelector(int n, Type s, Type f, bool A) ; int j=1; for (int i=2;i=fj) ; ; else Ai=false; 五、算法题5、试用贪心算法求解下列问题:将正整数n分解为若干个互不相同的自然数之和,使这些自然数的乘积最大。void dicomp(int n,int a) k=1;if(n3) a1=0; return; if(nak) k+; ak=ak-1+1; n-=ak; if(n=ak) ak+; n-;for(int i=0;in) output(x); else for (int i=0;in) output(x); else for (int i=t;in) output(x); else for (int i=t;in) output(x); else for (int i=0;i=1;i+) xt=i; if (legal(t) backtrack(t-1); 二、填空题12、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是 ,需要排序的是 , 。13、使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是 ,只使用约束条件进行裁剪的是 。15、回溯法是一种既带有 又带有 的搜索算法。22、回溯法是回溯法是指 。23、用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为 。24、回溯法的算法框架按照问题的解空间一般分为 算法框架与 算法框架。25、用回溯法解0/1背包问题时,该问题的解空间结构为 结构。26、用回溯法解批处理作业调度问题时,该问题的解空间结构为 结构。27、旅行售货员问题的解空间树是 。1.2.28、用回溯法解图的m着色问题时,使用下面的函数OK检查当前扩展结点的每一个儿子所相应的颜色的可用性,则需耗时(渐进时间上限) 。Bool Color:OK(int k) for(int j=1;j=n;j+)if(akj= =1)&(xj= =xk) return false;return true;三、简答题5、分支限界法与回溯法的异同答: 相同点:都是一种在问题的解空间树T中搜索问题解的算法。不同点:(1)求解目标不同; (2)搜索方式不同; (3)对扩展结点的扩展方式不同; (4)存储空间的要求不同。四、算法填空10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容:Typep Knap:Bound(int i) / 计算上界 Typew cleft = c - cw; / 剩余容量 Typep b = cp; / 结点的上界 / 以物品单位重量价值递减序装入物品 while (i = n & wi = cleft) ; ; ; / 装满背包 if (i = n) return b;五、算法题3.N皇后回溯法bool Queen:Place(int k) /检查xk位置是否合法 for (int j=1;jn) sum+;else for (int i=1;i n) / 到达叶结点 if(cwbestw) /更新最优解bestx,bestw; return; for(j=1;j=n;j+) bestxj=xj; Bestw=cw; r -= wi; if (cw + wi bestw) / 搜索右子树 xi = 0; backtrack(i + 1); r += wi; 算法练习题-分支限界法一、选择题40、常见的两种分支限界法为( )A. 广度优先分支限界法与深度优先分支限界法;B. 队列式(FIFO)分支限界法与堆栈式分支限界法;C. 排列树法与子集树法;D. 队列式(FIFO)分支限界法与优先队列式分支限界法;41、分支限界法在问题的解空间树中,按( )策略,从根结点出发搜索解空间树。A 广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先42、下面不是分支界限法搜索方式的是( )。A、广度优先B、最小耗费优先C、最大效益优先D、深度优先43、分支限界法解旅行售货员问题时,活结点表的组织形式是( )。A、最小堆B、最大堆 C、栈D、数组44、优先队列式分支限界法选取扩展结点的原则是( )。A、先进先出B、后进先出C、结点的优先级D、随机45、下列

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论