!算法设计与分析总复习
《算法设计与分析》复习题

填空1.直接或间接地调用自身的算法称为 递归 。
2.算法的复杂性是 算法效率 的度量,是评价算法优劣的重要依据。
3.以广度优先或以最小耗费方式搜索问题解的算法称为 分支限界法。
4.回溯法解题的显著特点是在搜索过程中动态产生问题的解空间。
在任何时刻,算法只保存从根结点到当前扩展结点的路径。
如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为 o(h(n)) 。
5.人们通常将问题的解决方案分为两大类:一类是可以通过执行若干个步骤就能得出问题6.算法就是一组有穷的 规则 ,它们规定了解决某一特定类型问题的 一系列运算 。
7.在进行问题的计算复杂性分析之前,首先必须建立求解问题所用的计算模型。
3个基本计算模型是 随机存取机、 随机存取存储程序机 、 图灵机 。
8.快速排序算法的性能取决于 划分的对称性 。
9.计算机的资源最重要的是 内存 和 运算 资源。
因而,算法的复杂性有时间 和 空间 之分。
10.贪心算法总是做出在当前看来 最优 的选择。
也就是说贪心算法并不从整体最优考虑,它所做出的选择只是在某种意义上的 局部最优解 。
11.许多可以用贪心算法求解的问题一般具有2个重要的性质: 最优子结构的 性质和 贪心选择的 性质。
12.常见的两种分支限界法为 队列式 和 优先队列式 。
13.解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中需要排序的是 回溯法 ,不需要排序的是 动态规划和分支限界法 。
14.f ( n ) = 6 × 2n + n 2,f(n)的渐进性态f ( n ) = O ( 2^n )。
15.对于含有n 个元素的排列树问题,最好情况下计算时间复杂性为 ,最坏情况下计算时间复杂性为 n! 。
16.在忽略常数因子的情况下,O 、Ω和Θ三个符号中, Θ 提供了算法运行时间的一个上界。
17.回溯法的求解过程,即在问题的解空间树中,按 深度优先 策略从根结点出发搜索解空间树。
算法设计与分析复习题

算法设计与分析复习题算法设计与分析是计算机科学中的一个重要领域,它涉及到如何高效地解决计算问题。
以下是一些复习题,可以帮助学生更好地理解和掌握算法设计与分析的基本概念和技巧。
1. 算法的基本概念:- 什么是算法?请列举算法的基本特性。
- 解释算法的时间复杂度和空间复杂度,并给出一个例子。
2. 算法设计策略:- 描述贪心算法的工作原理,并给出一个实际问题的例子。
- 解释分治算法的基本步骤,并用快速排序算法来说明。
3. 排序算法:- 比较选择排序、插入排序和冒泡排序的时间复杂度。
- 描述归并排序和快速排序的工作原理,并讨论它们的优缺点。
4. 搜索算法:- 解释线性搜索和二分搜索的区别。
- 描述哈希表的工作原理,并讨论其在搜索算法中的应用。
5. 图算法:- 解释深度优先搜索(DFS)和广度优先搜索(BFS)的工作原理。
- 描述迪杰斯特拉(Dijkstra)算法和贝尔曼-福特(Bellman-Ford)算法,并比较它们的使用场景。
6. 动态规划:- 解释动态规划与分治法的区别。
- 给出一个动态规划解决的问题,并描述其解决方案。
7. 复杂度分析:- 什么是大O记号、大Ω记号和大Θ记号?它们如何帮助我们分析算法的效率?- 给出一个算法,并使用大O记号来分析其时间复杂度。
8. 算法优化:- 描述一些常见的算法优化技巧,例如空间换时间或时间换空间。
- 讨论算法优化在实际应用中的重要性。
9. 算法应用:- 举例说明算法在不同领域的应用,如在网络路由、机器学习或数据压缩中。
10. 算法的局限性:- 讨论算法在解决特定问题时可能遇到的局限性。
- 解释为什么某些问题被认为是不可解的或计算上不可行的。
结束语:通过这些复习题的练习,学生应该能够加深对算法设计与分析的理解,掌握不同算法的原理和应用场景,以及如何评估和优化算法的性能。
希望这些题目能够帮助学生在考试或实际工作中更加自信和高效。
!算法设计与分析总复习

