算法合集之《从一道题目的解法试谈网络流的构造与算法》

算法合集之《从一道题目的解法试谈网络流的构造与算法》
算法合集之《从一道题目的解法试谈网络流的构造与算法》

从一道题目的解法试谈网络流的构造与算法

福建师大附中江鹏

1. 引论

A. 对网络流算法的认识

网络流算法是一种高效实用的算法,相对于其它图论算法来说,模型更加复杂,编程复杂度也更高,但是它综合了图论中的其它一些算法(如最短路径),因而适用范围也更广,经常能够很好地解决一些搜索与动态规划无法解决的,看似NP的问题

B. 具体问题的应用

网络流在具体问题中的应用,最具挑战性的部分是模型的构造。这没用现成的模式可以套用,需要对各种网络流的性质了如指掌(比如点有容量、容量有上下限、多重边等等),并且归纳总结一些经验,发挥我们的创造性。

2. 例题分析

【问题1】项目发展规划(Develop)

Macrosoft?公司准备制定一份未来的发展规划。公司各部门提出的发展项目汇总成了一张规划表,该表包含了许多项目。对于每个项目,规划表中都给出了它所需的投资或预计的盈利。由于某些项目的实施必须依赖于其它项目的开发成果,所以如果要实施这个项目的话,它所依赖的项目也是必不可少的。现在请你担任Macrosoft?公司的总裁,从这些项目中挑选出一部分,使你的公司获得最大的净利润。

●输入

输入文件包括项目的数量N,每个项目的预算Ci和它所依赖的项目集合Pi。格式如下:第1行是N;

接下来的第i行每行表示第i个项目的信息。每行的第一个数是Ci,正数表示盈利,负数表示投资。剩下的数是项目i所依赖的项目的编号。

每行相邻的两个数之间用一个或多个空格隔开。

●输出

第1行是公司的最大净利润。接着是获得最大净利润的项目选择方案。若有多个方案,则输出挑选项目最少的一个方案。每行一个数,表示选择的项目的编号,所有项目按从小到大的顺序输出。

●数据限制

0≤N≤1000

-1000000≤Ci≤1000000

●输入输出范例

Sample Input Sample Output

6

-4

1

2 2 -1 1 2 -

3 3 5 3

4 3 1 2 3 4 6

【分析解答】

1. 抽象原题(图论模型)

给定包含N 个顶点的有向图G =(V, E ),每个顶点代表一个项目,顶点有一权值Ci 表示项目的预算。用有向边来表示项目间的依赖关系,从u 指向v 的有向边表示项目u 依赖于项目v 。

问题:求顶点集的一个子集V ’,满足对任意有向边〈u,v 〉∈E ,若u ∈V ’,则v ∈V ’,使得V ’中所有顶点的权值之和最大。

1 -1 5

-4 2 -3

2. 搜索

枚举V 的所有符合条件的子集,时间复杂度O(2n ),指数级。无论如何剪枝优化,也摆脱不了非多项式。

3. 动态规划

本题的结构是有向无环图,而非树形结构,不适合动态规划。如果一定要做,实质类似于搜索,由于状态数量众多,仍是指数级的时间复杂度。

4. 网络流

流网络的构造方法:

建立N 顶点代表N 个项目,另外增加源s 与汇t 。若项目i 必须依赖于项目j ,则从顶点i 向顶点j 引一条容量为无穷大的弧。对于每个项目i ,若它的预算C 为正(盈利),则从源s 向顶点i 引一条容量为C 的边;若它的预算C 为负(投资),则从顶点i 向汇t 引一条容量为-C 的边。

求这个网络的最小割(S, T ),设其容量C(S,T)=F 。设R 为所有盈利项目的预算之和(净利润上界),那么R-F 就是最大净利润;S 中的顶点就表示最优方案所选择的项目。

2 4

3 5 6 1

5 1

+∞ +∞ 1

+∞ +∞

3 +∞ +∞

2 4

最小割:S ={s,1,2,3,4,6};T ={5,t}

C(S,T)=5 净利润R- C(S,T)=8-5=3

证明算法的正确性:

● 建立项目选择方案与流网络的割(S,T )的一一对应关系:

任意一个项目选择方案都可以对应网络中的一个割(S,T ),S={s}+{所有选择的项目},T=V-S 。 对于任意一个不满足依赖关系的项目选择方案,其对应的割有以下特点:

存在一条容量为+∞弧〈u,v 〉,u 属于S 而v 属于T 。这时割的容量是无穷大,显然不可能是网络的最小割。

● 对于任意一个割(S,T ),如果其对应一个符合条件的方案,它的净利润是R-C(S,T)。导致实

际净利润小于上届R 的原因有:

