计算机算法与设计复习题(含答案)
【课后习题及答案】《计算机算法设计与分析(第三版)课后习题答案详解
精品课程 课后习题答案第 1 章 算 法 概 述习蹬 1- 1函数的渐近表达式求下列函数的渐近表达式:3, f + 10 n ; 1l 匀10·+·2'' ; 分析与解答: 3矿+10n 二. ( ) ( 4 ) ;,l / 10+ 2 擒 = 0 ( 2” ) ; 2.1-t- l 过 一( ){ 1 ) ;lo 耟. ; t = ( ) ( l (1g1.1) ; I O l og 守 =('i ?!), 21 + 1;, 1; l o g n ' ; 10lv g3飞习题 1- 21() . l )和() ( 2 )的区别试论 ( )( l ) 和 () ( 2 )的区别. 分析与觞答:根据符号()的定义易知0 (1 ) = 0( 2)。
用()(1) 或 0 ( 2 ) 表示同一个函数时 ,差别仅在于 其中的祜数因子。
习题 1- 4 按渐近阶排列表达式按照渐近阶从低到高的顺序排列以下表达式,4n \排在哪一位?分析与解答:l ()g n , 3入 20:ri, 2 . n 2/又 义叫 应该3飞 n!。
, 函 数 排列 顺 序 如 下 : 2 .l og t , n23 、20n, 4,i-, 按 浙 近 阶从 低到尚 习题 1- 5箕法效宇( l ) 假设某符法在椋人栽模为”时的计算时间为 T (,t) = 3 X 2又 在某 台计算机上实现井 完成该算 法的时间为1 秒.现有另一台计算机,其运行速度为第一台的 64 倍,那么在这台新 机器 十用 同 一 符 法在 t 秒 内 能 招 轮人规模为多大的间题?( 2) 若上述芬法的计算时间改进为 T ( n )=r/'能解轴入规枑为多大的问烦?( 3) 若 上述算法的计算时间进一步改进为 T (11) = 8 ,f 秒和可能解输人规筷 为多 大的问 题?分析与解答 :其余 条 件不 变 ,则 在新 机 器上用i 秒时间其 余 条 件 不 变 ,那么在新机器上用"赁法 在 t · 秒1引能 解输人规模 为 n l 的问题。
算法与程序的设计会考习题带答案解析
2013-2014学年度《算法与程序设计》模块会考复习题一.选择题1.计算机解决问题的过程是____B__ _。
A.确定方案分析问题设计步骤设计程序B.分析问题确定方案设计步骤设计程序C.分析问题设计步骤确定方案设计程序D.设计程序分析问题设计步骤确定方案2.程序设计语言的分类是A。
A.机器语言、汇编语言和高级语言 B.顺序结构、分支结构和循环结构(程序的三种结构)C.低级语言、中级语言和高级语言 D.自然语言、伪代码和流程图3. 流程图中表示判断的是B。
A.矩形框 B.菱形框 C.圆形框 D.椭圆形框计算判断平行四边形:输出圆角矩形:开始和结束4. 在Java系统中设计程序,源代码文件的扩展名是___C____。
A.txt B.class C.java D.doc文本文件 java编译后,字节码 word文件图片文件jpg,gif,bmp 视频avi,wmv,flv,3gp,MP4 音频mp3,wma,wav,mid5. 用于将两个或多个字符串连接起来的运算符是D。
A. *B. ++C. &D. +&&与,都为真则真,否则假||或,其一为真就为真%取余数 14%4结果为2运算顺序,先乘除,再加减,再比较>=,在非,与,或。
6.下列可以作为合法变量名的是A。
A.$1 B. class C. 2b D. a*2(1)字母开头,后面跟着字母或数字(2)字母又包含$,_不能为java关键字。
区分大小写。
7.关于java规则错误的是A。
A.Java语句不区分大小写 B. 主类名必须与文件名一致C.main( )是程序执行的起点 D.Java语句以分号结尾8.要想正确的调试出程序,在保存Java源程序时主类名必须与文件名__ A。
A.完全一致 B.完全不同 C.可以相同也可以不同 D.大小写可以不一样9.下列不合法的运算符是 C 。
A .== B. != C. <> D. >===判断是否等于 !=不等于 >=大于或等于 <=小于或等于10. 下面关于算法的描述,错误的是 C 。
计算机算法试题(含答案)
算法设计与分析试卷一、填空题(20分,每空2分)1、算法的性质包括输入、输出、___、有限性。
2、动态规划算法的基本思想就将待求问题_____、先求解子问题,然后从这些子问题的解得到原问题的解。
3、设计动态规划算法的4个步骤:(1)找出____,并刻画其结构特征。
(2)_______。
(3)_______。
(4)根据计算最优值得到的信息,_______。
4、流水作业调度问题的johnson算法:(1)令N1=___,N2={i|ai>=bj};(2)将N1中作业依ai的___。
5、对于流水作业高度问题,必存在一个最优调度π,使得作业π(i)和π(i+1)满足Johnson不等式_____。
6、最优二叉搜索树即是___的二叉搜索树。
二、综合题(50分)1、当(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为∑ak(2<=k<=4)____(5分)2、由流水作业调度问题的最优子结构性质可知,T(N,0)=______(5分)3、最大子段和问题的简单算法(10分)int maxsum(int n,int *a,int & bestj){intsum=0;for (int i=1;i<=n;i++)for (int j=i;j<=n;j++)int thissum=0;for(int k=i;k<=j;k++)_____;if(thissum>sum){sum=thissum;______;bestj=j;}} return sum;}4、设计最优二叉搜索树问题的动态规划算法OptimalBinarysearchTree? (15分)Void OptimalBinarysearchTree(int a,int n,int * * m, int* * w){for(int i=0;i<=n;i++) {w[i+1][i]=a[i]; m[i+1][i]=____;}for(int r=0;r<n;r++)for(int i=1;i<=n-r;i++){int j=i+r;w[i][j]=w[i][j-1]+a[j]+b[j];m[i][j]=______;s[i][j]=i;for(int k=i+1;k<=j;k++){int t=m[i][k-1]+m[k+1][j];if(_____) {m[i][j]=t; s[i][j]=k;}}m[i][j]=t; s[i][j]=k;}}5、设n=4, (a1,a2,a3,a4)=(3,4,8,10), (b1,b2,b3,b4)=(6,2,9,15) 用两种方法求4个作业的最优调度方案并计算其最优值?(15分)三、简答题(30分)1、将所给定序列a[1:n]分为长度相等的两段a[1:n/2]和a[n/2+1:n],分别求出这两段的最大子段和,则a[1:n]的最大子段和有哪三种情形?(10分)答:2、由0——1背包问题的最优子结构性质,可以对m(i,j)建立怎样的递归式? (10分)3、0——1背包求最优值的步骤分为哪几步?(10分)参考答案:填空题:确定性分解成若干个子问题最优解的性质递归地定义最优值以自底向上的方式计算出最优值构造最优解 {i|ai<bi} ai的非减序排序;将N2中作业依bi的非增序排序min{bπ(i),aπ(i+1)}≥min{bπ(i+1),aπ(i)}最小平均查找长度综合题:20 min{ai+T(N-{i},bi)}(1=<i<=n) thissum+=a[k] besti=i 0 m[i+1][j] t<m[i][j]法一:min(ai,bj)<=min(aj,bi)因为 min(a1,b2)<=min(a2,b1)所以 1→2 (先1后2)由 min(a1,b3)<=min(a3,b1)得 1→3 (先1后3)同理可得:最后为1→3→4→2法二:johnson算法思想N1={1,3,4} N2={2}N¹1={1,3,4} N¹2={2}所以 N¹1→N¹2得:1→3→4→2简答题:1 、(1)a[1:n]的最大子段和与a[1:n/2]的最大子段和相同。
算法和程序设计练习题复习课程
算法和程序设计练习题一、选择题:1、使用计算机解题的步骤,以下描述正确的是:__B__。
A.正确理解题意→设计正确算法→寻找解题方法→编写程序→调试运行B.正确理解题意→寻找解题方法→设计正确算法→编写程序→调试运行C.正确理解题意→寻找解题方法→设计正确算法→调试运行→编写程序D.正确理解题意→寻找解题方法→设计正确算法→编写程序→调试运行2、计算机是一种按照设计好的程序,快速、自动地进行计算的电子设备,计算机开始计算之前,必须把解决某个问题的程序存贮在计算机的__C__中。
A.硬盘B.软盘C.内存D.CPU3、计算机程序由以下两部分即:__C__组成。
A.执行部分和数据部分B.数据部分和程序部分C.指令部分和数据部分D.程序部分和指令部分4、计算机程序由一系列指令构成,每条指令要求计算机执行__C__动作。
A.一组B.二个C.一个D.一个以上5、计算机程序由指令部分和数据部分组成,其中数据部分用来存储__D__。
A.计算所需的原始数据和计算的中间结果,不能存储计算的最终结果B.计算所需的原始数据,不能存储计算的中间结果和计算的最终结果C.计算的中间结果和计算的最终结果,不能存储计算所需的原始数据D.计算所需的原始数据、计算的中间结果或最终结果6、计算机能进行文稿编辑处理,是因为计算机的内存中装载并运行了文字处理程序;计算机能在因特网上浏览,是因为计算机的内存中装载并运行了浏览程序,所以说计算机干什么工作完全依赖于__B__。
A.硬件B.程序C.硬件与程序D.以上答案都对7、人们在设计计算机程序时,__C__。
A.只要考虑“数据的存贮”而不要考虑“计算的过程”B.不要考虑“数据的存贮”而只要考虑“计算的过程”C.必须同时考虑“数据的存贮”和“计算的过程”D.以上答案都错8、设计计算机程序时,要考虑“计算的过程”,其含义是在对解决问题的方法进行步骤化时,__C__。
A.只要指出“动作”而不必指出“动作的次序”B.不必指出“动作”而只要指出“动作的次序”C.必须同时指出“动作”和“动作的次序”D.以上说法都正确9、关于程序中指令的次序,以下说法正确的是:__D__。
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.算法的三种基本控制结构是顺序结构、分支结构和()。
算法题__计算机算法设计与分析期末试题4套(含答案)
(1)用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制(2)算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程(3)算法的三要素1、操作2、控制结构3、数据结构算法具有以下5个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法中每一条指令必须有确切的含义。
不存在二义性。
只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。
输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。
输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。
算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。
效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。
一般这两者与问题的规模有关。
经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。
利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代模型。
在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。
迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。
不能让迭代过程无休止地重复执行下去。
迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。
算法设计与分析复习题目及答案
分治法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、快速排序(分治法)int partition(float a[],int p,int r) {int i=p,j=r+1;float x=a[p];while(1){while(a[++i]<x);while(a[--j]<x);if(i>=j)break;swap(a[i],a[j]);}a[p]=a[j];a[j]=x;return j;}void Quicksort(float a[],int p,int r){//快速排序if(p<r){int q=partition(a,p,r);Quicksort(a,p,q-1);Quicksort(a,p+1,r);}}2、归并排序(分治法)void mergesort(Type a[],int left,int right) {if(left<rigth){int mid=(left+right)/2;//取中点mergesort(a,left,mid);mergesort(a,mid+1,right);mergesort(a,b,left,right);//合并到数组bmergesort(a,b,left,right);//复制到数组a}}3、背包问题(贪心算法)void knapsack(int n,float m,float v[],float w[],float x[]) {sort(n,v,w)//非递增排序int i;for(i=1;i<=n;i++)x[i]=0;float c=m;for(i=1;i<=n;i++){if(w[i]>c)break;x[i]=1;c-=w[i];}if(i<=n)x[i]=c/w[i];}4、活动安排问题(贪心算法)void Greadyselector(int n,Type s[],Type f[],bool A[]) {//s[i]为活动结束时间,f[j]为j活动开始时间A[i]=true;int j=1;for(i=2;i<=n;i++){if(s[i]>=f[j]){A[i]=true;j=i;}elseA[i]=false;}}5、喷水装置问题(贪心算法)void knansack(int w,int d,float r[],int n){//w为草坪长度d为草坪宽度r[]为喷水装置的喷水半径,//n为n种喷水装置,喷水装置的喷水半径>=d/2sort(r[],n);//降序排序count=0;//记录装置数for(i=1;i<=n;i++)x[i]=0;//初始时,所有喷水装置没有安装x[i]=0for(i=1;w>=0;i++){x[i]=1;count++;w=w-2*sqart(r[i]*r[i]-1);}count<<装置数:<<count<<end1;for(i=1;i<=n;i++)count<<喷水装置半径:<<r[i]<<end1;}6、最优服务问题(贪心算法)double greedy(rector<int>x,int s){rector<int>st(s+1,0);rector<int>su(s+1,0);int n=x.size();//st[]是服务数组,st[j]为第j个队列上的某一个顾客的等待时间//su[]是求和数组,su[j]为第j个队列上所有顾客的等待时间sort(x.begin(),x.end());//每个顾客所需要的服务时间升序排列int i=0,j=0;while(i<n){st[j]+=x[i];//x[i]=x.begin-x.endsu[j]+=st[j];i++;j++;if(j==s)j=0;}double t=0;for(i=0;i<s;i++)t+=su[i];t/=n;return t;}7、石子合并问题(贪心算法)float bebig(int A[],int n) {m=n;sort(A,m);//升序while(m>1){for(i=3;i<=m;i++)if(p<A[i])break;elseA[i-2]=A[i];for(A[i-2]=p;i<=m;i++){A[i-1]=A[i];m--;}}count<<A[1]<<end1}8、石子合并问题(动态规划算法)best[i][j]表示i-j合并化最优值sum[i][j]表示第i个石子到第j个石子的总数量|0f(i,j)=||min{f(i,k)+f(k+1,j)}+sum(i,j)int sum[maxm]int best[maxm][maxn];int n,stme[maxn];int getbest();{//初始化,没有合并for(int i=0;i<n;i++)best[i][j]=0;//还需要进行合并for(int r=1;r<n;r++){for(i=0;i<n-r;i++){int j=i+v;best[i][j]=INT-MAX;int add=sum[j]-(i>0!sum[i-1]:0);//中间断开位置,取最优值for(int k=i;k<j;++k){best[i][j]=min(best[i][j],best[i][k]+best[k+1][j])+add;}}}return best[0][n-1];}9、最小重量机器设计问题(回溯法)typedef struct Qnode{float wei;//重量float val;//价格int ceng;//层次int no;//供应商struct Qnode*Parent;//双亲指针}Qnode;float wei[n+1][m+1]=;float val[n+1][m+1]=;void backstack(Qnode*p){if(p->ceng==n+1){if(bestw>p->wei){testw=p->wei;best=p;}}else{for(i=1;i<=m;i++)k=p->ceng;vt=p->val+val[k][i];wt=p->wei+wei[k][i];if(vt<=d&&wt<=bestw){s=new Qnode;s->val=vt;s->wei=wt;s->ceng=k+1;s->no=1;s->parent=p;backstrack(S);}}}10、最小重量机器设计问题(分支限界法)typedef struct Qnode{float wei;//重量float val;//价格int ceng;//层次int no;//供应商struct Qnode*Parent;//双亲指针}Qnode;float wei[n+1][m+1]=;float val[n+1][m+1]=;void minloading(){float wt=0;float vt=0;float bestw=Max;//最小重量Qnode*best;s=new Qnode;s->wei=0;s->val=0;s->ceng=1;s->no=0;s->parent=null;Iinit_Queue(Q); EnQueue(Q,S);do{p=OutQueue(Q);//出队if(p->ceng==n+1){if(bestw>p->wei){bestw=p->wei;best=p;}}else{for(i=1;i<=m;i++){k=p->ceng;vt=p->val+val[k][i];wt=p->wei+wei[k][i];if(vt<=d&&wt<=bestw){s=new Qnode;s->ceng=k+1;s->wt=wt;s->val=val;s->no=i;s->parent=p;EnQueue(Q,S);}}}}while(!empty(Q));p=best;while(p->parent){count<<部件:<<p->ceng-1<<end1;count<<供应商:<<p->no<<end1;p=p->parent;}}11、快速排序(随机化算法—舍伍德算法)int partion(int a[],int l,int r){key=a[l];int i=l,j=r;while(1){while(a[++i]<key&&i<=r);while(a[--j]>key&&j>=l);if(i>=j)break;if(a[i]!=a[j])swap(a[i],a[j]);}if((j!=l)&&a[l]!=a[j])swap(a[l],a[j]);return j;}int Ranpartion(int a[],int l,int r) {k=rand()%(r-1+l)+1;swap(a[k],a[l]);int ans=partion(a,l,r);return ans;}int Quick_sort(int a[],int l,int r,int k){int p=Randpartion(a,l,r);if(p==k)return a[k];else if(k<p)return Quick_sort(a,l,p-1,k);else{int j=0;for(int i=p+1;i<=r;i++)b[j++]=a[i]return Quick_sort(b,1,j,k-p);}}12、线性选择(随机化算法—舍伍德算法)二、简答题1.分治法的基本思想分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。
计算机算法试题(含答案)
算法设计与分析试卷一、填空题(20分,每空2分)1、算法的性质包括输入、输出、___、有限性。
2、动态规划算法的基本思想就将待求问题_____、先求解子问题,然后从这些子问题的解得到原问题的解。
3、设计动态规划算法的4个步骤:(1)找出____,并刻画其结构特征。
(2)_______。
(3)_______。
(4)根据计算最优值得到的信息,_______。
4、流水作业调度问题的johnson算法:(1)令N1=___,N2={i|ai>=bj};(2)将N1中作业依ai的___。
5、对于流水作业高度问题,必存在一个最优调度π,使得作业π(i)和π(i+1)满足Johnson不等式_____。
6、最优二叉搜索树即是___的二叉搜索树。
二、综合题(50分)1、当(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为∑ak(2<=k<=4)____(5分)2、由流水作业调度问题的最优子结构性质可知,T(N,0)=______(5分)3、最大子段和问题的简单算法(10分)int maxsum(int n,int *a,int & bestj){intsum=0;for (int i=1;i<=n;i++)for (int j=i;j<=n;j++)int thissum=0;for(int k=i;k<=j;k++)_____;if(thissum>sum){sum=thissum;______;bestj=j;}}return sum;}4、设计最优二叉搜索树问题的动态规划算法OptimalBinarysearchTree? (15分)Void OptimalBinarysearchTree(int a,int n,int * * m, int * * w) {for(int i=0;i<=n;i++) {w[i+1][i]=a[i]; m[i+1][i]=____;} for(int r=0;r<n;r++)for(int i=1;i<=n-r;i++){int j=i+r;w[i][j]=w[i][j-1]+a[j]+b[j];m[i][j]=______;s[i][j]=i;for(int k=i+1;k<=j;k++){int t=m[i][k-1]+m[k+1][j];if(_____) {m[i][j]=t; s[i][j]=k;}}m[i][j]=t; s[i][j]=k;}}5、设n=4, (a1,a2,a3,a4)=(3,4,8,10), (b1,b2,b3,b4)=(6,2,9,15) 用两种方法求4个作业的最优调度方案并计算其最优值?(15分)三、简答题(30分)1、将所给定序列a[1:n]分为长度相等的两段a[1:n/2]和a[n/2+1:n],分别求出这两段的最大子段和,则a[1:n]的最大子段和有哪三种情形?(10分)答:2、由0——1背包问题的最优子结构性质,可以对m(i,j)建立怎样的递归式? (10分)3、0——1背包求最优值的步骤分为哪几步?(10分)参考答案:填空题:确定性分解成若干个子问题最优解的性质递归地定义最优值以自底向上的方式计算出最优值构造最优解{i|ai<bi} ai的非减序排序;将N2中作业依bi的非增序排序min{bπ(i),aπ(i+1)}≥min{bπ(i+1),aπ(i)}最小平均查找长度综合题:20 min{ai+T(N-{i},bi)}(1=<i<=n) thissum+=a[k] besti=i 0 m[i+1][j] t<m[i][j]法一:min(ai,bj)<=min(aj,bi)因为min(a1,b2)<=min(a2,b1)所以1→2 (先1后2)由min(a1,b3)<=min(a3,b1)得1→3 (先1后3)同理可得:最后为1→3→4→2法二:johnson算法思想N1={1,3,4} N2={2}N¹1={1,3,4} N¹2={2}所以 N¹1→N¹2得:1→3→4→2简答题:1 、(1)a[1:n]的最大子段和与a[1:n/2]的最大子段和相同。
计算机算法复习题及答案(前三章)
计算机算法复习题及答案(前三章)第一章1、什么是绝对误差?什么是相对误差?答:绝对误差等于准确值与近似值差的绝对值。
相对误差是近似数的误差与准确值的比值。
2、什么是绝对误差限?什么是相对误差限?答:绝对误差限为绝对误差的“上界”相对误差限为相对误差绝对值的“上界”3、有效数字与绝对误差限有何关系?有效数字与相对误差限有何关系?答:(绝对)若近似值的绝对误差限是某一位上的半个单位,且该位直到的第一位非零数字一共有几位。
则称近似值有n位有效数字。
(相对)设近似值=±0.···×有n位有效数字,≠0,则真相对误差限为×设近似值=±0.···×的相对误差限为×,≠0,则它有n位有效数字。
4、例1.11、例1.12、例1.15、例1.16.例1.11.设x=4.26972,那么取2位,=4.3,有效数字为2位取3位,=4.27,有效数字为3位取4位,=4.270,有效数字为4位取5位,=4.2697,有效数字为5位例1.12,若=3587.64是x的具有6位有效数字的近似值,则误差限是|-x|≤×=×若=0.0023156是x的具有5位有效数字的近似值,则误差限是|-x|≤×≤×例1.15,若=2.72来表示e的具有3位有效数字的近似值,则相对误差限是=×=×例1.16要使的近似值的相对误差限小于0.1%,要取几位有效数字?由定理1.1,≤×.由于=4.4···,已知=4,故只要取n=4,就有≤0.125×=0.1%只要对的近似值取4位有效数字,其相对误差限就小于0.1%。
此时由开方表得≈4.472 5、课本13~14页习题1、2、3、4.习题1:下列各数都是经过四舍五入得到的近似数,试指出它们是具有几位有效数字的近似数,并确定++和的误差限答:=1.1021,5位,=0.031,2位,=385.6,4位|++|-|++|≤|-|+|-|+|-|=×+×+×=0.5055 η()≈||η()+|η()|=1.1021××+0.031××=0.00055105+0.00000155=0.0005526η()≈||η()+||η() =0.001708255+0.21308256 =0.2148习题2.已测得某场地长L 的值为=110m ,宽d 的值为=80m,已知|L-|≤0.2m ,|d-|≤0.1m ,试求面积S=Ld 的绝对误差限和相对误差限。
算法设计复习题
一、单选题1、下面关于算法的描述,正确的是(d )A、一个算法只能有一个输入B、算法只能用框图来表示C、一个算法的执行步骤可以是无限的D、一个完整的算法,不管用什么方法来表示,都至少有一个输出结果2、一位爱好程序设计的同学,想通过程序设计解决“韩信点兵”的问题,他制定的如下工作过程中,更恰当的是(c )A、设计算法,编写程序,提出问题,运行程序,得到答案B、分析问题,编写程序,设计算法,运行程序,得到答案C、分析问题,设计算法,编写程序,运行程序,得到答案D、设计算法,提出问题,编写程序,运行程序,得到答案3、有5位运动员100米成绩依次为13.8,12.5,13.0,13.2,13.4,(c)若采用选择排序算法对其进行从小到大排序,则第二趟的排序结果是(A) 12.5 13.8 13.2 13.4 13.0 (B) 12.5 13.4 13.2 13.8 13.0(C) 12.5 13.0 13.8 13.2 13.4 (D) 12.5 13.2 13.8 13.4 13.04、下面说法正确的是(a )A、算法+数据结构=程序B、算法就是程序C、数据结构就是程序D、算法包括数据结构5、数列1,4,7,10,13,……的递推公式为( d )。
(A) f(1)=1;f(n)=n+3 (B) f(1)=1;f(n)=n*2-1(C) f(1)=1;f(n)=n*2+1 (D) f(1)=1;f(n)=f(n-1)+36、用选择排序法对数据7,6,3,9,2从大到小排序,共需经过多少次数据对调。
a(A) 3 (B) 4 (C) 5 (D) 107、动态规划算法的基本要素为(c )。
A、最优子结构性质与贪心选择性质B、重叠子问题性质与贪心选择性质C、最优子结构性质与重叠子问题性质D.、预排序与递归调用8、算法分析中,记号O表示( b ),记号Ω表示(a),记号Θ表示(d )。
A、渐进下界B、渐进上界C、非紧上界D、紧渐进界E、非紧下界9、以下关于渐进记号的性质是正确的有:(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))=⇔=10、下列算法中通常以自底向上的方式求解最优解的是( b )。
算法分析与设计期末复习题
一、选择题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程序时,假设需要使用到标准输入输出语句,必须在程序的开头写上( )语句。
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、什么是绝对误差?什么是相对误差?答:绝对误差等于准确值与近似值差的绝对值。
相对误差是近似数的误差与准确值的比值。
2、什么是绝对误差限?什么是相对误差限?答:绝对误差限为绝对误差的“上界”相对误差限为相对误差绝对值的“上界”3、有效数字与绝对误差限有何关系?有效数字与相对误差限有何关系?答:(绝对)若近似值的绝对误差限是某一位上的半个单位,且该位直到的第一位非零数字一共有几位。
则称近似值有n位有效数字。
(相对)设近似值=±0.···×有n位有效数字,≠0,则真相对误差限为×设近似值=±0.···×的相对误差限为×,≠0,则它有n位有效数字。
4、例1.11、例1.12、例1.15、例1.16.例1.11.设x=4.26972,那么取2位,=4.3,有效数字为2位取3位,=4.27,有效数字为3位取4位,=4.270,有效数字为4位取5位,=4.2697,有效数字为5位例1.12,若=3587.64是x的具有6位有效数字的近似值,则误差限是|-x|≤×=×若=0.0023156是x的具有5位有效数字的近似值,则误差限是|-x|≤×≤×例1.15,若=2.72来表示e的具有3位有效数字的近似值,则相对误差限是=×=×例1.16要使的近似值的相对误差限小于0.1%,要取几位有效数字?由定理1.1,≤×.由于=4.4···,已知=4,故只要取n=4,就有≤0.125×=0.1%只要对的近似值取4位有效数字,其相对误差限就小于0.1%。
此时由开方表得≈4.472 5、课本13~14页习题1、2、3、4.习题1:下列各数都是经过四舍五入得到的近似数,试指出它们是具有几位有效数字的近似数,并确定++和的误差限答:=1.1021,5位,=0.031,2位,=385.6,4位|++|-|++|≤|-|+|-|+|-|=×+×+×=0.5055 η()≈||η()+|η()|=1.1021××+0.031××=0.00055105+0.00000155=0.0005526η()≈||η()+||η() =0.001708255+0.21308256 =0.2148习题2.已测得某场地长L 的值为=110m ,宽d 的值为=80m,已知|L-|≤0.2m ,|d-|≤0.1m ,试求面积S=Ld 的绝对误差限和相对误差限。
东北师范大学“计算机科学与技术”《算法分析与设计》23秋期末试题库含答案
东北师范大学“计算机科学与技术”《算法分析与设计》23秋期末试题库含答案第1卷一.综合考核(共20题)1.十六进制数5A.8转换为十进制数是()。
A.89.6B.90.1C.90.5D.96.82.设变量定义为char s[]=“hello”,则数组s中有6个元素。
()A.错误B.正确3.顺序查找n个元素的顺序表,若查找成功,则比较关键字的次数最多为()次。
A.n/2B.(n+1)/2C.(n-1)/2D.n4.一个n个顶点的连通无向图,其边的个数至少为()。
A.n-1B.nC.n+1D.nlogn5.下列排序方法中,哪一个是稳定的排序方法?()A.直接选择排序B.二分法插入排序C.希尔排序D.快速排序6.快速排序的基本思想是将每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序﹔直到待排序数据元素全部插入完为止。
()A.错误B.正确7.字符数组的初始化可以逐个元素进行初始化。
()A.错误B.正确8.冒泡排序是一种不稳定排序方法。
()A.错误B.正确9.下列叙述中正确的是()。
A.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的B.顺序存储结构只针对线性结构,链式存储结构只针对非线性结构C.顺序存储结构能存储有序表,链式存储结构不能存储有序表D.链式存储结构比顺序存储结构节省存储空间10.()是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境等等。
A.VSB.VMC.Dev-C++D.IDE11.二进制的基数是()。
A.2B.8C.10D.1612.十进制算术表达式:3*512+7*64+4*8+5的运算结果,用二进制表示为()。
A.10111100101B.11111100101C.11110100101D.1111110110113.顺序结构、选择结构、循环结构三种结构共同特点是()A.只有一个入口B.只有一个出口C.结构内的每一部分都有机会被执行到(不存在死语句)D.结构内不存在死循环(永远执行不完的循环)14.对于任意一棵二叉树,如果度为0的结点个数为n₀,度为2的结点个数为n₂,则n₀=n₂+1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、一个算法的优劣可以用(时间复杂度)与(空间复杂度)与来衡量。
2、回溯法在问题的解空间中,按(深度优先方式)从根结点出发搜索解空间树。
3、直接或间接地调用自身的算法称为(递归算法)。
4、 记号在算法复杂性的表示法中表示(渐进确界或紧致界)。
5、在分治法中,使子问题规模大致相等的做法是出自一种(平衡(banlancing)子问题)的思想。
6、动态规划算法适用于解(具有某种最优性质)问题。
7、贪心算法做出的选择只是(在某种意义上的局部)最优选择。
8、最优子结构性质的含义是(问题的最优解包含其子问题的最优解)。
9、回溯法按(深度优先)策略从根结点出发搜索解空间树。
10、拉斯维加斯算法找到的解一定是(正确解)。
11、按照符号O的定义O(f)+O(g)等于O(max{f(n),g(n)})。
12、二分搜索技术是运用(分治)策略的典型例子。
13、动态规划算法中,通常不同子问题的个数随问题规模呈(多项式)级增长。
14、(最优子结构性质)和(子问题重叠性质)是采用动态规划算法的两个基本要素。
15、(最优子结构性质)和(贪心选择性质)是贪心算法的基本要素。
16、(选择能产生最优解的贪心准则)是设计贪心算法的核心问题。
17、分支限界法常以(广度优先)或(以最小耗费(最大效益)优先)的方式搜索问题的解空间树。
18、贪心选择性质是指所求问题的整体最优解可以通过一系列(局部最优)的选择,即贪心选择达到。
19、按照活结点表的组织方式的不同,分支限界法包括(队列式(FIFO)分支限界法)和(优先队列式分支限界法)两种形式。
20、如果对于同一实例,蒙特卡洛算法不会给出两个不同的正确解答,则称该蒙特卡洛算法是(一致的)。
21、哈夫曼编码可利用(贪心法)算法实现。
22概率算法有数值概率算法,蒙特卡罗(Monte Carlo)算法,拉斯维加斯(Las Vegas)算法和舍伍德(Sherwood)算法23以自顶向下的方式求解最优解的有(贪心算法)
24、下列算法中通常以自顶向下的方式求解最优解的是(C)。
A、分治法B、动态规划法C、贪心法D、回溯法
25、在对问题的解空间树进行搜索的方法中,一个活结点有多次机会成为活结点的是(回溯法)26、旅行售货员问题不能用()解决可
以用回溯法解决,分支限界法,NP完全性
理论与近似算法
27、贪心算法不能解决(0-1背包问题N
皇后问题)。
可以解决背包问题
28、投点法是(概率算法)的一种。
29、若线性规划问题存在最优解,它一定
不在(可行域内部)
30、n皇后问题可以用(回溯法)解决。
31、若L是一个NP完全问题,L经过多项
式时间变换后得到问题l,则l是( P类问
题).
32、算法与程序在性质上有所不同,下列
性质中,程序可以不满足哪个性质:()。
有限性!算法的四个性质:输入;输出;
确定性;有限性;
33、回溯法在解空间树T上的搜索方式:(分
支限界法)
34、动态规划算法的基本步骤不包括下列
哪一步:()包括:划分阶段:选择状态确
定决策并写出状态转移方程写出规划
方程(包括边界条件):
35、在调试程序过程中,下列哪一种错误
是计算机检查不出来的:(逻辑错误)
36、分治算法不包括以下哪项内容:()包
括:二分搜索技术;大整数乘法;Strassen
矩阵乘法;棋盘覆盖;合并排序和快速排
序;线性时间选择;最接近点对问题;循
环赛日程表
37、贪心算法不能解决(0-1背包问题N
皇后问题)。
38、舍伍德算法是(数值概率算法)的一
种。
39、若线性规划问题存在最优解,它一定
不在(可行域内部)
40、回溯法可以解决的问题包括(N皇后
问题;装载问题;批处理作业调度;符号
三角形问题;n后问题;0-1背包问题;最
大团问题;图的m着色问题;旅行售货员
问题;圆排列问题;电路板排列问题;连
续邮资问题)
判断题(每小题3分,共15分)
1)分支限界法类似于回溯法,也是一种在
问题的解空间树T上搜索问题解的算法,
两者的求解目标是相同的。
对;
2)优先队列式的分支限界法将活结点表组
织成一个优先队列,并按优先队列中规定
的结点优先级选取优先级最高的下一个结
点称为当前扩展结点。
对;
3)回溯法求解问题的所有解时,要回溯到
根,且根结点的所有子树都被搜索遍才结
束。
错,搜索到一个解就可结束;
4)动态规划法用一个表来记录所有已解决
的子问题的答案。
不管该子问题以后是否
被用到,只要它被计算过,就将其结果填
入表中。
对;
5)一个直接或间接地调用自身的算法称为
递归算法,而一个使用函数自身给出定义
的函数称为递归函数。
定义递归函数时可
以没有初始值。
错,应该有初始值;
6)一个直接或间接地调用自身的算法称为递
归算法,而一个使用函数自身给出定义的函数
称为递归函数。
定义递归函数时可以没有初始
值。
错,应该有初始值;
7)动态规划法用一个表来记录所有已解决的
子问题的答案。
不管该子问题以后是否被用
到,只要它被计算过,就将其结果填入表中。
在需要时从表中找出以求得的答案。
对;
8)动态规划算法是用于解最优化问题,采用
自顶向下的方式计算出最优解。
错;
9)贪心算法和动态规划算法都要求问题必须
具有最优子结构性质和贪心选择性质。
错;
10)队列式分支限界法将活结点表组织成一个
优先队列,并按队列的先进现出原则选取下一
个结点称为当前扩展结点。
错;
四、算法设计
说明:任意选择所使用的算法策略;要求:说
明所使用的算法策略;写出算法实现的主要步
骤;分析算法的时间复杂性。
0-1背包问题第三章,第五章,第六章
单源最短路径问题第四章,第六章
0-1背包问题:
算法策略:动态规划算法。
动态规划算法基本
思想是将待求解问题分解成若干个子问题,但
是经分解得到的子问题往往不是互相独立的。
不同子问题的数目常常只有多项式量级。
步骤:1找出最优解的性质,并刻划其结构特
征。
2递归地定义最优值。
3以自底向上的方
式计算出最优值。
4根据计算最优值时得到的
信息,构造最优解。
时间复杂度:改进后算法的计算时间复杂
性为O(2^n)。
当所给物品的重量w i(1≤i≤n)
是整数时,|p[i]|≤c+1,(1≤i≤n)。
在这种情
况下,改进后算法的计算时间复杂性为
O(min{nc,2^n})
单源最短路径问题:
算法策略:贪心算法。
贪心算法总是作出在当
前看来最好的选择。
也就是说贪心算法并不从
整体最优考虑,它所作出的选择只是在某种意
义上的局部最优选择。
当然,希望贪心算法得
到的最终结果也是整体最优的。
虽然贪心算法
不能对所有问题都得到整体最优解,但对许多
问题它能产生整体最优解。
如单源最短路经问
题,最小生成树问题等。
在一些情况下,即使
贪心算法不能得到整体最优解,其最终结果却
是最优解的很好近似。
贪心算法则通常以自顶
向下的方式进行,以迭代的方式作出相继的贪
心选择,每作一次贪心选择就将所求问题简化
为规模更小的子问题。
步骤:Dijkstra算法是解单源最短路径问题的
贪心算法。
其基本思想是,设置顶点集合S
并不断地作贪心选择来扩充这个集合。
一个顶
点属于集合S当且仅当从源到该顶点的最短
路径长度已知。
初始时,S中仅含有源。
设u
是G的某一个顶点,把从源到u且中间只经
过S中顶点的路称为从源到u的特殊路径,并
用数组dist记录当前每个顶点所对应的最短
特殊路径长度。
Dijkstra算法每次从V-S中取
出具有最短特殊路长度的顶点u,将u添加到
S中,同时对数组dist作必要的修改。
一旦S包含了所有V中顶点,dist就记录了从源到所有其它顶点之间的最短路径长度。
时间复杂度:对于具有n个顶点和e条边的带权有向图,如果用带权邻接矩阵表示这个图,那么Dijkstra算法的主循环体需要O(n)时间。
这个循环需要执行n-1次,所以完成循环需要O(n^2)时间。
算法的其余部分所需要时间不超过O(n^2)。