!算法设计与分析总复习算法设计与分析是计算机科学中非常重要的一个领域,它涉及到了算法的设计、性能分析和优化等方面。
在准备考试之前,我们需要对算法设计与分析的基本概念和常用算法进行全面复习。
一、算法设计与分析基本概念1.算法的定义:算法是一系列解决特定问题的有限步骤。
2.算法的特性:算法具有明确性、有限性、确定性和输入/输出。
3.算法的正确性:算法必须能够解决问题,并得到正确的答案。
4.算法的效率:算法的时间复杂度和空间复杂度是衡量算法效率的重要指标。
二、常用算法1.排序算法:常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序、归并排序等。
需要了解每种排序算法的思想、时间复杂度和空间复杂度,并能够对其进行实现和优化。
2.查找算法:常用的查找算法包括顺序查找、二分查找、哈希查找等。
需要了解每种查找算法的思想和时间复杂度,并能够对其进行实现和应用。
3. 图算法:图算法包括深度优先(DFS)、广度优先(BFS)、最短路径算法(Dijkstra算法、Floyd算法)等。
需要了解这些算法的思想、时间复杂度和应用场景,并能够对其进行实现和应用。
4.动态规划算法:动态规划算法适用于具有重叠子问题和具有最优子结构性质的问题。
需要了解动态规划算法的基本思想、时间复杂度和应用场景,并能够对具体问题进行动态规划的设计和实现。
5.贪心算法:贪心算法常用于解决最优化问题,每一步都选择当前最优解,以期最终达到全局最优解。
需要了解贪心算法的基本思想、时间复杂度和应用场景,并能够对具体问题进行贪心算法的设计和实现。
三、算法的时间复杂度和空间复杂度1. 时间复杂度:算法的时间复杂度表示算法的执行时间和输入数据规模之间的关系。
常见的时间复杂度有O(1)、O(logn)、O(n)、O(nlogn)、O(n^2)等。
需要掌握各种时间复杂度的计算方法和复杂度的比较。
2.空间复杂度:算法的空间复杂度表示算法的内存消耗和输入数据规模之间的关系。
算法设计与分析复习要点

算法设计与分析的复习要点第一章:算法问题求解基础算法是对特定问题求解步骤的一种描述,它是指令的有限序列。
一.算法的五个特征:1.输入:算法有零个或多个输入量;2.输出:算法至少产生一个输出量;3.确定性:算法的每一条指令都有确切的定义,没有二义性;4.可行性:算法的每一条指令必须足够基本,它们可以通过已经实现的基本运算执行有限次来实现;5.有穷性:算法必须总能在执行有限步之后终止。
二.什么是算法?程序与算法的区别1.笼统地说,算法是求解一类问题的任意一种特殊的方法;较严格地说,算法是对特定问题求解步骤的一种描述,它是指令的有限序列。
2.程序是算法用某种程序设计语言的具体实现;算法必须可终止,程序却没有这一限制;即:程序可以不满足算法的第5个性质“有穷性”。
三.一个问题求解过程包括:理解问题、设计方案、实现方案、回顾复查。
四.系统生命周期或软件生命周期分为:开发期:分析、设计、编码、测试;运行期:维护。
五.算法描述方法:自然语言、流程图、伪代码、程序设计语言等。
六.算法分析:是指对算法的执行时间和所需空间的估算。
算法的效率通过算法分析来确定。
七.递归定义:是一种直接或间接引用自身的定义方法。
一个合法的递归定义包括两部分:基础情况和递归部分;基础情况:以直接形式明确列举新事物的若干简单对象;递归部分:有简单或较简单对象定义新对象的条件和方法八.常见的程序正确性证明方法:1.归纳法:由基础情况和归纳步骤组成。
归纳法是证明递归算法正确性和进行算法分析的强有力工具;2.反证法。
第二章:算法分析基础一.会计算程序步的执行次数(如书中例题程序2-1,2-2,2-3的总程序步数的计算)。
二.会证明5个渐近记法。
(如书中P22-25例2-1至例2-9)三.会计算递推式的显式。
(迭代法、代换法,主方法)四.会用主定理求T(n)=aT(n/b)+f(n)。
(主定理见P29,如例2-15至例2-18)五.一个好的算法应具备的4个重要特征:1.正确性:算法的执行结果应当满足预先规定的功能和性能要求;2.简明性:算法应思路清晰、层次分明、容易理解、利于编码和调试;3.效率:算法应有效使用存储空间,并具有高的时间效率;4.最优性:算法的执行时间已达到求解该类问题所需时间的下界。
算法设计与分析复习要点