1.未选取盈利项目i ,即顶点i 包含在T 中,那么存在一条从源s 至顶点i 的容量为Ci 的弧

2.选取投资项目i ,即顶点i 包含在S 中,那么存在一条从顶点i 至汇的容量为-Ci 的弧 C(S,T)就是上述两种弧的容量之和。

综上所述,割的容量越小,方案的净利润就越大。

● 最小割的求法:

根据最大流最小割定理,网络的最小割可以通过最大流的方法求得。

2 4

3 5 6 1 s

t

5, 3 1, 1

+∞,0 +∞,3 1,0

+∞,2 +∞,0

3,0 +∞,2 +∞,0

2,2 4,4

本题解题的关键在于流网络数学模型的建立。本题建模的独到之处在于:以前的网络流问题通常使用流量表示解答方案,而本题使用割表示解答方案,并充分利用了割的性质,流只是求得最小割的手段。这为我们开辟了一条构造网络流解决问题的新思路。

初看这个问题,要把它和网络流联系起来,有相当的难度。必须熟练地掌握流网络的各种性质,经过反复的类比尝试,才能发现它们之间的共性。

【联想思考】

作为本题的一个衍生,给每个项目估计一个完成时间,并假设公司同时只能进行一个项目。现在的问题是:如何选择一些能在给定时间内完成的项目,使得公司得到最大收益。这个问题我至今还没有找到有效算法,希望有兴趣的同学来共同研究。

3. 编程技巧

◆ 数据结构:邻接表

◆ 直接表示原问题

优点:节省空间

缺点:编程复杂度大,不具有通用性

2 4

3 5 6 1 s

t

小学数学速算技巧汇总

加法的神奇速算法 一、加大减差法 1、口诀 前面加数加上后面加数的整数,减去后面加数与整数的差等于和。 2、例题 1376+98=1474 计算方法:1376+100-2 3586+898=4484 计算方法:3586+1000-102 5768+9897=15665 计算方法:5768+10000-103 二、求只是数字位置颠倒两个两位数的和 1、口诀 一个数的十位数加上它的个位数乘以11等于和 2、例题 47+74=121 计算方法:(4+7)×11=121 68+86=154 计算方法:(6+8)× 11=154 58+85=143 计算方法:(5+8)× 11=143 三、一目三行加法 1、口诀 提前虚进一,中间弃9,末位弃10 2、例题 365427158 644785963 +742334452

——————— 1752547573 方法:从左到右,提前虚进1;第1列:中间弃9(3和6)直接写7;第2列:6+4-9+4=5 以此类推...最后1列:末位弃10(8和2)直接写3。 注意:中间不够9的用分段法,直接相加,并要提前虚进1;中间数字和大于19的,弃19,前边多进1,末位数字和大于19的,弃20,前边多进1。 减法的神奇速算法 一、减大加差法 1、例题 321-98=223 计算方法:321-100+2(减100,加2) 8135-878=7257 计算方法:8135-1000+122(减1000,加122) 91321-8987= 82334 计算方法:91321-10000+1013(减10000,加1013) 2、总结 被减数减去减数的整数,再加上减数与整数的差,等于差。 二、求只是数字位置颠倒两个两位数的差 1、例题 74-47=27

算法分析与设计试卷

