算法练习题分章节带答案.docx
- 文档编号:12788373
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:18
- 大小:112.42KB
算法练习题分章节带答案.docx
《算法练习题分章节带答案.docx》由会员分享,可在线阅读,更多相关《算法练习题分章节带答案.docx(18页珍藏版)》请在冰豆网上搜索。
算法练习题分章节带答案
)
算法练习题-分章节-带答案
算法练习题---算法概述
一、选择题
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和C
6、算法分析中,记号O表示(),记号
表示()。
A.渐进下界B.渐进上界C.非紧上界D.非紧下界
7、以下关于渐进记号的性质是正确的有:
()
A.
B.
C.O(f(n))+O(g(n))=O(min{f(n),g(n)})
D.
8、记号O的定义正确的是()。
A.O(g(n))={f(n)|存在正常数c和n0使得对所有n
n0有:
0
f(n)
cg(n)};
B.O(g(n))={f(n)|存在正常数c和n0使得对所有n
n0有:
0
cg(n)
f(n)};
C.O(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有n
n0有0
f(n) D.O(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有n n0有: 0 cg(n) 9、记号 的定义正确的是()。 A.O(g(n))={f(n)|存在正常数c和n0使得对所有n n0有: 0 f(n) cg(n)}; B.O(g(n))={f(n)|存在正常数c和n0使得对所有n n0有: 0 cg(n) f(n)}; C.O(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有n n0有: 0 f(n) D.O(g(n))={f(n)|对于任何正常数c>0,存在正数和n0>0使得对所有n n0有: 0 cg(n) 二、填空题 1、算法的性质包括输入、输出、、、有限性。 4、 算法的复杂性是 的度量,是评价算法优劣的重要依据。 6、计算机的资源最重要的是时间和空间资源。 因而,算法的复杂性有 和 之分。 7、算法复杂度依赖于三方面: 、和算法本身。 8、程序是 用某种程序设计语言的具体实现。 9、算法是指解决问题的或步骤的描述。 11、计算一个算法时间复杂度通常可以计算 、 或计算步。 16、任何可用计算机求解的问题所需的时间都与其有关。 算法练习题---递归与分治策略 一、选择题 10、Hanoi塔问题如下图所示。 现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。 移动圆盘时遵守Hanoi塔问题的移动规则。 由此设计出解Hanoi塔问题的递归算法正确的为: () 11、二分搜索算法是利用( )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 12、以下不可以使用分治法求解的是()。 A棋盘覆盖问题B选择问题C归并排序D0/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)),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。 假设有一台比较重量的仪器,希望用最少的比较次数找出最重的金块。 答: n≤2,识别出最重和最轻的金块,一次比较就足够了。 n>2, 第一步,把这袋金块平分成两个小袋A和B。 第二步,分别找出在A和B中最重和最轻的金块。 设A中最重和最轻的金块分别为HA 与LA,以此类推,B中最重和最轻的金块分别为HB 和LB。 第三步,通过比较HA 和HB,可以找到所有金块中最重的;通过比较LA 和LB,可以找到所有金块中最轻的。 在第二步中,若n>2,则递归地应用分而治之方法。 9、Tom很顽皮。 一天,他把假币投到储钱罐里。 之后,他担心爸爸揍它,想从N个钱币里找出那个假币。 他知道假币的重量比其他钱币轻,但不知道如何找到它,于是禁不住哭了。 也许你能帮他。 请描述一个通过使用天平找到假币的算法,并分析你算法的运行时间。 11、对下面的递归算法,写出调用f(4)的执行结果。 voidf(intk) {if(k>0) {printf("%d\n",k); f(k-1); f(k-1); } } 四、算法填空 5.快速排序 voidQuickSort(inta[],intp,intr) {if(p {intq=Partition(a,p,r); ;列问题 voidperm(intlist[],intk,intm) {给定已按升序排好序的n个元素a[0: n-1],现要在这n个元素中找出一特定元素x,返回其在数组中的位置,如果未找到返回-1。 写出二分搜索的算法,并分析其时间复杂度。 template intBinarySearch(Typea[],constType&x,intn) {利用分治算法写出合并排序的算法,并分析其时间复杂度 voidMergeSort(Typea[],intleft,intright) {if(left 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、下面程序段的所需要的计算时间为。 intMaxSum(intn,int*a,int&besti,int&bestj) {intsum=0; for(inti=1;i<=n;i++) {intthissum=0; for(intj=i;j<=n;j++) {thissum+=a[j]; if(thissum>sum) {sum=thissum;besti=i;bestj=j;} } } returnsum; } 21、所谓最优子结构性质是指。 三、简答题 1、请叙述动态规划算法与贪心算法的异同。 答: 共同点: 都需要最优子结构性质, 不同点: (1)动态规划: 每一步作一个选择—依赖于子问题的解。 贪心方法: 每一步作一个选择—不依赖于子问题的解。 (2)动态规划方法的条件: 子问题的重叠性质。 贪心方法的条件: 最优子结构性质;贪心选择性质。 (3)动态规划: 自底向上求解; 贪心方法: 自顶向下求解。 2、设计动态规划算法的主要步骤为: 答: (1)找出最优解的性质,并刻划其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值时得到的信息,构造最优解。 4、分治法与动态规划法的异同。 答: 相同点: 将待求解的问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 不同点: 适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。 而用分治法求解的问题,经分解得到的子问题往往是互相独立的。 四、算法填空 2.最大子段和: 动态规划算法 intMaxSum(intn,inta[]) {intsum=0,b=0;最优子结构性质与贪心选择性质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单源最短路径问题BN皇后问题C最小花费生成树问题D背包问题 32、背包问题的贪心算法所需的计算时间为( ) A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 45、下列算法中不能解决0/1背包问题的是() A贪心法B动态规划C回溯法D分支限界法 二、填空题 19、有11个待安排的活动,它们具有下表所示的开始时间与结束时间,如果以贪心算法求解这些活动的最优安排(即为活动安排问题: 在所给的活动集合中选出最大的相容活动子集合),得到的最大相容活动子集合为活动。 20、所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。 21、所谓最优子结构性质是指问题的最优解包含了其子问题的最优解。 四、算法填空 1.背包问题的贪心算法 voidKnapsack(intn,floatM,floatv[],floatw[],floatx[]) {Sort(n,v,w); inti;floatc=M; for(i=1;i<=n;i++)x[i]=0; for(i=1;i<=n;i++) {if(w[i]>c)break; x[i]=1; ; } ; } 3.贪心算法求装载问题 voidLoading(intx[],intw[],intc,intn) {int*t=newint[n+1]; ; for(inti=1;i<=n;i++)x[i]=0; for(inti=1;i<=n&&w[t[i]]<=c;i++) {x[t[i]]=1; ; } } 4.贪心算法求活动安排问题 template voidGreedySelector(intn,Types[],Typef[],boolA[]) {; intj=1; for(inti=2;i<=n;i++) {if(s[i]>=f[j]) {;;} elseA[i]=false; } } 五、算法题 5、试用贪心算法求解下列问题: 将正整数n分解为若干个互不相同的自然数之和,使这些自然数的乘积最大。 voiddicomp(intn,inta[]) {k=1; if(n<3) {a[1]=0;return;} if(n<5) {a[k]=1;a[++k]=n-1;return;} a[1]=2; n-=2; while(n>a[k]) {k++;a[k]=a[k-1]+1;n-=a[k];} if(n==a[k]) {a[k]++;n--;} for(inti=0;i } 算法练习题—回溯法 一、选择题 33、回溯法在问题的解空间树中,按()策略,从根结点出发搜索解空间树。 A.广度优先B.活结点优先C.扩展结点优先D.深度优先 34、下面哪种函数是回溯法中为避免无效搜索采取的策略( ) A.递归函数B.剪枝函数C。 随机数函数D.搜索函数 35、回溯法的效率不依赖于以下哪一个因素() A.产生x[k]的时间;B.满足显式约束的x[k]值的个数; C.问题的解空间的形式;D.计算上界函数bound的时间; 36、回溯法的效率不依赖于下列哪些因素() A.满足显约束的值的个数B.计算约束函数的时间 C.计算限界函数的时间D.确定解空间的时间 37、下列算法中通常以深度优先方式系统搜索问题解的是( )。 A、备忘录法B、动态规划法C、贪心法D、回溯法 38、回溯法搜索状态空间树是按照()的顺序。 A中序遍历B广度优先遍历C深度优先遍历D层次优先遍历 39、程序块()是回溯法中遍历排列树的算法框架程序。 二、填空题 12、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是,需要排序的是,。 13、使用回溯法进行状态空间树裁剪分支时一般有两个标准: 约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是,只使用约束条件进行裁剪的是。 15、回溯法是一种既带有又带有的搜索算法。 22、回溯法是指。 23、用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。 在任何时刻,算法只保存从根结点到当前扩展结点的路径。 如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为 。 24、回溯法的算法框架按照问题的解空间一般分为算法框架与算法框架。 25、用回溯法解0/1背包问题时,该问题的解空间结构为结构。 26、用回溯法解批处理作业调度问题时,该问题的解空间结构为结构。 27、旅行售货员问题的解空间树是。 1. 2. 28、用回溯法解图的m着色问题时,使用下面的函数OK检查当前扩展结点的每一个儿子所相应的颜色的可用性,则需耗时(渐进时间上限)。 BoolColor: : OK(intk) { for(intj=1;j<=n;j++) if((a[k][j]==1)&&(x[j]==x[k]))returnfalse; returntrue; } 三、简答题 5、分支限界法与回溯法的异同 答: 相同点: 都是一种在问题的解空间树T中搜索问题解的算法。 不同点: (1)求解目标不同; (2)搜索方式不同; (3)对扩展结点的扩展方式不同;(4)存储空间的要求不同。 四、算法填空 10.用回溯法解0/1背包问题时,计算结点的上界的函数如下所示,请在空格中填入合适的内容: TypepKnap : Bound(inti)请写出用回溯法解装载问题的函数。 装载问题: 有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且 。 装载问题要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。 如果有,找出一种装载方案。 voidbacktrack(inti)广度优先分支限界法与深度优先分支限界法; 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、下列算法中不能解决0/1背包问题的是() A贪心法B动态规划C回溯法D分支限界法 二、填空题 12、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是,需要排序的是,。 三、简答题 5、分支限界法与回溯法的异同 答: 相同点: 都是一种在问题的解空间树T中搜索问题解的算法。 不同点: (1)求解目标不同; (2)搜索方式不同; (3)对扩展结点的扩展方式不同;(4)存储空间的要求不同。 6、用分支限界法设计算法的步骤是: 答: (1)针对所给问题,定义问题的解空间(对解进行编码);分 (2)确定易于搜索的解空间结构(按树或图组织解); (3)以广度优先或以最小耗费(最大收益)优先的方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。 7、常见的两种分支限界法的算法框架 答: (1)队列式(FIFO)分支限界法: 按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。 (2)优先队列式分支限界法: 按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。 10、用分支限界法解装载问题时,对算法进行了一些改进,下面的程序段给出了改进部分;试说明斜线部分完成什么功能,以及这样做的原因,即采用这样的方式,算法在执行上有什么不同。 //检查左儿子结点 Typewt=Ew+w[i];//左儿子结点的重量 if(wt<=c){//可行结点 if(wt>bestw)bestw=wt; //加入活结点队列 if(i } //检查右儿子结点 if(Ew+r>bestw&&i (Ew);//可能含最优解 (Ew);//取下一扩展结点 答: 斜线标识的部分完成的功能为: 提前更新bestw值; 这样做可以尽早的进行对右子树的剪枝。 具体为: 算法Maxloading初始时将bestw设置为0,直到搜索到第一个叶结点时才更新bestw。 因此在算法搜索到第一个叶子结点之前,总有bestw=0,r>0故Ew+r>bestw总是成立。 也就是说,此时右子树测试不起作用。 为了使上述右子树测试尽早生效,应提早更新bestw。 又知算法最终找到的最优值是所求问题的子集树中所有可行结点相应重量的最大值。 而结点所相应得重量仅在搜索进入左子树是增加,因此,可以在算法每一次进入左子树时更新bestw的值。 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 练习题 章节 答案