算法设计与分析复习要点一、单项选择题(本大题共15小题,每小题2分,共30分)二、填空题(本大题共15空,每空1分,共15分)三、分析题(本大题共5小题,每小题5分,共25分)四、综合题(本大题共4小题,1、2题每题6分,3题8分,4题10分,共30分)第2章,导引与基本数据结构:1、什么是算法, 算法的5个特性;对一个算法作出全面分析的两个阶段。
P245个特性:确定性、能行性、输入、输出、有穷性两个阶段:事前分析、事后测试2、O(g(n)),Ω(g(n)), (g(n))的含义。
3、多项式时间算法:可用多项式(函数)对其计算时间限界的算法。
4、常见的多项式限界函数所表示算法时间复杂度的排序:Ο(1) <Ο(logn) < Ο(n) < Ο(nlogn) < Ο(n2) < Ο(n3)5、指数时间算法:计算时间用指数函数限界的算法6、常见的指数时间限界函数:Ο(2n) < Ο(n!) < Ο(n n)11()2(1)11()21nn T n T n n T n =⎧=⎨-+>⎩⇒=-7、什么是算法的复杂性:是该算法所需要的计算机资源的多少,它包括时间和空间资源。
8、复习栈和队列、树、图的基本知识,了解二元树、完全二元树,满二元树、二分检索树、了解图的邻接矩阵和邻接表存储方法。
9、能写出图的深度优先序列和广度优先序列。
10、会求如下一些简单的函数的上界表达式: 3n 2+10n =O(n 2)第3、4章 递归与分治算法1、理解递归算法的优缺点,深刻理解递归算法的执行过程。
如能写出解决n 阶汉诺塔问题的解,并能分析写出3阶汉诺塔问题的递归执行轨迹。
2、递归算法的优点:结构清晰,可读性强,容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。
3、递归算法的缺点:运行效率较低,耗费的计算时间和占用的存储空间都多。
为了达到此目的,根据具体程序的特点对递归调用工作栈进行简化,尽量减少栈操作,压缩栈存储空间以达到节省计算时间和存储空间的目的。
算法设计与分析期末备考知识点总结