《算法分析与设计》试卷(A) (时间90分钟满分100分) 一、填空题(30分,每题2分)。 1.最长公共子序列算法利用的算法是( B )。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法2.在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是( B ). A.回溯法 B.分支限界法 C.回溯法和分支限界法 D.回溯法求解子集树问题 3.实现最大子段和利用的算法是( B )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法4..广度优先是( A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法5.衡量一个算法好坏的标准是( C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 6.Strassen矩阵乘法是利用( A)实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 7. 使用分治法求解不需要满足的条件是( A )。 A 子问题必须是一样的 B 子问题不能够重复 C 子问题的解可以合并 D 原问题和子问题使用相同的方法解 8.用动态规划算法解决最大字段和问题,其时间复杂性为( B ). A.logn B.n C.n2 D.nlogn 9.解决活动安排问题,最好用( B )算法 A.分治 B.贪心 C.动态规划 D.穷举 10.下面哪种函数是回溯法中为避免无效搜索采取的策略( B ) A.递归函数 B.剪枝函数C。随机数函数 D.搜索函数11. 从活结点表中选择下一个扩展结点的不同方式将导致不同的分支限界法,以下除( C )之外都是最常见的方式. A.队列式分支限界法 B.优先队列式分支限界法 C.栈式分支限界法 D.FIFO分支限界法 12. .回溯算法和分支限界法的问题的解空间树不会是( D ). A.有序树 B.子集树 C.排列树 D.无序树 13.优先队列式分支限界法选取扩展结点的原则是( C )。 A、先进先出 B、后进先出 C、结点的优先级 D、随机14.下面是贪心算法的基本要素的是( C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解15.回溯法在解空间树T上的搜索方式是( A ). A.深度优先 B.广度优先 C.最小耗费优先 D.活结点优先 二、填空题(20分,每空1分)。 1.算法由若干条指令组成的又穷序列,且满足输入、输出、 确定性和有限性四个特性。 2.分支限界法的两种搜索方式有队列式(FIFO)分支限界法、优先队列式分支限界法,用一个队列来存储结点的表叫活节点表。

算法合集之《左偏树的特点及其应用》

左偏树的特点及其应用 广东省中山市第一中学黄源河 【摘要】 本文较详细地介绍了左偏树的特点以及它的各种操作。 第一部分提出可并堆的概念,指出二叉堆的不足,并引出左偏树。第二部分主要介绍了左偏树的定义和性质。第三部分详细地介绍了左偏树的各种操作,并给出时间复杂度分析。第四部分通过一道例题,说明左偏树在当今信息学竞赛中的应用。第五部分对各种可并堆作了一番比较。最后总结出左偏树的特点以及应用前景。 【关键字】左偏树可并堆优先队列 【目录】 一、引言 (2) 二、左偏树的定义和性质 (2) 2.1 优先队列,可并堆 (2) 2.1.1 优先队列的定义 (2) 2.1.2 可并堆的定义 (2) 2.2 左偏树的定义 (3) 2.3 左偏树的性质 (4) 三、左偏树的操作 (6) 3.1 左偏树的合并 (6) 3.2 插入新节点 (8) 3.3 删除最小节点 (9) 3.4 左偏树的构建 (9) 3.5 删除任意已知节点 (10) 3.6 小结 (13) 四、左偏树的应用 (15) 4.1 例——数字序列(Baltic 2004) (15) 五、左偏树与各种可并堆的比较 (18) 5.1 左偏树的变种——斜堆 (18) 5.2 左偏树与二叉堆的比较 (19) 5.3 左偏树与其他可并堆的比较 (19) 六、总结 (22) 在线代理|网页代理|代理网页|https://www.360docs.net/doc/5f8159911.html,

【正文】 一、引言 优先队列在信息学竞赛中十分常见,在统计问题、最值问题、模拟问题和贪心问题等等类型的题目中,优先队列都有着广泛的应用。二叉堆是一种常用的优先队列,它编程简单,效率高,但如果问题需要对两个优先队列进行合并,二叉堆的效率就无法令人满意了。本文介绍的左偏树,可以很好地解决这类问题。 二、左偏树的定义和性质 在介绍左偏树之前,我们先来明确一下优先队列和可并堆的概念。 2.1优先队列,可并堆 2.1.1优先队列的定义 优先队列(Priority Queue)是一种抽象数据类型(ADT),它是一种容器,里面有一些元素,这些元素也称为队列中的节点(node)。优先队列的节点至少要包含一种性质:有序性,也就是说任意两个节点可以比较大小。为了具体起见我们假设这些节点中都包含一个键值(key),节点的大小通过比较它们的键值而定。优先队列有三个基本的操作:插入节点(Insert),取得最小节点(Minimum) 和删除最小节点(Delete-Min)。 2.1.2可并堆的定义 可并堆(Mergeable Heap)也是一种抽象数据类型,它除了支持优先队列的三个基本操作(Insert, Minimum, Delete-Min),还支持一个额外的操作——合并操作: H ← Merge(H1,H2) Merge( ) 构造并返回一个包含H1和H2所有元素的新堆H。 前面已经说过,如果我们不需要合并操作,则二叉堆是理想的选择。可惜合并二叉堆的时间复杂度为O(n),用它来实现可并堆,则合并操作必然成为算法的瓶颈。左偏树(Leftist Tree)、二项堆(Binomial Heap) 和Fibonacci堆(Fibonacci Heap) 都是十分优秀的可并堆。本文讨论的是左偏树,在后面我们将看到各种可并堆的比较。 在线代理|网页代理|代理网页|https://www.360docs.net/doc/5f8159911.html,

算法设计与分析考试题及答案

算法设计与分析考试题 及答案 Company number:【WTUT-WT88Y-W8BBGB-BWYTT-19998】

一、填空题(20分) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:确定性 有穷性 可行性 0个或多个输入 一个或多个输出 2.算法的复杂性有时间复杂性 空间复杂性之分,衡量一个算法好坏的标准是 时间复杂度高低 3.某一问题可用动态规划算法求解的显着特征是 该问题具有最优子结构性质 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y 的一个最长公共子序列{BABCD}或{CABCD}或{CADCD } 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解 6.动态规划算法的基本思想是将待求解问题分解成若干_子问题 ,先求解_子问题 ,然后从这些子问题 的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为回溯法 背包问题的回溯算法所需的计算时间为o(n*2n ) ,用动态规划算法所需的计算时间为o(min{nc,2n }) 9.动态规划算法的两个基本要素是最优子结构 _和重叠子问题 10.二分搜索算法是利用动态规划法实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 ①问题具有最优子结构性质;②构造最优值的递归关系表达式; ③最优值的算法描述;④构造最优解; 2. 流水作业调度问题的johnson 算法的思想。 ①令N 1={i|a i =b i };②将N 1中作业按a i 的非减序排序得到N 1’,将N 2中作业按b i 的非增序排序得到N 2’;③N 1’中作业接N 2’中作业就构成了满足Johnson 法则的最优调度。 3. 若n=4,在机器M1和M2上加工作业i 所需的时间分别为a i 和b i ,且 (a 1,a 2,a 3,a 4)=(4,5,12,10),(b 1,b 2,b 3,b 4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。 步骤为:N1={1,3},N2={2,4}; N 1’={1,3}, N 2’={4,2}; 最优值为:38 4. 使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}。 解空间树为: 该问题的最优值为:16 最优解为:(1,1,0) 5. 设S={X 1,X 2,···,X n }是严格递增的有序集,利用二叉树的结点来存储S 中的元素,在表示S 的二叉搜索树中搜索一个元素X ,返回的结果有两种情形,(1)在二叉搜索树的内结点中找到X=X i ,其概率为b i 。(2)在二叉搜索树的叶结点中确定X ∈(X i ,X i+1),其概率为a i 。在表示S 的二叉搜索树T 中,设存储元素X i 的结点深度为C i ;叶结点(X i ,X i+1)的结点深度为d i ,则二叉搜索树T 的平均路长p 为多少假设二叉搜索树T[i][j]={X i ,X i+1,···,X j }最优值为m[i][j],W[i][j]= a i-1+b i +···+b j +a j ,则m[i][j](1<=i<=j<=n)递归关系表达式为什么 .二叉树T 的平均路长P=∑=+n i 1 Ci)(1*bi +∑=n j 0 dj *aj

小学数学加减法速算方法

小学数学加减法速算技巧_小学数学加减法速算方 法 (2)买一台电冰箱和一台洗衣机需要多少钱? (3)如果有200元钱买一只书包还剩多少钱? 他们调动了自己的经验和原有的知识结构去探究这个情境中所蕴涵的数学问题,并积极地从多角度去思考问题,发现问题,达到了 很好的教学效果。 我们知道,数学本来就是从客观世界的数量关系与空间形式中抽象、概括出来的。当学生从问题情境中,体会出一些数学思想时, 教师应以引导者、鉴赏者的身份,即教师只是提供一些建议或信息,而不是代替学生做出判断,同时鼓励学生有创造的想法,使学生在 最大的空间去学习、去思考、去探索。在教学加法时,可以分成了 两个步骤: 1、独立探索阶段 教师提出问题:“营业员很快地算出买一套运动服(113元)和一 个书包(59元)共需要172元,你们知道这是为什么吗?”学生想出 了很多计算方法: 113+59=113+60-1=172。 113+59=113+50+9=172。 113+59=112+(1+59)=172。 2、合作探讨阶段 ①每一种方法为什么这样做?请讲讲你的道理? ②这几种方法哪一种比较简便?为什么?

通过合作交流,学生各抒己见,这样既达到了增强学生合作意识地目的,又培养了学生的主体意识。从而归纳出多加几,减去几;先 凑整,再相加这两种方法。 在教孩子学减法时,可以让学生运用原型来揭示算理,探究规律。小学数学的内容大都可以直接在客观世界中找到它的原型。减数接 近整十、整百、整千数时,把它看作整十、整百、整千数,多减几,加上几这个数学知识我们可以在生活中找到一个合适的原型——收 付钱款时常常发生地“付整找零”的活动,并且在课堂中展示这个 活动:妈妈带了165元,其中有一张百元纸币,到商店买钱包花了 97元,妈妈怎样给钱呢?由老师扮妈妈,一名学生扮售货员,妈妈 拿出一百元钱给售货员,售货员找给妈妈3元。这里的道理明明白白,是学生所熟悉的常识。这个活动是原始的、最低层次的减法速 算法,是学习数学的原型。再引导学生摆这个过程用算式表示出来:165-100+3,从而概括出速算的方法。这样,由常识上升到了数学, 学生的学习由低层次上升到了高层次。 多种速算方法的学习使我们的速算更加完美无瑕。 1、运用数的特征“凑整” 我们认识物体都要抓住物体的特征,特征是它与别人不一样的地方,数字在数学王国中也有自己的一些特征,今天我们说的特征是 指这些数字都接近整十、整百、整千,像98、1002等等,在计算时 只要把这些数看成整十、整百、整千数,就能使计算简便。 2、移位“凑整” 3、定律:“凑整” 像乘法口诀一样,定律、规律、法则都是前人给我们创造和积累的财富,我们可以直接拿来使用,这样可以节省我们很多的时间。 定律“凑整”指在计算中运用我们平时学过的一些定律、规律和法 则进行“凑整”。 例:计算364+72+46+128378-57-43482-(39+82)

算法设计与分析试卷A及答案

考试课程: 班级: 姓名: 学号: ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------

考试课程: 班级: 姓名: 学号: ------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------

参考答案 一、填空 1、空间复杂度 时间复杂度 2、回溯法 3、递归算法 4、渐进确界或紧致界 5、原问题的较小模式 递归技术 6、问题的计算复杂性分析有一个共同的客观尺度 7、②③④① 8、问题的最优解包含其子问题的最优解 9、局部最优 10、正确的 三、简答题 1、高级语言更接近算法语言,易学、易掌握,一般工程技术人员只需要几周时间的培训就可以胜任程序员的工作; 高级语言为程序员提供了结构化程序设计的环境和工具,使得设计出来的程序可读性好,可维护性强,可靠性高; 高级语言不依赖于机器语言,与具体的计算机硬件关系不大,因而所写出来的程序可植性好、重用率高; 把繁杂琐碎的事务交给编译程序,所以自动化程度高,开发周期短,程序员可以集中时间和精力从事更重要的创造性劳动,提高程序质量。 2、 ①不能保证最后求得的解是最佳的;即多半是近似解。(少数问题除外) ②策略容易发现(关键:提取清楚问题中的维度), 而且运用简单,被广泛运用。 ③策略多样,结果也多样。 ④算法实现过程中,通常用到辅助算法:排序 3、解:① 因为:;01 -10n n )1-10n n (lim 22 2=+-+→∞n n 由渐近表达式的定义易知: 1-10n n 2 2+是n ;的渐近表达式。 ② 因为:;0n 1/ 5/n 1414)n 1/ 5/n 14(lim 22=++-++∞→n 由渐近表达式的定义易知: 14是14+5/n+1/ n 2的渐近表达式。 4、 找出最优解的性质,并刻划其结构特征。 递归地定义最优值。 以自底向上的方式计算出最优值。 根据计算最优值时得到的信息,构造最优解。 四、算法设计题 1、按照单位效益从大到小依次排列这7个物品为:FBGDECA 。将它们的序号分别记为1~7。则可生产如下的状态空间搜索树。其中各个节点处的限界函数值通过如下方式求得:【排序1分】 5x =6x =7x =

算法设计与分析考试题及答案

1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。 2.算法的复杂性有_____________和___________之分,衡量一个算法 好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显著特征是 ____________________________________。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。 6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为_____________。 8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。 9.动态规划算法的两个基本要素是___________和___________。 10.二分搜索算法是利用_______________实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 2.流水作业调度问题的johnson算法的思想。

5.《算法设计与分析》试题库

《算法分析与设计》试题库 (一) 一、 选择题 1.应用Johnson 法则的流水作业调度采用的算法是(D ) A. 贪心算法 B.分支限界法 C.分治法 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); 2.Hanoi 塔问题如下图所示。现要求将塔座A 上的的所有圆盘移到塔座 B 上,并 D.动态规划算法

3. 动态规划算法的基本要素为(C) A. 最优子结构性质与贪心选择性质 B ?重叠子问题性质与贪心选择性质 C.最优子结构性质与重叠子问题性质

D.预排序与递归调用 4. 算法分析中,记号0表示(B),记号0表示(A),记号。表示(D) A. 渐进下界 B. 渐进上界 C. 非紧上界 D. 紧渐进界 E. 非紧下界 5. 以下关于渐进记号的性质是正确的有:(A) A. f(n) - P(g(n)),g(n) - 心(h(n))二f(n) - P(h(n)) B. f(n) =0(g(n)),g(n) =0(h(n))二h(n) =0(f(n)) C. O(f(n ))+0(g( n)) = O(mi n{f(n ),g( n)}) D. f(n) =0(g(n)) = g(n) -0(f (n)) 6?能采用贪心算法求最优解的问题,一般具有的重要性质为:(A) A. 最优子结构性质与贪心选择性质 B ?重叠子问题性质与贪心选择性质 C. 最优子结构性质与重叠子问题性质 D. 预排序与递归调用 7.回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。 A. 广度优先 B.活结点优先 C.扩展结点优先 D.深度优先

算法分析期末试题集答案

1.应用Johnson 法则的流水作业调度采用的算法是(D ) A. 贪心算法 B. 分支限界法 C.分治法 D. 动态规划算法 2.Hanoi 塔问题如下图所示。现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置。移动圆盘时遵守Hanoi 塔问题的移动规则。由此设计出解Hanoi 塔问题的递归算确的为:(B ) 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. 深度优先 Hanoi 塔 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); }

