2008.1算法设计与分析课程期末试卷
算法分析期末试题集答案(6套)
内部资料,转载请注明出处,谢谢合作。
《算法分析与设计》期末复习题(一)一、选择题1.应用Johnson法则的流水作业调度采用的算法是(D)A. 贪心算法B. 分支限界法C.分治法D. 动态规划算法2.Hanoi塔问题如下图所示。
现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。
移动圆盘时遵守Hanoi塔问题的移动规则。
由此设计出解Hanoi塔问题的递归算法正确的为:(B)Hanoi塔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)策略,从根结点出发搜索解空间树。
A.广度优先B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间树。
A.广度优先B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块(A)是回溯法中遍历排列树的算法框架程序。
A.B.C.D.10. 回溯法的效率不依赖于以下哪一个因素?(C )A.产生x[k]的时间;B.满足显约束的x[k]值的个数;C.问题的解空间的形式;D.计算上界函数bound的时间;E.满足约束函数和上界函数约束的所有x[k]的个数。
算法设计与分析期末试卷A卷
算法设计与分析期末试卷A卷一、选择题1.二分搜索算法是利用(A)实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法解析:二分搜索是一种基于分治策略的算法。
2.回溯法解旅行售货员问题时的解空间树是(A)。
A、子集树B、排列树C、深度优先生成树D、广度优先生成树解析:旅行售货员问题的解空间树是子集树,因为每个结点代表一个城市的集合。
3.下列算法中通常以自底向上的方式求解最优解的是(B)。
A、备忘录法B、动态规划法C、贪心法D、回溯法解析:动态规划法通常以自底向上的方式求解最优解。
4.下面不是分支界限法搜索方式的是(D)。
A、广度优先B、最小耗费优先C、最大效益优先D、深度优先解析:分支界限法搜索方式包括广度优先、最小耗费优先和最大效益优先,但不包括深度优先。
5.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为(B)。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)解析:最优装载问题采用贪心算法的主要计算量在于将集装箱依其重量从小到大排序,因此时间复杂度为O(nlogn)。
6.分支限界法解最大团问题时,活结点表的组织形式是(B)。
A、最小堆B、最大堆C、栈D、数组解析:分支限界法解最大团问题时,活结点表的组织形式是最大堆。
7、下面问题(B)不能使用贪心法解决。
A 单源最短路径问题C 最小花费生成树问题B N皇后问题D 背包问题解析:N皇后问题不能使用贪心法解决。
8.下列算法中不能解决0/1背包问题的是(A)A 贪心法B 动态规划C 回溯法D 分支限界法解析:贪心法不能解决0/1背包问题。
9.背包问题的贪心算法所需的计算时间为(B)A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)解析:背包问题的贪心算法所需的计算时间为O (nlogn)。
二、填空题1.算法的复杂性有时间复杂性和空间复杂性之分。
2.算法是由若干条指令组成的有穷序列,且要满足输入、输出、确定性和有穷性四条性质。
《算法分析与设计》期末试题及参考答案
《算法分析与设计》期末试题及参考答案一、简要回答下列问题:1.算法重要特性是什么?1.确定性、可行性、输入、输出、有穷性2.2.算法分析的目的是什么?2.分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。
3.3.算法的时间复杂性与问题的什么因素相关?3. 算法的时间复杂性与问题的规模相关,是问题大小n的函数。
4.算法的渐进时间复杂性的含义?4.当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。
时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。
5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的算法所耗时间。
最坏情况下的时间复杂性取的输入实例中最大的时间复杂度:W(n) = max{ T(n,I) } , I∈Dn平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和:A(n) =∑P(I)T(n,I) I∈Dn6.简述二分检索(折半查找)算法的基本过程。
6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较,如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]<x,则A[i:(i+j)/2-1]找x,否则在A[ (i+j)/2+1:j] 找x。
上述过程被反复递归调用。
7.背包问题的目标函数和贪心算法最优化量度相同吗?7. 不相同。
目标函数:获得最大利润。
最优量度:最大利润/重量比。
8.采用回溯法求解的问题,其解如何表示?有什么规定?8. 问题的解可以表示为n元组:(x1,x2,……x n),x i∈S i, S i为有穷集合,x i∈S i, (x1,x2,……x n)具备完备性,即(x1,x2,……x n)是合理的,则(x1,x2,……x i)(i<n)一定合理。
算法设计与分析历年期末试题整理_含答案_
《算法设计与分析》历年期末试题整理(含答案)(1)用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现 7、程序调试 8、结果整理文档编制(2)算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程(3)算法的三要素1、操作2、控制结构3、数据结构算法具有以下5 个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法中每一条指令必须有确切的含义。
不存在二义性。
只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。
输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。
输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。
算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。
效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。
一般这两者与问题的规模有关。
经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。
利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代模型。
在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。
迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。
不能让迭代过程无休止地重复执行下去。
算法设计与分析期末试题汇总
A卷一、选择题1.二分搜索算法是利用(A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法2. 回溯法解旅行售货员问题时的解空间树是( A )。
A、子集树B、排列树C、深度优先生成树D、广度优先生成树3.下列算法中通常以自底向上的方式求解最优解的是(B )。
A、备忘录法B、动态规划法C、贪心法D、回溯法4.下面不是分支界限法搜索方式的是( D )。
A、广度优先B、最小耗费优先C、最大效益优先D、深度优先5.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为 ( B ) 。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)6.分支限界法解最大团问题时,活结点表的组织形式是( B)。
A、最小堆B、最大堆C、栈D、数组7、下面问题(B )不能使用贪心法解决。
A 单源最短路径问题B N皇后问题C 最小花费生成树问题D 背包问题8.下列算法中不能解决0/1背包问题的是(A )A 贪心法B 动态规划C 回溯法D 分支限界法9.背包问题的贪心算法所需的计算时间为( B )A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)10.背包问题的贪心算法所需的计算时间为(B )。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)二、填空题1.算法的复杂性有复杂性和复杂性之分。
2.算法是由若干条指令组成的有穷序列,且要满足输入、、确定性和四条性质。
其中算法的“确定性”指的是组成算法的每条是清晰的,无歧义的。
3.解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是,需要排序的是,。
4.动态规划算法的两个基本要素是. 性质和性质。
5.回溯法是一种既带有又带有的搜索算法;分支限界法是一种既带有又带有的搜索算法。
6. 用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。
在任何时刻,算法只保存从根结点到当前扩展结点的路径。
算法设计与分析期末试题_考试版
1、用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制2、算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程3、算法的三要素1、操作2、控制结构3、数据结构算法具有以下5个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法中每一条指令必须有确切的含义。
不存在二义性。
只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。
输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。
输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。
算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。
效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。
一般这两者与问题的规模有关。
经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法迭代法基本思想:迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。
解题步骤:1、确定迭代模型。
根据问题描述,分析得出前一个(或几个)值与其下一个值的迭代关系数学模型。
2、建立迭代关系式。
迭代关系式就是一个直接或间接地不断由旧值递推出新值的表达式,存储新值的变量称为迭代变量3、对迭代过程进行控制。
确定在什么时候结束迭代过程,这是编写迭代程序必须考虑的问题。
不能让迭代过程无休止地重复执行下去。
迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。
对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
《算法设计与分析》考试题目及答案
《算法分析与设计》期末复习题一、选择题1.应用Johnson法则的流水作业调度采用的算法是(D)A. 贪心算法B. 分支限界法C.分治法D. 动态规划算法2.Hanoi塔问题如下图所示。
现要求将塔座A上的的所有圆盘移到塔座B上,并仍按同样顺序叠置。
移动圆盘时遵守Hanoi塔问题的移动规则。
由此设计出解Hanoi塔问题的递归算法正确的为:(B)Hanoi塔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)策略,从根结点出发搜索解空间树。
广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间树。
A.广度优先 B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块(A)是回溯法中遍历排列树的算法框架程序。
A.B.C.D.10.x[k]的个数。
11. 常见的两种分支限界法为(D)A. 广度优先分支限界法与深度优先分支限界法;B. 队列式(FIFO)分支限界法与堆栈式分支限界法;C. 排列树法与子集树法;D. 队列式(FIFO)分支限界法与优先队列式分支限界法;12. k带图灵机的空间复杂性S(n)是指(B)A.k带图灵机处理所有长度为n的输入时,在某条带上所使用过的最大方格数。
【VIP专享】算法设计与分析试卷A及答案(2008级)
(首页)试题纸(A卷)课程名称:算法设计与分析适用专业年级:2008级计算机、电本考生学号:考生姓名:………………………………………………………………………………………………………………………题号一二三四总分分数一、填空题(10空×2分,共20分) 1、算法在运行时占有的机器资源的量称为算法复杂性,主要包括(时间)和(空间)。
2、当一个算法的运行时间为n2+n+1时,由于n2+n+1与n2的数量级相等,则称n2为这个算法的(时间复杂度)。
3、多项式A(n)=a m n m+…+ a2n2+ a1n+ a0的上界为()。
4、递归算法设计的关键在于找出(递归关系)和(最小问题的解)。
5、(无后向性)是问题能用贪婪算法或动态规划方法求解的前提。
6、拆半查找、合并排序、二叉树遍历等算法中均采用了(分而治之)策略。
7、回溯算法是尝试搜索算法中最为基本的一种算法,其采用了一种走不通就掉头的思想作为其控制结构。
8、用分支限界法解决布线问题时,对问题解空间搜索尝试结束的标志是()。
二、判断题(10题×2分,共20分)1.若c是正常数,则O(cf(n))=O(f(n))。
v2.在最好情况下、最坏情况下、平均情况下的时间复杂度中,可操作性最好的且最有实际价值的,是最坏情况下的时间复杂度。
x3.好的算法在很大程度上取决于问题中数据所采用的数据结构。
v4.迭代模型是通过小规模问题的解逐步求解大规模问题的解,正好与递归算法设计相反。
v5.用贪婪算法解决零钱兑换问题时,总能找到问题的最优解。
x6.适用动态规划算法解决问题应该具有最优化原理和子问题重叠。
x7.深度优先搜索算法可以搜索到问题所有可能的解方案。
x8.解决马的遍历问题采用回溯法,对解空间树的搜索采用广度优先搜索方式v9.分支限界法的求解目标是找出满足约束条件的一个解或是在满足约束条件的解中找出使用某一目标函数值达到极大或极小的解。
x三、简答题(3题×6分,共18分)1、叙述分治算法和动态规划算法的基本思想,并比较两种算法的异同。
29.1算法设计与分析课程期末试卷-a卷(自测 ) (2)(1)
华南农业大学期末考试试卷(A卷)2008学年第一学期考试科目:算法分析与设计考试类型:(闭卷)考试时间:120 分钟学号姓名年级专业一、选择题(20分,每题2分)1.下述表达不正确的是。
A.n2/2 + 2n的渐进表达式上界函数是O(2n)B.n2/2 + 2n的渐进表达式下界函数是Ω(2n)C.logn3的渐进表达式上界函数是O(logn)D.logn3的渐进表达式下界函数是Ω(n3)2.当输入规模为n时,算法增长率最大的是。
A.5n B.20log2n C.2n2 D.3nlog3n3.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是。
A.T(n)= T(n – 1)+1,T(1)=1 B.T(n)= 2n2C.T(n)= T(n/2)+1,T(1)=1 D.T(n)= 3nlog2n4.在棋盘覆盖问题中,对于2k×2k的特殊棋盘(有一个特殊方块),所需的L型骨牌的个数是。
A.(4k– 1)/3 B.2k /3 C.4k D.2k5.在寻找n个元素中第k小元素问题中,若使用快速排序算法思想,运用分治算法对n个元素进行划分,应如何选择划分基准?下面答案解释最合理。
A.随机选择一个元素作为划分基准B.取子序列的第一个元素作为划分基准C.用中位数的中位数方法寻找划分基准D.以上皆可行。
但不同方法,算法复杂度上界可能不同6.有9个村庄,其坐标位置如下表所示:现在要盖一所邮局为这9个村庄服务,请问邮局应该盖在才能使到邮局到这9个村庄的总距离和最短。
A.(4.5,0)B.(4.5,4.5)C.(5,5)D.(5,0)7.n个人拎着水桶在一个水龙头前面排队打水,水桶有大有小,水桶必须打满水,水流恒定。
如下说法不正确?A.让水桶大的人先打水,可以使得每个人排队时间之和最小B.让水桶小的人先打水,可以使得每个人排队时间之和最小C.让水桶小的人先打水,在某个确定的时间t内,可以让尽可能多的人打上水D.若要在尽可能短的时间内,n个人都打完水,按照什么顺序其实都一样8.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。
(完整版)算法设计与分析期末考试卷及答案a
考生 信 息 栏 ______学院______系______专业______年级姓名______学号_____ 装 订 线考 生信 息 栏 ______学院______系______专业______年级姓名______学号_____ 装 订 线 pro2(n) ex1(n/2) end if return end ex1 3.用Floyd 算法求下图每一对顶点之间的最短路径长度,计算矩阵D 0,D 1,D 2和D 3,其中D k [i, j]表示从顶点i 到顶点j 的不经过编号大于k 的顶点的最短路径长度。
三.算法填空题(共34分) 1.(10分)设n 个不同的整数按升序存于数组A[1..n]中,求使得A[i]=i 的下标i 。
下面是求解该问题的分治算法。
算法 SEARCH 输入:正整数n ,存储n 个按升序排列的不同整数的数组A[1..n]。
输出:A[1..n]中使得A[i]=i 的一个下标i ,若不存在,则输出 no solution 。
i=find ( (1) ) if i>0 then output i else output “no solution” end SEARCH 过程 find (low, high) // 求A[low..high] 中使得A[i]=i 的一个下标并返回,若不存在,考生 信息 栏 ______学院______系______ 专业 ______年级姓名______学号_____ 装订线《算法设计与分析》期考试卷(A)标准答案 一. 填空题:1. 元运算 考生 信 息 栏 ______学院______系______ 专业 ______年级姓名______ 学号_____ 装订线2. O3.∑∈n D I I t I p )()(4. 将规模为n 的问题分解为子问题以及组合相应的子问题的解所需的时间5. 分解,递归,组合6. 在问题的状态空间树上作带剪枝的DFS 搜索(或:DFS+剪枝)7. 前者分解出的子问题有重叠的,而后者分解出的子问题是相互独立(不重叠)的8. 局部9. 高10. 归并排序算法11. 不同12. v=random (low, high); 交换A[low]和A[v]的值随机选主元13. 比较n二. 计算题和简答题:1. 阶的关系:(1) f(n)= O(g(n))(2) f(n)=Ω(g(n))(3) f(n)=Ω(g(n))(4) f(n)= O(g(n))(5) f(n)=Θ(g(n))阶最低的函数是:100阶最高的函数是:n 32. 该递归算法的时间复杂性T(n)满足下列递归方程:⎩⎨⎧>+===1n ,n log T(n/2)T(n)1n , 1T(n)2 将n=k2, a=1, c=2, g(n)=n log 2, d=1代入该类递归方程解的一般形式得: T(n)=1+∑-=1k 0i i 22n log =1+k n log 2-∑-=1k 0i i =1+ k n log 2-2)1k (k -=n log 2122+n log 212+1 所以,T(n)= n log 2122+n log 212+1=)(log 2n Θ。
算法题__计算机算法设计及分析期末试题4套(含答案)
(1)用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制(2)算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程(3)算法的三要素1、操作2、控制结构3、数据结构算法具有以下5个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法中每一条指令必须有确切的含义。
不存在二义性。
只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。
输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。
输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。
算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。
效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。
一般这两者与问题的规模有关。
经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。
利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代模型。
在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。
迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。
不能让迭代过程无休止地重复执行下去。
迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。
《算法设计与分析》考试题目及答案
《算法分析与设计》期末复习题一、选择题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)策略,从根结点出发搜索解空间树。
(完整word版)算法设计与分析期末试卷A卷
A卷一、选择题1.二分搜索算法是利用(A )实现的算法。
A、分治策略B、动态规划法C、贪心法D、回溯法2. 回溯法解旅行售货员问题时的解空间树是( A )。
A、子集树B、排列树C、深度优先生成树D、广度优先生成树3.下列算法中通常以自底向上的方式求解最优解的是(B )。
A、备忘录法B、动态规划法C、贪心法D、回溯法4.下面不是分支界限法搜索方式的是( D )。
A、广度优先B、最小耗费优先C、最大效益优先D、深度优先5.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为 ( B ) 。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)6.分支限界法解最大团问题时,活结点表的组织形式是(B)。
A、最小堆B、最大堆C、栈D、数组7、下面问题(B )不能使用贪心法解决。
A 单源最短路径问题B N皇后问题C 最小花费生成树问题D 背包问题8.下列算法中不能解决0/1背包问题的是(A )A 贪心法B 动态规划C 回溯法D 分支限界法9.背包问题的贪心算法所需的计算时间为( B )A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)10.背包问题的贪心算法所需的计算时间为(B )。
A、O(n2n)B、O(nlogn)C、O(2n)D、O(n)二、填空题1.算法的复杂性有复杂性和复杂性之分。
2.算法是由若干条指令组成的有穷序列,且要满足输入、、确定性和四条性质。
其中算法的“确定性”指的是组成算法的每条是清晰的,无歧义的。
3.解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是,需要排序的是,。
4.动态规划算法的两个基本要素是. 性质和性质。
5.回溯法是一种既带有又带有的搜索算法;分支限界法是一种既带有又带有的搜索算法。
6. 用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。
在任何时刻,算法只保存从根结点到当前扩展结点的路径。
算法设计与分析试卷及答案级
{qh=0; qe=1;
maze[1][1]=④;
sq[1].pre=0; sq[1].x=1; sq[1].y=1;
while(⑤)
{qh=qh+1;
for(k=1;k<=4;k++)
{i=sq[qh].x+fx[k];
j=sq[qh].y+fy[k];
if (check(i,j)=1)//check()用来检查该方格是否可行
③;
else
{
for(j=a[0]; j>0; j--)
printf("%3d",a[j]);
printf("\n");
}
}
}
2、走迷宫问题。迷宫是许多小方格构成的矩形,在每个小方格中有的是墙(用“1”表示)有的是路(用“0”表示)。走迷宫就是从一个小方格沿上、下、左、右四个方向到邻近的方格,当然不能穿墙。设迷宫的入口是在左上角(1,1),出口是右下角(8,8)。根据给定的迷宫,找出一条从入口到出口的路径。
2、当一个算法的运行时间为n2+n+1时,由于n2+n+1与n2的数量级相等,则称n2为这个算法的(时间复杂度)。
3、多项式A(n)=amnm+…+ a2n2+ a1n+ a0的上界为()。
4、递归算法设计的关键在于找出(递归关系)和(最小问题的解)。
5、(无后向性)是问题能用贪婪算法或动态规划方法求解的前提。
三、简答题(3题×6分,共18分)
1、叙述分治算法和动态规划算法的基本思想,并比较两种算法的异同。
2、在算法设计的实际应用中,遇到的问题主要分为4类:判定性问题、计算问题、最优化问题和构造性问题,请指出递归法、递推法、贪婪算法、分治法、动态规划法、搜索算法各自适合解决的问题。
(完整word版).1算法设计与分析课程期末试卷-A卷(自测)
华南农业大学期末考试试卷(A卷)2008学年第一学期考试科目:算法分析与设计考试类型:(闭卷)考试时间:120 分钟学号姓名年级专业一、选择题(20分,每题2分)1.下述表达不正确的是。
A.n2/2 + 2n的渐进表达式上界函数是O(2n)B.n2/2 + 2n的渐进表达式下界函数是Ω(2n)C.logn3的渐进表达式上界函数是O(logn)D.logn3的渐进表达式下界函数是Ω(n3)2.当输入规模为n时,算法增长率最大的是。
A.5n B.20log2n C.2n2D.3nlog3n3.T(n)表示当输入规模为n时的算法效率,以下算法效率最优的是。
A.T(n)= T(n – 1)+1,T(1)=1 B.T(n)= 2n2C.T(n)= T(n/2)+1,T(1)=1 D.T(n)= 3nlog2n4.在棋盘覆盖问题中,对于2k×2k的特殊棋盘(有一个特殊方块),所需的L型骨牌的个数是。
A.(4k– 1)/3 B.2k /3 C.4k D.2k5.在寻找n个元素中第k小元素问题中,若使用快速排序算法思想,运用分治算法对n个元素进行划分,应如何选择划分基准?下面答案解释最合理。
A.随机选择一个元素作为划分基准B.取子序列的第一个元素作为划分基准C.用中位数的中位数方法寻找划分基准D.以上皆可行。
但不同方法,算法复杂度上界可能不同6.有9个村庄,其坐标位置如下表所示:现在要盖一所邮局为这9个村庄服务,请问邮局应该盖在才能使到邮局到这9个村庄的总距离和最短。
A.(4.5,0)B.(4.5,4.5) C.(5,5)D.(5,0)7.n个人拎着水桶在一个水龙头前面排队打水,水桶有大有小,水桶必须打满水,水流恒定。
如下说法不正确?A.让水桶大的人先打水,可以使得每个人排队时间之和最小B.让水桶小的人先打水,可以使得每个人排队时间之和最小C.让水桶小的人先打水,在某个确定的时间t内,可以让尽可能多的人打上水D.若要在尽可能短的时间内,n个人都打完水,按照什么顺序其实都一样8.分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。
算法分析与设计考试题目
2、对于下图使用 Dijkstra 算法求由顶点 a 到顶点 h 的最短路径。 (20 分) 。
3、假设有 7 个物品,它们的重量和价值如下表所示。若这些物品均不能被分割,且背包容量 M= 150,使用回溯方法求解此背包问题。请写出状态空间搜索树(20 分) 。 物品 重量 价值 A 35 10 B 30 40 C 60 30 D 50 50 E 40 35 F 10 40 G 25 30
4 (1,1, 0,1,1, 0, ) 7
d. 40 40 30 35 30 150 105 167.5 60 e. 40 40 50 35 30 150 130 175 60 f. 40 40 50 35 10 150 130 170.71
山东科技大学 2007—2008 学年第一学期
《算法设计与分析》考试试卷
班级 姓名 学号________
算法设计与分析(1)
1、排序和查找是经常遇到的问题。按照要求完成以下各题: (20 分) 1) 2) 3) 4) 对数组 A={15,29,135,18,32,1,27,25,5},用快速排序方法将其排成递减序。 请描述递减数组进行二分搜索的基本思想,并给出非递归算法。 给出上述算法的递归算法。 使用上述算法对 1)所得到的结果搜索如下元素,并给出搜索过程:18,31,135。
第 5 页 共 12 页
n
n
n
else if (v>A[mid]) return BinarySearch(A,left,mid-1,v); else return BinarySearch(A,mid+1,right,v); } else return -1; } (4)搜索 18:首先与 27 比较,18<27,在后半部分搜索;再次与 18 比较,搜索到,返回 5。 【1 分】 搜索 31:首先与 27 比较,31>27,在前半部分搜索;再次 32 比较,31<32,在后半部分搜索, 与 29 比较,31>29,此时只有一个元素,未找到,返回-1。 【2 分】 搜索 135:首先与 27 比较,135>27,在前半部分搜索;再次 32 比较,135>32,在前半部分 搜索;与 135 比较,相同,返回 0。 【2 分】 二、 【20 分】 用 V1 表示已经找到最短路径的顶点,V2 表示与 V1 中某个顶点相邻接且不在 V1 中的顶点;E1 表示 加入到最短路径中的边,E2 为与 V1 中的顶点相邻接且距离最短的路径。 【1 分】 步骤 V1 V2 E1 E2 1. {a} {b} {} {ab} 2. {a,b} {d} {ab} {bd} 3. {a,b,d} {c,f} {ab,bd} {dc,df} 4. {a,b,d,c} {f} {ab,bd} {df} 5. {a,b,c,d,f} {e} {ab,bd,dc,df} {fe} 6. {a,b,c,d,e,f} {g} {ab,bd,dc,df,fe} {eg} 7. {a,b,c,d,e,f,g} {h} {ab,bd,dc,df,fe,eg} {gh} 8. {a,b,c,d,e,f,g,h} {} {ab,bd,de,df,fe,eg,gh} {} 【以上每步 2 分】 结果:从 a 到 h 的最短路径为 a b d f e g h ,权值为 18。 【1 分】 求所有顶点对之间的最短路径可以使用 Dijkstra 算法,使其起始节点从 a 循环到 h,每次求起 始节点到其他节点的最短路径,最终可以求得所有顶点对之间的最短路径。 【2 分】 三、按照单位效益从大到小依次排列这 7 个物品为:FBGDECA。将它们的序号分别记为 1~7。 则可生产如下的状态空间搜索树。其中各个节点处的限界函数值通过如下方式求得: 【排序 1 分】
大学算法设计与分析课期末试题
一、填空题(选做5道,10分)1. 用矩阵幂的方法求斐波那契数,其运行时间为().2. 对于一个可以用动态规划法求解的问题,要求问题既要满足()的特性,又要具有大量的( ).3. 对于一个可以用贪心法求解的问题,不仅要求问题满足()的特性,还应证明其贪心策略的( ).4. 设有n 个栈操作(PUSH 、POP 、MULTIPOP )的序列,作用于初始为空的栈S .不区分三种操作,则每个操作的最坏运行时间为(),平摊运行时间为(). 5. 三种平摊分析的方法分别为()、()、().6. 四后问题的搜索空间为()树;0-1背包问题的搜索空间为()树;巡回售货员问题的搜索空间为()树.7. ()法的求解目标是找出解空间树中满足约束条件的所有解,而()法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解. 8. 回溯法一般以()优先的方式搜索解空间树,而分支限界法则一般以()优先或以最小耗费优先的方式搜索解空间树. 二、单项选择题 (10分)1. 下列关于排序算法的叙述,不正确的是?()A) 堆排序的最差情形运行时间为Θ(n lg n )B) 快速排序平均情形运行时间为Θ(n lg n ) C) 任何排序算法的最差情形运行时间都不可能比Ω(n lg n )更小D) 插入排序在最好情形下的运行时间为Θ(n )2. 对于课堂讲解的线性时间内找第i 小的元素的算法,()下列叙述中不正确的是?A) 算法第一步中可以按每五个元素一组找中位数;B) 算法第一步中可以按每七个元素一组找中位数;B) 算法第一步中不能按每三个元素一组找中位数;D) 如果要求的n 个元素的中位数,则中位数一定是第一步中找到的中位数中的某一个.3. 主方法可以求解满足形如下式的递推方程,()则下列关于方程中的约束中不准确的是?A) 对于系数a ,装订线内不要必须满足a≥ 1B) 对于系数b,必须满足b > 1C) 若对于常数ε>0,f(n)=O(n log b a-ε),则T(n)=Θ(n log b a)D) 若f(n)=O(n log b a),则T(n)=Θ(n log b a log n)4.下列哪些问题不能用贪心法求解?()A) 霍夫曼编码问题B) 单源最短路径问题C) 0-1背包问题D) 最小生成树问题可合并堆上可以不包含下列哪个操作?()A) DECREASE-KEY(H, x, k) B) UNION(H1, H2)C) INSERT(H, x) D) EXTRACT-MIN(H)5.不同堆上插入操作最差情形下的开销或平摊开销,()对二叉堆、二项堆和斐波那契堆,下列选项中描述错误的是?A) 二叉堆为Θ(lg n) B) 二项堆为O(lg n)C) 斐波那契堆为Θ(1)D) 三种堆的开销都是Θ(lg n)6.关于网络流的割,下列选项中错误的是?()割(S,T)是流网络G=(V,E)的一个划分,其中s∈S, t∈T.如果f 是G上的流,那么流经割的净流量为f(S,T),割(S,T)上的容量定义为c(S,T) .A) | f| ≤ c(S, T) B) f(S, T) = |f|C) f(s, V-s) = | f | D) f(S-s, V) = | f |7.下列随机算法一定有解但解不一定正确的是?()A) SherwoodB) LasVegas C) MonteCarloD) 三者都不是8.在快速排序算法中引入随机过程的主要目的是什么?()A) 改善确定性算法的平均运行时间B) 保证算法总能在O(n lg n)时间内结束C) 避免了算法最坏情况下的发生D) 改善了确定性算法最坏情形下的平均运行时间9.用Monte Carlo方法估计四后问题回溯算法的效率.()五次实验结果分别为<1,4,2>、<2,4,1,3>、<4,2>、<3,1,4,2>、<1,3>,则解空间中的结点数估计为?A) 16 B) 16.2 C) 17 D) 16.5三、社会名流(20分) Array在n个人中,一个被所有人知道但却不知道别人的人,被定义为社会名流.现在的问题是如果存在,试找出该社会名流.你可以使用的唯一方式是询问:“请问你知道那个人吗?”请给出提问次数为O(n)的算法,写出伪代码,分析算法的正确性,并给出算法运行时间的精确分析(即O(n)中隐藏的系数).(提示:当你问A是否认识B时,如果A认识B,则A不是社会名流;如果A不认识B,则B不是社会名流)四、地板覆盖(20分)用2*1的地板块覆盖3*n 的地面有多少种方案?如下图是一个覆盖的例子,函数fn 可用于求解这个问题,请说明fn 算法的正确性,并说明算法运行时间的上界和下界.int fn(int n) { if (n % 2 == 1) return 0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华南农业大学期末考试试卷(A卷)2007学年第一学期考试科目:算法分析与设计考试类型:(开卷)考试时间:120分钟学号姓名年级专业一、选择题(20分,每题2分)1、void hanoi(int n, int a, int b, int c){if (n > 0){hanoi(n-1, a, c, b);move(a,b);hanoi(n-1, c, b, a);}}上述算法的时间复杂度为A。
A.O(2n)B.O(nlog n)C.Θ(n!)D.Θ(n n)2、当一个确定性算法在最坏情况下的计算复杂性与其在平均情况下的计算复杂性有较大差别时,可以使用 B 来消除或减少问题的好坏实例间的这种差别。
(A)数值概率算法(B)舍伍德算法(C)拉斯维加斯算法(D)蒙特卡罗算法3、对于下列二分搜索算法,正确的是 D 。
(A)public static 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;else right = middle;}//whilereturn –1;}(B)public static int binarySearch(int[] a, int x, int n) {int left = 0, right = n-1;while(left+1 != right){int middle = (left + right) / 2;if(x >= a[middle]) left = middle;else right = middle;}//whileif(x == a[left]) return left;else return –1;}(C)public static int binarySearch (int[] a, int x, int n) {int left = 0, right = n-1;while(left < right-1){int middle = (left + right) / 2;if(x < a[middle])right = middle;else left = middle;}//whileif(x == a[left]) return left;else return –1;}(D)public static int binarySearch(int[] a, int x, int n){if(n > 0 && x >= a[0]){int left = 0, right = n-1;while(left < right){int middle = (left + right + 1) / 2;if(x < a[middle])right = middle - 1;else left = middle;}//whileif(x == a[left]) return left;}//ifreturn –1;}4、当输入规模为n时,算法增长率最快的是 C 。
(A)12n (B)100log2n (C)2n2(D)3nlog3n5、关于0-1背包问题以下描述正确的是。
(A)可以使用贪心算法找到最优解(B)能找到多项式时间的有效算法(C)使用教材介绍的动态规划方法可求解任意0-1背包问题(D)对于同一背包与相同的物品,做背包问题取得的总价值一定大于等于做0-1背包问题6、有n 个独立的作业{ 1 , 2 , .. , n },由m 台相同的机器进行加工处理。
作业i 所需的处理时间为ti。
现约定,任何作业可以在任何一台机器上加工处理,但未完工前不允许中断处理。
任何作业不能拆分成更小的作业。
多机调度问题要求给出一种作业调度方案,使所给的n 个作业在尽可能短的时间内由m 台机器加工处理完成(n > m)。
对于多级调度问题,使用以下哪种贪心策略比较合适B 。
(A)作业从小到大依次分配给空闲的机器(B)作业从大到小依次分配给空闲的机器(C)每个机器分配一样的作业数(D)使用以上几种贪心策略都能找到最优解,所以都合适7、使用二分搜索算法在1000个有序元素表中搜索一个特定元素,在最坏情况下,搜索总共需要比较的次数为。
(A)10 (B)11 (C)500 (D)10008、设q(n,m)是将正整数n划分成最大加数不大于m的若干不同正整数之和的划分数,则q(n,m)为 B 。
(A)1 (n=1 || m=1)q(n, n) (n < m)q(n,m)= 1 + q(n, n-1) (n = m)q(n, m-2) + q(n-m,m)(n > m > 1)(B)1 (n=1 || m=1)q(n, n) (n < m)q(n,m)= 1 + q(n, n-1) (n = m)q(n, m-1) + q(n-m,m)(n > m > 1)(C)1 (n=1 || m=1)q(n, n) (n < m)q(n,m)= 1 + q(n, n-1) (n = m)q(n, m-1) + q(n-m,m-1)(n > m > 1)(D)0 (n > 1 && m = 1)1 (n=1)q(n,m)= q(n, n) (n < m)1 + q(n, n-1) (n = m)q(n, m-1) + q(n-m,m-1)(n > m > 1)9、一个凸N边形,可以用N-3条互不相交的对角线将凸N边形分成N-2个三角形,这称为凸N边形的一种三角剖分。
例如N=5时,共有以下5种三角剖分:(1)(2)(3)(4) (5)当N =8时,总共有 B 种三角剖分。
多边形三角剖分公式D(n+1)\Dn =(4n-6)\n (Dn 表示凸n 边形的三角剖分数) D8=(D8\D7)*(D7\D6)*(D6\D5)=(22\7)*(3)*(14\5)=132(A )8 (B )132 (C )14 (D )14010、给定6个小区之间的交通图。
若小区i 与小区j 之间有路可通,则将顶点i 与顶点j 之间用边连接,边上的权值表示这条道路的长度。
现在打算在这n 个小区中选定一个小区建一所医院。
这家医院应建在小区 C ,才能使距离医院最远的小区到医院的路程最短?(A )A (B )B (C )C (D )EA二、简答题(30分,每题6分)1、试比较回溯法与分支限界算法,分别谈谈这两个算法比较适合的问题?不同点:求解目标,搜索方式,空间消耗。
回溯法的求解目标是找出解空间中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。
搜索方式:回溯法以深度优先的方式搜索解空间,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间。
回溯法:以深度优先方式系统搜索问题解的算法为回溯法,适合解组合数较大的问题。
分支限界法适合解决大量离散最优化的问题。
2、给定n件物品和一个背包,物品i的重量是wi,体积是vi(wi,vi均为整数),价值是pi;背包的容量为C,容积为D。
一件物品只能整个放进背包中或不放进背包中,也不允许重复放入。
0-1背包问题问应如何选择装入背包的物品,使得装入背包中的物品不超过背包容量容积限制,并且物品的总价值最大?设m(i,j,k)是背包容量为j,容积为k,可选择物品为1,2,…,i时0-1背包问题的最优值,请给出计算m(i,j,k)的递归关系式。
Wixi<=cVixi<=dMax (pixi求和)3、如下图,图中的5个顶点为某乡的5个村,图的边代表公路,现在要沿公路架设电线,使各村之间都通电话,问应该怎样架线,才能使所用的电线最少?请列出一种使用电线最少的架线方案(要求给出求解过程)。
A5-b9-c,b7-d,a5-e ,a4-e.Total:304、请解释什么是P问题,NP问题以及NP完全问题并描述这三者之间的关系;最后,请列举几个常见的NP完全问题。
下面引入P类问题的概念:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。
P是英文单词多项式的第一个字母。
接下来引入NP问题的概念。
这个就有点难理解了,或者说容易理解错误。
在这里强调(回到我竭力想澄清的误区上),NP问题不是非P类问题。
NP 问题是指可以在多项式的时间里验证一个解的问题。
NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。
——“NP问题”,实际上是在探讨NP问题与P类问题的关系。
很显然,所有的P类问题都是NP问题。
也就是说,能多项式地解决一个问题,必然能多项式地验证一个问题的解——既然正解都出来了,验证任意给定的解也只需要比较一下就可以了。
再回想前面讲的P和NP问题,联想起约化的传递性,自然地,我们会想问,如果不断地约化上去,不断找到能“通吃”若干小NP问题的一个稍复杂的大NP问题,那么最后是否有可能找到一个时间复杂度最高,并且能“通吃”所有的NP问题的这样一个超级NP问题?答案居然是肯定的。
也就是说,存在这样一个NP问题,所有的NP问题都可以约化成它。
换句话说,只要解决了这个问题,那么所有的NP问题都解决了。
这种问题的存在难以置信,并且更加不可思议的是,这种问题不只一个,它有很多个,它是一类问题。
这一类问题就是传说中的NPC 问题,也就是NP-完全问题。
NPC问题的出现使整个NP问题的研究得到了飞跃式的发展。
我们有理由相信,NPC问题是最复杂的问题。
再次回到全文开头,我们可以看到,人们想表达一个问题不存在多项式的高效算法时应该说它“属于NPC问题”。
NPC问题的定义非常简单。
同时满足下面两个条件的问题就是NPC问题。
首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。
证明一个问题是NPC问题也很简单。
先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性,则NPC问题定义的第二条也得以满足;至于第一个NPC问题是怎么来的,下文将介绍),这样就可以说它是NPC问题了。
既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题都能用这个算法解决了,NP也就等于P 了。
因此,给NPC找一个多项式算法太不可思议了。