算法设计与分析期末备考知识点总结●通俗地说,算法是解决咨询题的办法,严格地讲,算法是对特定咨询题求解步骤的一种描述,是指令的有限序列。
●算法还必须满脚一下五个重要特性:输入、输出、有穷性、确定性、可行性。
●程序(Program)是对一具算法使用某种程序设计语言的具体实现,原则上,算法能够用任何一种程序设计语言来实现。
啥是算法的计算复杂性?●算法分析指的是对算法所需要的两种计算机资源——时刻和空间(时刻复杂性和空间复杂性举行估算,所需要的资源越多,该算法的复杂性就越高。
●表示计算复杂性的O你掌握了?若存在两个正的常数c和n0,关于任意n≥n0,都有T(n)≤c×f(n),则称T(n)=O(f(n))(或称算法在O(f(n))中)。
我们要紧介绍了哪几种算法设计办法?分治法:将一具难以直截了当解决的大咨询题,分割成一些规模较小的子咨询题,以便各个击破,分而治之。
减治法:减治法在将原咨询题分解为若干个子咨询题后,利用了规模为n 的原咨询题的解与较小规模(通常是n/2)的子咨询题的解之间的关系,这种关系通常表现为:(1)原咨询题的解只存在于其中一具较小规模的子咨询题中;(2)原咨询题的解与其中一具较小规模的解之间存在某种对应关系。
由于原咨询题的解与较小规模的子咨询题的解之间存在这种关系,因此,只需求解其中一具较小规模的子咨询题就能够得到原咨询题的解。
动态规划法、贪心算法、回溯算法、概率RAM程序分治法------合并排序设算法4.3对n个元素排序的时刻复杂性为T(n),则该二路归并排序算法存在如下递推式:二路归并排序的时刻代价是O(nlog2n)。
所需空间只要O(m+n+min(m, n))的空间就够了(假设两个合并串的长度分不为m和n)。
分治法------快速排序在最好事情下在具有n个记录的序列中,一次划分需要对整个待划分序列扫描一遍,则所需时刻为O(n)。
时刻复杂度为O(nlog2n)。
在最坏事情下必须通过n-1次递归调用才干把所有记录定位,而且第i趟划分需要通过n-i 次关键码的比较才干找到第i个记录的基准位置,所以,总的比较次数为:时刻复杂度为O(n2)分治法------最大子段递推式:算法时刻复杂度:O(nlog2n)分治法------棋盘覆盖咨询题T(k)满脚如下递推式:分治法------循环赛日安排咨询题基本语句的执行次数是:算法的其时刻复杂性为O(4k)。
算法设计与分析 复习整理汇编

《算法设计与分析》复习要点2.算法的概念:答:算法是求解一类问题的任意一种特殊的方法。
一个算法是对特定问题求解步骤的一种描述,它是指令的有限序列。
注:算法三要素:1、操作2、控制结构3、数据结构3.算法有5大特性:答:输入、输出、确定性、能行性、有穷性。
注:输入:一个算法有0个或多个输入;输出:一个算法将产生一个或多个输出。
确定性:一个算法中每一步运算的含义必须是确切的、无二义性的;可行性:一个算法中要执行的运算都是相当基本的操作,能在有限的时间内完成;有穷性:一个算法必须在执行了有穷步运算之后终止;4.算法按计算时间可分为两类:答:多项式时间算法的渐进时间复杂度:O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3),具有此特征的问题称为P为题。
有效算法。
指数时间算法的渐进时间复杂度之间的关系为:O(2^n)<O(n!)< O(n^n),具有此特征的问题称为NP问题。
注:可以带1或2这些数字来判断它们之间的大小关系。
5.一个好算法的4大特性:答:正确性、简明性、效率、最优性。
注:正确性:算法的执行结果应当满足预先规定的功能和性能要求。
简明性:算法应思路清晰、层次分明、容易理解。
利于编码和调试。
效率:时间代价和空间代价应该尽可能的小。
最优性:算法的执行时间已经到求解该类问题所需要时间的下界。
6.影响程序运行时间的因素:1、答:程序所以来的算法。
问题规模和输入数据。
计算机系统系能。
注:算法运行的时间代价的度量不应依赖于算法运行的软件平台,算法运行的软件包括操作系统和采用的编程语言及其编译系统。
时间代价用执行基本操作(即关键操作)的次数来度量,这是进行算法分析的基础。
7.关键操作的概念答:指算法运行中起主要作用且花费最多时间的操作。
1.简述分治法是怎样的一种算法设计策略:答:将一个问题分解为若干个规模较小的子问题,且这些子问题互相独立且与原问题类型相同,递归地处理这些子问题,直到这些子问题的规模小到可以直接求解,然后将各个子问题的解合并得到原问题的解。
算法设计与分析复习知识点