算法分析期末试题集规范标准答案(6套)

《算法分析与设计》期末复习题(一) 一、 选择题 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); } D. void hanoi(int n, int C, int A, int B) { if (n > 0) { hanoi(n-1, A, C, B); move(n,a,b); hanoi(n-1, C, B, A); } 3.动态规划算法的基本要素为(C) A. 最优子结构性质与贪心选择性质 B.重叠子问题性质与贪心选择性质

几种简单的数学速算技巧窍门

几种简单的数学速算技巧 一、一种做多位乘法不用竖式的方法。我们都可以口算1X1 10X1,但是,11X12 12X13 12X14呢? 这时候,大家一般都会用竖式,通过竖式计算,得数是132、156、168。其中有趣的规律:积个位上的 数字正好是两个因数个位数字的积。十位上的数字是两个数字个位上的和。百位上的数字是两个因数十 位数字的积。例如: 12X14=168 1=1X1 6=2+4 8=2X4 如果有进位怎么办呢?这个定律对有进位的情况同样适用,在竖式时只要~满几时,就向下一位进几。 ~例如: 14X16=224 4=4X6的个位 2=2+4+6 2=1+1X1 试着做做看下面的题: 12X15= 11X13= 15X18= 17X19= 二、几十一乘以几十一的速算方法 例如:21×61=41×91=41×91= 51×61= 81×91= 41×51= 41×81= 71×81= 这些算式有什么特点呢?是“几十一乘以几十一”的乘法算式,我们可以用:先写十位积,再写十位 和(和满10 进1),后写个位积。“先写十位积,再写十位和(和满10 进1),后写个位积”就是一见到 几十一乘以几十一的乘法算式,如果十位数的和是一位数,我们先直接写十位数的积,再接着写十位数的 和,最后写上1 就一定正确;如果十位数的和是两位数,我们先直接写十位数的积加1 的和,再接着写十 位数的和的个位数,最后写一个1 就一定正确。 我们来看两个算式: 21×61=

41×91= 用“先写十位积,再写十位和(和满10 进1),后写个位积”这种速算方法直接写得数时的思维过程。 第一个算式,21×61=?思维过程是:2×6=12,2+6=8,21×61 就等于1281。 第二个算式,41×91=?思维过程是:4×9=36,4+9=13,36+1=37,41×91 就等于3731。 试试上面题目吧!然后再看看下面几题 61×91=81×81=31×71=51×41= 一、10-20的两位数乘法及乘方速算 方法:尾数相乘,被乘数加上乘数的尾数(满十进位) 【例1】 1 2 X 1 3 ---------- 1 5 6 (1)尾数相乘2X3=6 (2)被乘数加上乘数的尾数12+3=15 (3)把两计算结果相连即为所求结果 【例2】 1 5 X 1 5 ------------ 2 2 5 (1)尾数相乘5X5=25(满十进位) (2)被乘数加上乘数的尾数15+5=20,再加上个位进上的2即20+2=22 (3)把两计算结果相连即为所求结果 二、两位数、三位数乘法及乘方速算

算法分析与设计复习题及答案

算法分析与设计复习题及答案一、单选题 1.D 2.B 3.C 4.D 5.D 6.D 7.C 8.D 9.B 10.C 11.D 12.B 13.D 14.C 15.C 16.D 17.D 18.D 19.D 20.C 1.与算法英文单词algorithm具有相同来源的单词是()。 A logarithm B algiros C arithmos D algebra 2.根据执行算法的计算机指令体系结构,算法可以分为()。 A精确算法与近似算法B串行算法语并行算法 C稳定算法与不稳定算法D32位算法与64位算法 3.具有10个节点的完全二叉树的高度是()。 A6B5C3D 2 4.下列函数关系随着输入量增大增加最快的是()。 Alog2n B n2 C 2n D n! 5.下列程序段的S执行的次数为( )。 for i ←0 to n-1 do for j ←0 to i-1 do s //某种基本操作 A.n2 B n2/2 C n*(n+1) D n(n+1)/2 6.Fibonacci数列的第十项为( )。 A 3 B 13 C 21 D 34 7.4个盘子的汉诺塔,至少要执行移动操作的次数为( )。 A 11次 B 13次 C 15次 D 17次 8.下列序列不是堆的是()。 A 99,85,98,77,80,60,82,40,22,10,66 B 99,98,85,82,80,77,66,60,40,22,10 C 10,22,40,60,66,77,80,82,85,98,99 D 99,85,40,77,80,60,66,98,82,10,22 9.Strassen矩阵乘法的算法复杂度为()。 AΘ(n3)BΘ(n2.807) CΘ(n2) DΘ(n) 10.集合A的幂集是()。 A.A中所有元素的集合 B. A的子集合 C. A 的所有子集合的集合 D. 空集 11.与算法英文单词algorithm具有相同来源的单词是()。 A logarithm B algiros C arithmos D algebra 12.从排序过程是否完全在内存中显示,排序问题可以分为()。 A稳定排序与不稳定排序B内排序与外排序 C直接排序与间接排序D主排序与辅助排序 13.下列()不是衡量算法的标准。 A时间效率B空间效率 C问题难度D适应能力 14.对于根树,出度为零的节点为()。 A0节点B根节点C叶节点D分支节点 15.对完全二叉树自顶向下,从左向右给节点编号,节点编号为10的父节点编号为()。 A0B2C4D6 16.下列程序段的算法时间的复杂度为()。 for i ←0 to n do for j ←0 to m do

《算法分析与设计》期末试题及参考答案

《算法分析与设计》期末试题及参考答案 一、简要回答下列问题: 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∈Dn 6.简述二分检索(折半查找)算法的基本过程。 6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较, 如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]

