算法(复习题)1
《算法分析与设计》期末复习题[1]
![《算法分析与设计》期末复习题[1]](https://img.taocdn.com/s3/m/8701d1e35ef7ba0d4a733b9b.png)
一、选择题1.一个.java文件中可以有()个public类。
A.一个B.两个C.多个D.零个2.一个算法应该是()A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A和C3.用计算机无法解决“打印所有素数”的问题,其原因是解决该问题的算法违背了算法特征中的()A.唯一性B.有穷性C.有0个或多个输入D.有输出4.某校有6位学生参加学生会主席竞选,得票数依次为130,20,98,15,67,3。
若采用冒泡排序算法对其进行排序,则完成第二遍时的结果是()A.3,15,130,20,98,67B.3,15,20,130,98,67C.3,15,20,67,130,98 D.3,15,20,67,98,1305.下列关于算法的描述,正确的是()A.一个算法的执行步骤可以是无限的B.一个完整的算法必须有输出C.算法只能用流程图表示D.一个完整的算法至少有一个输入6.Java Application源程序的主类是指包含有()方法的类。
A、main方法B、toString方法C、init方法D、actionPerfromed方法7.找出满足各位数字之和等于5的所有三位数可采用的算法思路是()A.分治法B.减治法C.蛮力法D.变治法8.在编写Java Application程序时,若需要使用到标准输入输出语句,必须在程序的开头写上( )语句。
A、import java.awt.* ;B、import java.applet.Applet ;C、import java.io.* ;D、import java.awt.Graphics ;9.计算某球队平均年龄的部分算法流程图如图所示,其中:c用来记录已输入球员的人数,sum用来计算有效数据之和,d用来存储从键盘输入的球员年龄值,输入0时表示输入结束。
图中空白处理框①和②处应填入的是()A.①sum ←sum + d B.①sum ←sum + c②c ←c + 1②c ←c + 1C.①sum ←sum + d D.①sum ←sum + c②d ←d + 1 ②d ←d + 110.报名参加冬季越野赛跑的某班5位学生的学号是:5,8,11,33,45。
1-4章复习题

一、选择题。
1. 算法的计算量的大小称为计算的()。
A.效率 B. 复杂性 C. 现实性 D. 难度2.计算机算法指的是(1),它必须具备(2)这三个特性。
(1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列D. 调度方法(2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性D. 易读性、稳定性、安全性3. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的5.从逻辑上可以把数据结构分为()两大类。
A.动态结构、静态结构 B.顺序结构、链式结构C.线性结构、非线性结构 D.初等结构、构造型结构6.程序段 For(i=n-1;i>0;i--)For(j=1;j<=i;j++)If(a[j]>a[j+1])a[j]←→a[j+1]其中 n为正整数,则最后一行的语句时间复杂度在最坏情况下是()A. O(n)B. O(nlogn)C. O(n3)D. O(n2)7.下述哪一条是顺序存储结构的优点?()A.存储密度大 B.插入运算方便 C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示8.下面关于线性表的叙述中,错误的是哪一个?()A.线性表采用顺序存储,必须占用一片连续的存储单元。
B.线性表采用顺序存储,便于进行插入和删除操作。
C.线性表采用链接存储,不必占用一片连续的存储单元。
D.线性表采用链接存储,便于插入和删除操作。
9.若某线性表最常用的操作是存取任一指定序号的元素和在最后进行插入和删除运算,则利用()存储方式最节省时间。
A.顺序表 B.双链表 C.带头结点的双循环链表 D.单循环链表11. 链表不具有的特点是()A.插入、删除不需要移动元素 B.可随机访问任一元素C.不必事先估计存储空间 D.所需空间与线性长度成正比12.单链表的一个存储结点包含()A数据域或指针域 B指针域或链域C指针域和链域 D数据域和链域13.(1) 静态链表既有顺序存储的优点,又有动态链表的优点。
软件设计师数据结构与算法(一)

[模拟] 软件设计师数据结构与算法(一)选择题第1题:循环链表的主要优点是______。
A.不再需要头指针了B.已知某个结点的位置后,能很容易找到它的直接前驱结点C.在进行删除操作后,能保证链表不断开D.从表中任一结点出发都能遍历整个链表参考答案:D第2题:表达式a*(b+c)-d的后缀表达式为______。
A.abcd*+-B.abc+*d-C.abc*+d-D.-+*abcd参考答案:B第3题:若二叉树的先序遍历序列为ABDECF,中序遍历序列为DBEAFC,则其后序遍历序列为______。
A.DEBAFCB.DEFBCAC.DEBCFAD.DEBFCA参考答案:D第4题:无向图中一个顶点的度是指图中______。
A.通过该顶点的简单路径数B.通过该顶点的回路数C.与该顶点相邻的顶点数D.与该顶点连通的顶点数参考答案:C第5题:利用逐点插入法建立序列(50,72,43,85,75,20,35,45,65,30)对应的二叉排序树以后,查找元素30要进行______次元素间的比较。
A.4B.5C.6D.7参考答案:B第6题:在常用的描述二叉排序树的存储结构中,关键字值最大的结点______。
A.左指针一定为空B.右指针一定为空C.左、右指针均为空D.左、右指针均不为空参考答案:B第7题:一个具有n(n>0)个顶点的连通无向图至少有______条边。
A.n+1B.nC.n/2D.n-1参考答案:D第8题:由权值为9,2,5,7的4个叶子结点构造一棵哈夫曼树,该树的带权路径长度为______。
A.23B.37C.44D.46参考答案:C第9题:在最好和最坏情况下的时间复杂度均为O(nlog<sub>2</sub>n)且稳定的排序方法是______。
A.基数排序B.快速排序C.堆排序D.归并排序参考答案:D第10题:己知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key)=key % 7计算散列地址,并散列存储在散列表A[0,…,6]中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为______。
复习题一及答案

复习题一1. 在一个长度为n的顺序表的任一位置插入一个新元素的渐进时间复杂度为( A )。
A. O(n)B. O(n/2)C. O(1)D. O(n2)2. 在有向图中每个顶点的度等于该顶点的( C )。
A. 入度B. 出度C. 入度与出度之和D. 入度与出度之差3. 下列排序算法中( C )是不稳定的排序算法。
A. 冒泡排序B. 合并排序C. 快速排序.D. 插入排序4. 在单链表中,q指向待删除结点的前驱,p指向待删除的结点,则删除节点的操作是( B )。
A. p=q->next;q->next=p->next; free (p);B. q->next=p; q->next=p->next; free (p);.C. p=q->next; free (p); q->next=p->next;D. p=q->next; p=p->next; free (p);5. 栈操作的基本原则( B ).A. 先进先出B. 先进后出C. 只能进行插入D. 只能进行删除6.设有一个顺序栈S,元素S1,S2,S3,S4,S5,S6依次入栈,若有6个元素出栈的顺序是S2,S3,S4,S6,S5,S1。
则该栈的容量至少应该是(B)。
A.2 B.3 C.4 D.59. 具有50个结点的完全二叉树,编号为19的结点的左孩子编号为( C )A. 46B. 39C. 38D. 不存在10. 若一棵二叉树具有10个度为2的节点,5个度为1的节点,则度为零的节点个数是( B ).A. 9B. 11C. 15D. 不确定11. 有n个顶点的无向图最多有( B )条边。
A. n-1B. n*(n-1)/2C. n*(n+1)/2D. n*n12. 对下图G,若从顶点a出发,按深度搜索法,进行遍历,则可能得到的一种顶点序列为( D ),按广度搜索法进行遍历,则可能得到的一种顶点序列为( B )。
算法设计与分析复习题整理 (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、回溯法中的解空间树结构通常有两种,分别是子集树和排列树。
vb《算法与程序设计》复习试题(1)

《算法与程序设计》复习题一、选择题部分(100题)一章一节:了解计算机解决问题的过程1.用计算机解决问题时,首先应该确定程序“做什么?”,然后再确定程序“如何做?”请问“如何做?”是属于用计算机解决问题的哪一个步骤?()A、分析问题B、设计算法C、编写程序D、调试程序答案:B2.学校要举行运动会,请你设计一个能够对运动员分数自动排序的软件,如果要设计此软件,以下最好的方法和步骤是()。
A、分析问题,编写程序,设计算法,调试程序B、设计算法,编写程序,提出问题,调试程序C、提出问题,设计算法,编写程序,调试程序D、设计算法,提出问题,编写程序,调试程序答案:C3.下列步骤不属于软件开发过程的是()。
A、任务分析与系统设计B、软件的销售C、代码编写与测试D、软件测试与维护答案:B4.用计算机解决问题的步骤一般为()①编写程序②设计算法③分析问题④调试程序。
A.①②③④ B.③④①② C.②③①④ D.③②①④答案:D5.以下描述中最适合用计算机编程来处理的是()。
A、确定放学回家的路线B、计算某个同学期中考试各科成绩总分C、计算100以内的奇数平方和D、在因特网上查找自己喜欢的歌曲答案:C6.以下问题中最适合用计算机编程处理的是()。
A、制定本学期的学习计划B、计算正方形的周长C、创作一首歌曲D、求1000以内的所有素数答案:D7.由“上车—掏钱—投币”所描述的问题是()。
A、无人售票车投币过程B、乘公交车过程C、上车过程D、下车过程答案:A一章二节:算法和算法描述8.下面说法正确的是()。
A、算法+数据结构=程序B、算法就是程序C、数据结构就是程序D、算法包括数据结构答案:A9.算法描述可以有多种表达方法,下面哪些方法不可以描述“水仙花数问题”的算法()。
A.自然语言B.流程图C.伪代码D.机器语言答案:D10.下面关于算法的说法错误的是()。
A、算法必须有输出B、算法就是程序C、算法不一定有输入D、算法必须在有限步执行后能结束答案:B11.算法的三种基本控制结构是顺序结构、分支结构和()。
算法设计与分析复习题目及答案
分治法1、二分搜索算法是利用(分治策略)实现的算法。
9. 实现循环赛日程表利用的算法是(分治策略)27、Strassen矩阵乘法是利用(分治策略)实现的算法。
34.实现合并排序利用的算法是(分治策略)。
实现大整数的乘法是利用的算法(分治策略)。
17.实现棋盘覆盖算法利用的算法是(分治法)。
29、使用分治法求解不需要满足的条件是(子问题必须是一样的)。
不可以使用分治法求解的是(0/1背包问题)。
动态规划下列不是动态规划算法基本步骤的是(构造最优解)下列是动态规划算法基本要素的是(子问题重叠性质)。
下列算法中通常以自底向上的方式求解最优解的是(动态规划法)备忘录方法是那种算法的变形。
(动态规划法)最长公共子序列算法利用的算法是(动态规划法)。
矩阵连乘问题的算法可由(动态规划算法B)设计实现。
实现最大子段和利用的算法是(动态规划法)。
贪心算法能解决的问题:单源最短路径问题,最小花费生成树问题,背包问题,活动安排问题,不能解决的问题:N皇后问题,0/1背包问题是贪心算法的基本要素的是(贪心选择性质和最优子结构性质)。
回溯法回溯法解旅行售货员问题时的解空间树是(排列树)。
剪枝函数是回溯法中为避免无效搜索采取的策略回溯法的效率不依赖于下列哪些因素(确定解空间的时间)分支限界法最大效益优先是(分支界限法)的一搜索方式。
分支限界法解最大团问题时,活结点表的组织形式是(最大堆)。
分支限界法解旅行售货员问题时,活结点表的组织形式是(最小堆)优先队列式分支限界法选取扩展结点的原则是(结点的优先级)在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( 分支限界法).从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( 栈式分支限界法)之外都是最常见的方式.(1)队列式(FIFO)分支限界法:按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
(2)优先队列式分支限界法:按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。
计算机算法与设计复习题(含答案) (1)
一、选择题1、衡量一个算法好坏的标准是(C )。
(A)运行速度快(B)占用空间少(C)时间复杂度低(D)代码短2、记号O的定义正确的是(A)。
(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)<cg(n) };(D)O(g(n)) = { f(n) | 对于任何正常数c>0,存在正数和n0 >0使得对所有n≥n0 有:0 ≤cg(n) < f(n) };3、二分搜索算法是利用( A )实现的算法。
(A)分治策略(B)动态规划法(C)贪心法(D)回溯法4、使用分治法求解不需要满足的条件是(A )。
(A)子问题必须是一样的(B)子问题不能够重复(C)子问题的解可以合并(D)原问题和子问题使用相同的方法解5、合并排序算法是利用(A)实现的算法。
(A)分治策略(B)动态规划法(C)贪心法(D)回溯法6、实现大整数的乘法是利用(C )的算法。
(A)贪心法(B)动态规划法(C)分治策略(D)回溯法7、以下不可以使用分治法求解的是(D )。
(A)棋盘覆盖问题(B)选择问题(C)归并排序(D)0/1背包问题8、实现循环赛日程表利用的算法是( A )。
(A)分治策略(B)动态规划法(C)贪心法(D)回溯法9、实现棋盘覆盖算法利用的算法是( A )。
(A)分治法(B)动态规划法(C)贪心法(D)回溯法10、矩阵连乘问题的算法可由(B)设计实现。
(A)分支界限算法(B)动态规划算法(C)贪心算法(D)回溯算法11、实现大整数的乘法是利用的算法( C )。
(A)贪心法(B)动态规划法(C)分治策略(D)回溯法12、最长公共子序列算法利用的算法是(B)(A)分支界限法(B)动态规划法(C )贪心法(D)回溯法13、下列算法中通常以自底向上的方式求解最优解的是(B )(A)备忘录法(B)动态规划法(C)贪心法(D)回溯法14、下列是动态规划算法基本要素的是(D)(A)定义最优解(B)构造最优解(C)算出最优解(D)子问题重叠性质15、下列不是动态规划算法基本步骤的是( A )。
《算法与程序设计》一、二章基本概念复习题答案
《算法与程序设计》一、二章基本概念复习题答案一、单选题(每个3分,共60分)1.下列选项中,不属于计算机程序设计语言的是( C )A.汇编语言B.高级语言C.自然语言D.机器语言2. 关于算法的描述,下列选项中正确的是( B )A.算法本身就是一种程序设计语言B.算法的每一步骤必须有确切的含义C.算法的步骤可以是无穷的D.算法必须有输入3. VB程序中“dim n As Integer”这条语句的作用是( A)A.定义一个变量B.定义一个数据输入方法C.定义一个事件过程D.定义一个数据处理方法4.一个单窗体VB程序的运行界面如下图所示,下列说法正确的是:(C)(1)窗体内有1个按纽(2)窗体内有2个文本框(3)窗体内有3个标签(4)该窗体的标题(Caption)属性值是“加法计算器”A.(3) (4)B.(1)(2)C.(1)(4)D.(2) (3)5. 两个阻值分别为R1、R2的电阻并联后,电路阻值可由公式求解,下面能正确求出R的VB表达式是(A)。
A.R1*R2/(R1+R2)B.R1+R2/(R1*R2)C.(R1+R2)/(R1*R2)D.R1*R2/R1+R26. 关于算法的描述,下列选项中正确的是(D)A.算法只能用流程图来表示B.一个算法的执行步骤可以是无限的C.一个算法,当没有输入时,也没有输出D.一个算法可以没有输入7. 在VB语言中,字符串运算符“+”和“&”的作用是把两个或多个字符串连接成一个字符串。
则表达式"20"+"13"&"20+13"的运算结果是(B )。
'A. “332013”B.”201320+13”C.”201333”D.”3333”8. 下列VB程序运行时(如图所示),在文本框Text1中输入20,在文本框Text2中输入13,单击命令按钮Command1后,文本框Text3中显示的内容是(D)。
高考专题复习专题一 用流程图表示算法
专题一用流程图表示算法【考纲标准】考试内容考试要求1.算法的基本概念 b2.算法的常用表示方法 b3.顺序、选择、循环三种控制结构 b1.(2019·6月浙江学考)十进制数转换为二进制数的算法流程图如图所示,当输入十进制数63时,该流程图中循环体执行的次数为()A.4 B.5C.6 D.7解析本题考核的知识点是算法和算法的表示。
X的初值63,进入循环后,他的值依次为31,15,7,3,1,0。
当x的值为0时,不再循环,因此循环次数为6。
答案 C2.(2019·4月浙江选考)某算法的部分流程图如图所示。
执行这部分流程后,输出c,s 的值分别是()A.8,10 B.10,14C.12,6 D.12,24解析本题考查流程图。
第 1 次:c=4,s=4。
第 2 次:c=6,s=4。
第 3 次:c=10,s=14。
答案 B3.(2018·11月浙江选考)某算法的部分流程图如图所示。
执行这部分流程,分别输入35、50、60,则输出值依次为()A.10, 3 B.10, 4C.7, 10, 4 D.10, 12,3解析流程图中有两个输出,一个是变量r 满足7<r≤10 会输出r 值,一个是循环结束后会输出i 的值。
分别输入35、50、60,只有当输入g=50 是满足条件7<r≤10 会输出10。
循环结束后i 的值为4,输出4。
答案 B4.(2018·4月浙江选考)某算法部分流程图如图所示。
执行这部分流程,依次输入12、-5、29、18、7,则输出值是()A.12 B.-5C.29 D.7解析考查流程图的执行过程。
流程图实现的功能是求输入数据中的最大值,即29。
答案 C5.(2017·11月浙江高考)某算法的部分流程图如下图所示。
执行这部分流程,输出a,b的值分别是()A.5,8 B.4,8C.5,11 D.4,11答案 C6.(2018·6月浙江学考)某算法的部分流程图如图所示,以下说法正确的是()A.该流程执行后,变量k的值是-1B.该流程执行后,变量a的值是16C.该流程用于计算并输出1+8-16的值D.该流程完整执行1次,“a<32?”共执行了3次解析a<32?s k a初值 1 1 8True 9 0 16True 9 1 32False答案 D7.(2017·4月浙江选考)某算法的部分流程图如图所示。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
平均情况:设待查找的元素在数组中的概率为P,不在数组中的概率为1-P,若出现在数组中每个位置的概率是均等的为p/nT(n)=P1D1+P2D2+...+PiDi+(1-P)Dn+1=p/2+n(1-p/2)1.叙述分治算法和动态规划算法的基本思想,并比较两种算法的异同。
答:分治法将待求解的问题划分成K个较小规模的子问题,对这K个子问题分别求解,再将子问题的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解. 动态规划将待求解的问题分解成若干的子问题,自底向上地通过求解子问题的解得到原问题的解。
动态规划将每个子问题只求解一次并将其解保存在一个表格中,当需要再次求解此子问题时,只是简单的通过查表过的该子问题的解,避免了大量的重复计算.异同:分治法求解的问题分解后的子问题都是独立的,而使用动态规划求解的问题分解后得到的子问题往往不是相互独立的。
分治法是自顶向下用递归的方法解决问题,而动态规划则是自底向上非递归解决问题。
1.简述分治算法求解过程的三个阶段。
答:(1)划分:既然是分治,当然需要把规模为n的原问题划分为k个规模较小的子问题,并尽量使这k个子问题的规模大致相同。
(2)求解子问题:各子问题的解法与原问题的解法通常是相同的,可以用递归的方法求解各个子问题,有时递归处理也可以用循环来实现。
(3)合并:把各个子问题的解合并起来,合并的代价因情况不同有很大差异,分治算法的有效性很大程度上依赖于合并的实现。
2.叙述分治法的基本思想,并分析分治法与减治法二者的区别。
答:分治法将待求解的问题划分成K个较小规模的子问题,对这K个子问题分别求解,再将子问题的解合并为一个更大规模的问题的解,自底向上逐步求出原问题的解.区别:分治法是把一个大问题划分成若干个子问题,分别求解各个子问题,然后把子问题的解进行合并并得到原问题的解。
减治法同样是把一个大问题划分成若干个子问题,但是这些子问题不需要分别求解,只需求解其中的一个子问题,因而也无需对子问题的解进行合并。
3.设计分治算法求一个数组中最大元素的位置,建立该算法时间复杂性的递推式并给出其复杂性的大O表示。
答:设数组a1,a2...anint maxpos(a[],i,j);{if(i==j) return i;mid=(i+j)/2;lmaxpos=maxpos(a,i,mid);rmaxpos=maxpos(a,mid+1,j);if(a[lmaxpos]>=a[rmoxpos])return lmaxpos;elsereturn rmaxpos;}T(1)=O(n) n=1;T(n)=2T(n/2)+O(1) n>1;求得复杂性为O(n)4.阅读下面一段折半查找算法,回答问题。
int BinarySearch(int a[],int x,int n){int left=0,right=n-1;while(left<=right){int middle=(left+right)/2;if(x==a[middle]) return middle;if(x>a[middle]) left=middle+1;else right=middle-1;}return -1;}(1)给出该算法的复杂性递归方程,用展开法求解,并给出其渐进复杂性的大O表示。
T(1)=1 n=1 T(n)=T(n/2)+1 (n>=2) O(logn)(2)修改折半查找算法使之能够进行范围查找。
所谓范围查找是要找出在给定值a和b之间的所有元素(a≤b)。
int BinarySearch(int s[],int r,int l,a,b){mid=(l+r)/2;if(s[mid]>b) BinarySearch(s,mid-1,l,a.b);else (s[mid]<a) BinarySearch(s,r,mid+1,a,b);else{输s[mid];BinarySearch(s,mid-1,l,a,s[mid]);BinarySearch (s,r,mid+1,s[mid],b);}5.什么是最优化问题?答:最优化问题有n个输入,它的解由这n个输入的一个子集组成,这个子集必须满足某些事先给定的条件,这些条件称为约束条件,满足约束条件的解称为可行解。
满足约束条件的可行解可能不只一个,为了衡量这些可行解的优劣,事先给出一定的标准,这些标准通常以函数的形式给出,这些标准函数称为目标函数。
使目标函数取得极值(极大或极小)的可行解称为最优解这类问题就称为最优化问题。
6.最大子段和问题:给定由n个整数组成的序列(a1, a2, …, an),最大子段和问题要求该序列形如ai+…+aj的最大值(1≤i≤j≤n),当序列中所有整数均为负整数时,其最大子段和为0。
分别用蛮力法、分治法和动态规划法设计求解最大子段和问题的算法的伪代码描述,并分析每种方法的渐进复杂性。
(1)蛮力法int maxsum (int n,int a[],int besti,int bestj){int sum=0;for(int i;i<=n;i++){int thissum=0;for(int j=i;j<=n;j++){thissum +=a[j];if(thissum>sum){sum=thissum;besti=i;bestj=j;}}}return sum;}基本操作为:第二个for循环中的条件语句,故复杂性为:O(n^2)。
(2)分治法将a1,a2,……,an划分为两个长度相等的子序列a1,a2…..,an/2和an/2+1,an/2+2,……,an○1原序列最大子段和为前一个子序列的最大子段和。
○2原序列最大子段和为后一个子序列的最大子段和。
○3原序列的最大子段和=ai+….+aj 1<=i<=n/2 n/2+1<=j<=n ○1○2递归求解,○3s1=Max(ai+….+ak) (1<=i<=n/2) s2=Max(ak+…+aj)(n/2+1<=j<=n) 比较丧钟情况下的结果,取较大的为原问题的解。
复杂性方程为:T(1)=1 n=1,T(n)=2T(n/2)+n n>1;解得时间复杂度:O(nlogn)(3)动态规划法int maxsum (int n,int a[]){int sum=0,b=0;for(int i=1;i<=n;i++){if(b>0) b+=a[i];else b=a[i];if(b>sum) sum=b;}return sum;}递归方程 b(j)=b(j-1)+aj b(j-1)>0 b(j)=aj b(j-1)<=0时间复杂度为:O(n)7.给出贪心法的一般过程描述。
开始时解集S为空,然后使用选择函数按照某种贪心策略从候选集合C中选择一个元素X,用可行函数去判断解集合S加入X后是否可行,把X合并到解集合S中,并把他从候选集合C中删除,否则,丢弃X,从候选集合C中根据贪心策略在选择一个元素,重复上述过程,只到找到一个满足解决函数的完整解。
8.简述贪心法求解问题的两个特征,并说明贪心法和动态规划法的区别。
答:最优子结构性质:当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质,也称此问题满足最优性原理。
贪心选择性质:所谓贪心选择性质是指问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来得到。
区别:动态规划算法是把一个复杂问题分解为若干个相互重叠的子问题,通过求解子问题形成一系列决策得到原问题的解;而贪心法是把一个复杂问题分解为一系列较为简单的局部最优选择,每一步选择都是对当前的一个扩展,直到获得问题的完整解。
9.假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场。
设计一个有效的贪心算法进行会场安排。
10.分析回溯法的基本思想。
答:回溯法从根结点出发,按照深度优先策略遍历解空间树,搜索满足约束条件的解。
在搜索至树中任一结点时,先判断该结点对应的部分解是否满足约束条件,或者是否超出目标函数的界,也就是判断该结点是否包含问题的(最优)解,如果肯定不包含,则跳过对以该结点为根的子树的搜索,即所谓剪枝;否则,进入以该结点为根的子树,继续按照深度优先策略搜索。
11.什么是深度优先的问题状态生成法?什么是宽度优先的问题状态生成法?答:深度优先的问题状态生成法:如果对一个扩展结点R,一旦产生了它的一个儿子C,就把C当做新的扩展结点。
在完成对子树C(以C为根的子树)的穷尽搜索之后,将R重新变成扩展结点,继续生成R的下一个儿子(如果存在)。
宽度优先的问题状态生成法:在一个扩展结点变成死结点之前,它一直是扩展结点。
12.用递归形式和回溯形式对回溯法进行伪代码描述,要求对算法中的变量、函数等有适当的注释。
答:递归形式主算法1. X={ };2. flag=false;3. advance(1);4. if (flag) 输出解X;else输出“无解”;advance(int k)1. 对每一个x∈Sk 循环执行下列操作1.1 xk =x;1.2 将xk 加入X;1.3 if (X是最终解) flag=true; return;1.4 else if (X是部分解) advance(k+1);迭代形式:1.X={ };2.flag=false;3.k=1;4.while (k>=1)4.1 当(Sk 没有被穷举)循环执行下列操作4.1.1 xk =Sk 中的下一个元素;4.1.2 将xk 加入X;4.1.3 if (X为最终解) flag=true; 转步骤5;4.1.4 else if (X为部分解) k=k+1; 转步骤4;4.2 k=k-1; //回溯5.if flag 输出解X;else 输出“无解”;13.设计用回溯法求解0/1背包问题的剪枝函数,并给出相应算法的伪代码描述。
X=(x1,x2,….,xn) xi={0,1}x1w1+x2w2+…+xiwi<=c左子树:cw+w[i]>c 右子树:cp+lefts(i+1)<=bestP将个物品按单位重量价值从大到小排序bestp=0;BackTrack(1);输出背包的最大价值bestP;BackTrack( int i){if(i>n){if(bestP<cp) bestP=cp;return;}}若(cw+w[i]<=c)则cw=cw+w[i];cp=cp+p[i];BackTrack(i+1);若(cp+lefts(i+1)>bestP)则cw=cw-w[i];cp=cp-p[i];14.给定一个正整数集合X={x1,x2,…,x n}和一个正整数y,设计回溯算法,求集合X的一个子集Y,使得Y中元素之和等于y。