算法设计与分析复习知识点算法设计与分析是计算机科学中的重要概念,它涉及到各种问题的解决方法和效率分析。
在本文中,我将回顾一些算法设计与分析的核心知识点。
一、算法的基本概念1. 算法的定义:算法是一系列明确指定的步骤,用于解决特定问题或执行特定任务。
2. 算法的特性:输入、输出、确定性、可行性和有穷性。
3. 算法的效率:时间复杂度和空间复杂度是衡量算法效率的两个重要指标。
4. 算法的分类:常见的算法分类有分治法、贪心法、动态规划、回溯法等。
二、时间复杂度和空间复杂度1. 时间复杂度:描述算法的时间耗费,通常使用大O符号表示。
常见的时间复杂度有O(1)、O(log n)、O(n)、O(n log n)、O(n^2)等。
2. 空间复杂度:描述算法在执行过程中所需的额外空间,也使用大O符号表示。
常见的空间复杂度有O(1)、O(n)、O(n^2)等。
三、常见的算法思想和技巧1. 分治法:将一个大问题划分成若干个小问题,然后逐个解决,并将结果合并得到最终解。
2. 贪心法:在每一步选择中都采取当前状态下最好或最优的选择,从而希望能得到全局最优解。
3. 动态规划:将一个大问题分解成若干个子问题,通过求解子问题得到最优解,从而得到原问题的解。
4. 回溯法:通过不断地尝试所有可能的选择,然后进行回溯,找到问题的解。
四、常见算法的应用1. 排序算法:快速排序、归并排序、插入排序等。
2. 搜索算法:深度优先搜索、广度优先搜索、A*算法等。
3. 图算法:最短路径算法、最小生成树算法、拓扑排序等。
4. 字符串匹配算法:暴力匹配算法、KMP算法、Boyer-Moore算法等。
五、算法复杂度分析1. 最优复杂度:最好情况下算法执行所需的最小资源。
2. 平均复杂度:在所有输入情况下算法执行所需的资源的平均值。
3. 最坏复杂度:最坏情况下算法执行所需的最大资源。
六、常见问题和优化技巧1. 递归算法的优化:尾递归优化、记忆化搜索等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
的一组运算。
5、直接或间接地调用自身的算法称为 ① ,在定义该算法
3、解递推关系 X(n)=X(n/3)+1 于n=3k的情况求解 x(n)=x(n/3)+1
其中
n>1,X(1)=1对
=x(n/3/3)+1+1 =x(n/32)+2 …….. =x(n/3k)+k 因为 n=3k 所以 k=㏒3n X(n)=1+㏒3n
4、下面的说法错误的是________。(可多选)
参考答案
1、 ①输入 ② 输出 ③ 确定性 ④ 有限性 ⑤ 可行性
2、 ①有限性 3、 ① 数据模型 ② 算法构件 4、 ① 上界 ② 下界 ③ 同阶
5、 ① 递归 ② 非递归定义的 6、 ① 重复计算 ②一个表 7、 ① 全部解 ② 一个解 8、 ① 深度优先 ② 广度优先 ③ 最小耗费优先
9、概率算法可分为4类:数值算法、蒙哥特卡罗算法、拉斯 维加斯算法和舍伍德算法。 蒙哥特卡罗算法常用于求问题的准确解,其缺点是①; 拉斯维加斯算法不会得到不正确的解,其缺点是②; 使用舍伍德算法求解得好处在于,可以③。
6、public static int binarySearch6(int[] a,int x,int n) { if(n>0 && x>=a[0]){ int left=0; int right=n-1; while(left<right){ int middle=(left+right+1)/2; if(x<a[middle])right=middle-1; else left=middle+1; } if(x==a[left]) return left; } return -1; }
分析与解答:
(1)设新机器用同一算法在 t 秒内能解输入规模
为n1的问题。T(n1)=64T(n)=64*3*2n=3*2n+6因此,
解得n1=n+6 。 (2)n12=64n2=(8n)2n1=8n。 (3)由于T(n)=常数,因此算法们最新研制的微处理器运行速度为 竞争对手ABC公司同类产品的100倍。对于计算复杂性分析 分别为n,n2,n3和n!的各算法,若用ABC公司的计算机能在1 小时能接输入规模为n的问题,那么用XYZ公司的计算机在1 小时内分别能接输入规模为多大的问题? 供选择的答案: ①a n b 10n c 100n d 与旧机器处理相同规模 ② a 10n b 2 100 n c log10n d 与旧机器处理相同规模 ③ a 2 100n b 3 100 n c 100n d 与旧机器处理相同规模 ④ a 100n b n+log100 c 1000n d 与旧机器处理相同 规模
5、public static int binarySearch5(int[] a,int x,int n) { if(n>0 && x>=a[0]){ int left=0; int right=n-1; while(left<right){ int middle=(left+right+1)/2; if(x<a[middle])right=middle-1; else left=middle; } if(x==a[left]) return left; } return -1; }
A 1 2 3 F 4 L 3 M C G 4 N 4 2 H 2 O B 3 D I 3 P 4 E 2 J 2 Q K 3 4
25
25
邻接矩阵
1 2 3 4
1 0 30 6 4
2 30 0 5 10
3 6 5 0 20
4 4 10 20 0
2、给出4个顶点的图如下: 只给出三种颜色,如何给4个顶点着色,使之有连边 关系的顶点颜色不同,一共有多少种着色方法,请绘图 说明。
10、建立计算模型的目的是为了使问题的计算复杂性分 析有一个共同的客观尺度,其中最主要的三个模型是 RAM随机存储机、 ①和 ②。
9、① 一般情况下,无法有效地判定所得到的解是否肯定 正确。 ② 有时找不到解。 ③ 消除或减少问题的好坏实例间的计算复杂性差别。
10、① RASP随机存取存储程序机 ②图灵机
7、public static int binarySearch7(int[] a,int x,int n) { if(n>0 && x>=a[0]){ int left=0; int right=n-1; while(left<right){ int middle=(left+right+1)/2; if(x<a[middle])right=middle; else left=middle; } if(x==a[left]) return left; } return -1; }
四、算法分析理解
1、设G=<V,E>是一个带权图。图中各边的费用 (权)为正数。图的一条周游路线是包括V中的每个顶点 在内的一条回路。请画出邻接矩阵并按照解空间树,并给 出回溯法和分支限界法求第一个解的搜索路径。
30 5 6 3 20 4 4 10
1
2
A 1 2 3 F 4 L 3 M C G 4 N 4 2 H 2 O B 3 D I 3 P 4 E 2 J 2 Q K 3 4
R L R G G L
L
R
G
R
L
G
L
R
G
R
L
G
R
L
R
G
G
L
R G
G L G
R L
G R R
R L
L G
R G L G G L
L R
L R G R
L R G L
L G G R
G R R L
R L R G
L L G
G L R
五、简答与证明题
1、给出NP 完全问题的定义,写出证明一问题属于NPC
问题的基本思想 。
《算法设计与分析》 总复习
北方民族大学 计算机科学与技术学院 白静
一、填空题
1、算法是指解决问题的方法或过程,算法所描述的指令序列必
须满足下列性质① 、② 、③ 、④ 、⑤ 。
2、程序是算法用某种程序设计语言的具体实现,程序可以不满 足算法的 ① 性质。所以像操作系统这样的软件不是算法。
3、抽象数据类型是算法设计的重要概念。严格地讲,它是算法
参考答案
1、数组段左右游标left和right 的调整不正确,导致陷入 死循环。 2 数组段左右游标left和right 的调整不正确,导致当 x=a[n-1]时返回错误。 3、数组段左右游标left和right 的调整不正确,导致当 x=a[n-1]时返回错误。 4、数组段左右游标left和right 的调整不正确,导致陷入 死循环。 5、算法正确,且当数组中有重复元素时,返回满足条件 的最右元素。 6、数组段左右游标left和right 的调整不正确,导致当 x=a[n-1]时返回错误。 7、数组段左右游标left和right 的调整不正确,导致当 x=a[0]时陷入死循环
三、判断分析
请判别下面给出的7个二分算法java程序的正确性,若算 法不正确,说明产生错误的原因,若正确给出算法正确性 证明。 1、public static int binarySearch1(int[] a,int x,int n) { int left =0;int right=n-1; while(left<=right){ int middle=(left+right)/2 if(x==a[middle])return middle; if(x>a[middle])left=middle; else right=middle; } return -1; }
a、算法原地工作的含义是指不需要任何额外的辅助
空间; b、在相同的规模n下,时间复杂度为O(n)的算法在
时间上总是优于时间复杂度为O(2n)的算法。
c、所谓时间复杂度是指最坏情况下,估算算法执行 时间的一个上界;
d、同一算法,实现语言的级别越高,执行效率越低。
参考答案 a、 d 一个原地算法(in-place algorithm)是一种使用小的,固定数量的额外 之空间来转换资料的算法。
2、public static int binarySearch2(int[] a,int x,int n) { int left =0; int right=n-1; while(left<right-1){ int middle=(left+right)/2 if(x<a[middle])right=middle; else left=middle; } if(x==a[left]) return left; else return -1; }
时,除了提供必须的计算公式外,还必须提供 ② 初始 值。 6、动态规划算法与分治法的基本思想都是将待求解问题分解 成若干个子问题,先求解子问题,然后从这些子问题的解 得到原问题的解。它们的主要区别是分治法求解时,对有 些子问题会 ① ,而动态规划法采用 ② 避免子问 题重复计算。 7、回溯法的求解目标是找出解空间中满足约束条件的 ① , 而分支限界法的求解目标则是找出满足约束条的 ② 或在 某种意义下的最优解。 8、回溯法以 ① 优先的方式搜索解空间树,而分支限界法则 以 ② 优先或以 ③ 优先的方式搜索解空间树。
语言L是NP完全的当且仅当L∈NP,对于所有L’∈NP 有 L’∝PL。 一个问题X定义为NP完全性问题,如果:X在NP中,而 且NP中的每一个其他问题都可以在多项式时间归约到X。 根据定理的推论,一旦建立了问题L的NP完全性后,对 于L1∈NP,只要证明问题L在多项式时间内变换为L1, 即L∝p L1,就可证明L1 也是NP完全的。