算法分析与设计》期末考试复习题纲(完整版)

《算法分析与设计》期末复习题 一、选择题 1.算法必须具备输入、输出和( D )等4个特性。 A.可行性和安全性B.确定性和易读性 C.有穷性和安全性D.有穷性和确定性 2.算法分析中,记号O表示( B ),记号Ω表示( A ) A.渐进下界 B.渐进上界 C.非紧上界 D.紧渐进界 3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。在某台计算机上实现并完 成概算法的时间为t秒。现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题( B )解题方法:3*2^n*64=3*2^x A.n+8 B.n+6 C.n+7 D.n+5 4.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1, T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。 A.O(logN) B.O(N) C.O(NlogN) D.O(N2logN) 5.直接或间接调用自身的算法称为( B )。 A.贪心算法B.递归算法 C.迭代算法D.回溯法 6.Fibonacci数列中,第4个和第11个数分别是( D )。 A.5,89 B.3,89 C.5,144 D.3,144 7.在有8个顶点的凸多边形的三角剖分中,恰有( B )。 A.6条弦和7个三角形B.5条弦和6个三角形 C.6条弦和6个三角形D.5条弦和5个三角形 8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。 A.重叠子问题B.最优子结构性质 C.贪心选择性质D.定义最优解 9.下列哪个问题不用贪心法求解( C )。 A.哈夫曼编码问题B.单源最短路径问题 C.最大团问题D.最小生成树问题 10.下列算法中通常以自底向上的方式求解最优解的是( B )。 A.备忘录法B.动态规划法 C.贪心法D.回溯法 11.下列算法中不能解决0/1背包问题的是( A )。 A.贪心法B.动态规划 C.回溯法D.分支限界法 12.下列哪个问题可以用贪心算法求解( D )。

算法分析考试题

1. )(n T 给定数组a[0:n-1],试设计一个算法,在最坏情况下用n+[logn]-2次比较找出 a[0:n-1] 中的元素的最大值和次大值. (算法分析与设计习题 2.16 ) (分治法) a 、 算法思想 用分治法求最大值和次大值首先将问题划分,即将划分成长度相等的两个序列,递归求出左边的最大值次大值,再求出右边的的最大值次大值,比较左右两边,最后得出问题的解。 b 、复杂度分析: 把问题划分为左右两种的情况,需要分别递归求解,时间复杂度可如下计算: 有递推公式为: T(n)=1 n=1 T(n)= 2T(n/2)+1 n>1 所以,分治算法的时间复杂度是n+[logn]-2,当n 为奇数时,logn 取上线,当n 为偶数时,logn 取下线。//不知道为什么会-2! C 、代码实现: #include int a[100]; void maxcmax(int i,int j,int &max,int &cmax) { int lmax,lcmax,rmax,rcmax; int mid; if (i==j) { max=a[i]; cmax=a[i]; } else if (i==j-1) if (a[i]rmax)

if(lcmax>rmax) { max=lmax; cmax=lcmax; } else { max=lmax; cmax=rmax; } else if(rcmax>lmax) { if(rmax==rcmax) { max=rmax; cmax=lmax; } else { max=rmax; cmax=rcmax; } } else { max=rmax; cmax=lmax; } } } int main() { int n; int max,cmax; printf("输入数组长度"); scanf("%d",&n); printf("输入数组:\n"); for(int i=0;i

(完整版)常用的巧算和速算方法

小学数学速算与巧算方法例解【转】 速算与巧算 在小学数学中,关于整数、小数、分数的四则运算,怎么样才能算得既快又准确呢?这就需要我们熟练地掌握计算法则和运算顺序,根据题目本身的特点,综合应用各种运算定律和性质,或利用和、差、积、商变化规律及有关运算公式,选用合理、灵活的计算方法。速算和巧算不仅能简便运算过程,化繁为简,化难为易,同时又会算得又快又准确。 一、“凑整”先算 1.计算:(1)24+44+56 (2)53+36+47 解:(1)24+44+56=24+(44+56) =24+100=124 这样想:因为44+56=100是个整百的数,所以先把它们的和算出来. (2)53+36+47=53+47+36 =(53+47)+36=100+36=136 这样想:因为53+47=100是个整百的数,所以先把+47带着符号搬家,搬到+36前面;然后再把53+47的和算出来. 2.计算:(1)96+15 (2)52+69 解:(1)96+15=96+(4+11) =(96+4)+11=100+11=111 这样想:把15分拆成15=4+11,这是因为96+4=100,可凑整先算. (2)52+69=(21+31)+69 =21+(31+69)=21+100=121 这样想:因为69+31=100,所以把52分拆成21与31之和,再把31+69=100凑整先算. 3.计算:(1)63+18+19 (2)28+28+28 解:(1)63+18+19 =60+2+1+18+19 =60+(2+18)+(1+19) =60+20+20=100 这样想:将63分拆成63=60+2+1就是因为2+18和1+19可以凑整先算. (2)28+28+28 =(28+2)+(28+2)+(28+2)-6 =30+30+30-6=90-6=84 这样想:因为28+2=30可凑整,但最后要把多加的三个2减去. 二、改变运算顺序:在只有“+”、“-”号的混合算式中,运算顺序可改变 计算:(1)45-18+19 (2)45+18-19 解:(1)45-18+19=45+19-18 =45+(19-18)=45+1=46 这样想:把+19带着符号搬家,搬到-18的前面.然后先算19-18=1. (2)45+18-19=45+(18-19)

算法合集之《对块状链表的一点研究》

在线代理|网页代理|代理网页|https://www.360docs.net/doc/5f8159911.html, 1 对块状链表的一点研究 山西大学附中 苏煜 【摘要】 本文主要介绍了块状链表的概念,如何扩展块状链表,讨论了块状链表的性能以及在信息学竞赛中应用块状链表的利与弊,最后简要介绍了块状链表思想在实际生活中的应用。 【关键词】 块状链表 分块大小 性能 块状链表的扩展 模拟 骗分 一、什么是块状链表 我们先从题目入手,看看什么是块状链表: NOI2003 editor 【题目大意】 一些定义: 文本:由0个或多个ASCII 码在闭区间[32, 126]内的字符(即空格和可见字符)构成的序列。 光标:在一段文本中用于指示位置的标记,可以位于文本首部,文本尾部或文本的某两个字符之间。 文本编辑器:为一个包含一段文本和该文本中的一个光标的,并可以对其进行如下六条操作的程序。如果这段文本为空,我们就说这个文本编辑器是空的。 操作名称 输入文件中的格式 功能 MOVE(k) Move k 将光标移动到第k 个字符之后,如果k =0,将光标移 到文本开头 INSERT(n, s) Insert n ? S 在光标处插入长度为n 的字符串s ,光标位置不变,n ≥ 1 DELETE(n) Delete n 删除光标后的n 个字符,光标位置不变,n ≥ 1 GET(n) Get n 输出光标后的n 个字符,光标位置不变,n ≥ 1 PREV() Prev 光标前移一个字符 NEXT() Next 光标后移一个字符 比如一个空的文本编辑器依次执行操作INSERT(13, “Balanced tree ”),MOVE(2),DELETE(5),NEXT(),INSERT(7, “ editor ”),MOVE(0),GET(16)后,会输出“Bad editor tree ”。

《算法分析与设计》期末复习题

一、选择题 1.一个.java文件中可以有()个public类。 A.一个B.两个C.多个D.零个 2.一个算法应该是() A.程序B.问题求解步骤的描述 C.要满足五个基本特性D.A和C 3.用计算机无法解决“打印所有素数”的问题,其原因是解决该问题的算法违背了算法特征中的()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,67 C.3,15,20,67,130,98 D.3,15,20,67,98,130 5.下列关于算法的描述,正确的是() 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时表示输入结束。

相关文档
最新文档