‘壹’ 结构化程序设计语言的主要结构有分支结构
有三种结构,分别是:
顺序结构(一条条语句,有逻辑的顺序写下来;
循环结构(for/while/do....while 这三种循环结构; 可以嵌套循环
分支结构(switch/if/if-else/if--else if--else;可以嵌套分支.
由于模块相互独立,因此在设计其中一个模块时,不会受到其它模块的牵连,因而可将原来较为复杂的问题化简为一系列简单模块的设计。
模块的独立性还为扩充已有的系统、建立新系统带来了不少的方便,因为我们可以充分利用现有的模块作积木式的扩展。
按照结构化程序设计的观点,任何算法功能都可以通过由程序模块组成的三种基本程序结构的组合:
顺序结构、选择结构和循环结构来实现。
结构化程序设计的基本思想是采用"自顶向下,逐步求精"的程序设计方法和"单入口单出口"的控制结构
‘贰’ 算法的三种基本结构是
算法有顺序结构、条件分支结构、循环结构三种基本逻辑结构。
1、顺序结构:顺序结构是最简单的算法结构,语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的。
它是任何一个算法都离不开的一种基本算法结构。顺序结构在程序框图中的体现就是用流程线将程序框自上而下地连接起来,按顺序执行算法步骤。
2、条件结构:
条件结构是指在算法中通过对条件的判断,根据条件是否成立而选择不同流向的算法结构。
条件P是否成立而选择执行A框或B框。无论P条件是否成立,只能执行A框或B框之一,不可能同时执行A框和B框,也不可能A框、B框都不执行。一个判断结构可以有多个判断框。
3、循环结构
在一些算法中,经常会出现从某处开始,按照一定条件,反复执行某一处理步骤的情况,这就是循环结构,反复执行的处理步骤为循环体,显然,循环结构中一定包含条件结构。循环结构又称重复结构,循环结构可细分为两类:
一类是当型循环结构,如下左图所示,它的功能是当给定的条件P成立时,执行A框,A框执行完毕后,再判断条件P是否成立,如果仍然成立,再执行A框,如此反复执行A框,直到某一次条件P不成立为止,此时不再执行A框,离开循环结构。
另一类是直到型循环结构,如下右图所示,它的功能是先执行,然后判断给定的条件P是否成立,如果P仍然不成立,则继续执行A框,直到某一次给定的条件P成立为止,此时不再执行A框,离开循环结构。
(2)表达算法的分支结构扩展阅读
共同特点
(1)只有一个入口和出口
(2)结构内的每一部分都有机会被执行到,也就是说对每一个框来说都应当有一条从入口到出口的路径通过它,如图中的A,没有一条从入口到出口的路径通过它,就是不符合要求的算法结构。
(3)结构内不存在死循环,即无终止的循环。
‘叁’ 算法的三种基本结构是什么
算法有顺序结构、条件分支结构、循环结构三种基本逻辑结构。
三种基本结构的共同点:
(1)只有一个入口和出口。
(2)结构内的每一部分都有机会被执行到,也就是说对每一个框来说都应当有一条从入口到出口的路径通过它。
(3)结构内不存在死循环,即无终止的循环。
数据结构算法具有五个基本特征:输入、输出、有穷性、确定性和可行性。
1、输入:一个算法具有零个或者多个输出,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件,后面一句话翻译过来就是,如果一个算法本身给出了初始条件,那么可以没有输出。
2、输出:算法至少有一个输出。也就是说,算法一定要有输出,输出的形式可以是打印,也可以使返回一个值或者多个值等,也可以是显示某些提示。
3、有穷性:算法的执行步骤是有限的,算法的执行时间也是有限的。
4、确定性:算法的每个步骤都有确定的含义,不会出现二义性。
5、可行性:算法是可用的,也就是能够解决当前问题。
‘肆’ 计算机算法的三种基本结构
算法有顺序结构、条件分支结构、循环结构三种基本逻辑结构。
1、顺序结构
序贯结构是最简单的算法结构,在语句之间、框之间自上而下进行。它由依次执行的几个处理步骤组成。
它是任何算法都不能缺少的基本算法结构。方框图中的顺序结构是将程序框从上到下与流水线连接,按顺序执行算法步骤。
2、条件分支结构
条件结构是指通过判断算法中的条件,根据条件是否为真来选择不同流向的算法结构。
如果条件P为真,则选择执行框A或框B。无论P条件是否为真,只能执行A盒或B盒中的一个。不可能同时执行盒子A和B,盒子A和B不执行也是不可能的。一个判断结构可以有多个判断框。
3、循环结构
在某些算法中,经常会出现某一处理步骤按照某一条件从某一地点重复执行的情况。这就是循环结构。重复执行的处理步骤是循环体,显然,循环结构必须包含条件结构。循环结构又称重复结构,可分为两类:
一种是当循环结构,功能是P时形成时给定的条件下,执行一个盒子,一个盒子在执行后,确定条件P,如果仍然设置和执行一个盒子,等等来执行一个盒子,直到一个条件P并不不再执行一个盒子,这个时候离开循环结构。
另一种类型是直到型循环结构,作用是先执行,然后判断给定条件P是否为真。如果P仍然不为真,将继续执行盒子A,直到给定条件P为真一段时间。
(4)表达算法的分支结构扩展阅读:
共同特征
1、只有一个入口和出口
2、结构的每个部分都有执行的机会,即对于每个盒子,应该有一个从入口到出口的路径。如图A所示,从入口到出口没有经过它的路径,这是不符合要求的算法结构。
3、结构中不存在死循环,即没有结束循环。
‘伍’ 算法的三种基本结构是( )A、顺序结构,条件分支结构,重复结构B、逻辑...
本题是概念型题,算法的三种基本结构是顺序结构,选择结构,循环结构,由此对比四个选项得出正确选项即可.
解:算法的三种基本结构是顺序结构,选择结构,循环结构,
考查四个选项,应该选.
故选.
本题考查程序框图的三种基本逻辑结构的应用,求解本题的关键是对算法的三种基本结构理解并熟练掌握.
‘陆’ 表示算法的三种基本结构分别是
顺序结构,判断(分支)结构,循环结构.
‘柒’ 算法的三种基本逻辑结构是
顺序结构:是由若干个依次执行的步骤组成的,是任何一个算法都离不开的基本结构。
条件结构:在一个算法中,经常会遇到一些条件的判断,算法的流程根据条件是否成立有不同的流向,条件结构就是处理这种过程的结构。
循环结构:在一些算法中,经常会出现从某处开始,按照一定的条件反复执行某些步骤的情况,这就是循环结构。反复执行的步骤称为循环体。循环结构又分为直到型循环结构和当型循环结构。
程序框图的三种基本逻辑结构:顺序结构、条件结构、循环结构. 顺序结构是最简单的结构,也是最基本的结构,循环结构必然包含条件结构. 这三种基本逻辑结构是相互支撑的,它们共同构成了算法的基本结构,无论怎样复杂的逻辑结构,都可以通过它们来表达.
‘捌’ 什么是分支算法
分支限界算法
分支定界 (branch and bound) 算法是一种在问题的解空间树上搜索问题的解的方法。但与回溯算法不同,分支定界算法采用广度优先或最小耗费优先的方法搜索解空间树,并且,在分支定界算法中,每一个活结点只有一次机会成为扩展结点。
利用分支定界算法对问题的解空间树进行搜索,它的搜索策略是:
1 .产生当前扩展结点的所有孩子结点;
2 .在产生的孩子结点中,抛弃那些不可能产生可行解(或最优解)的结点;
3 .将其余的孩子结点加入活结点表;
4 .从活结点表中选择下一个活结点作为新的扩展结点。
如此循环,直到找到问题的可行解(最优解)或活结点表为空。
从活结点表中选择下一个活结点作为新的扩展结点,根据选择方式的不同,分支定界算法通常可以分为两种形式:
1 . FIFO(First In First Out) 分支定界算法:按照先进先出原则选择下一个活结点作为扩展结点,即从活结点表中取出结点的顺序与加入结点的顺序相同。
2 .最小耗费或最大收益分支定界算法:在这种情况下,每个结点都有一个耗费或收益。如果要查找一个具有最小耗费的解,那么要选择的下一个扩展结点就是活结点表中具有最小耗费的活结点;如果要查找一个具有最大收益的解,那么要选择的下一个扩展结点就是活结点表中具有最大收益的活结点。
又称分支定界搜索法。过程系统综合的一类方法。该法是将原始问题分解,产生一组子问题。分支是将一组解分为几组子解,定界是建立这些子组解的目标函数的边界。如果某一子组的解在这些边界之外,就将这一子组舍弃(剪枝)。分支定界法原为运筹学中求解整数规划(或混合整数规划)问题的一种方法。用该法寻求整数最优解的效率很高。将该法原理用于过程系统综合可大大减少需要计算的方案数日。
分支定界法的思想是:首先确定目标值的上下界,边搜索边减掉搜索树的某些支,提高搜索效率。
在竞赛中,我们有时会碰到一些题目,它们既不能通过建立数学模型解决,又没有现成算法可以套用,或者非遍历所有状况才可以得出正确结果。这时,我们就必须采用搜索算法来解决问题。
搜索算法按搜索的方式分有两类,一类是深度优先搜索,一类是广度优先搜索。我们知道,深度搜索编程简单,程序简洁易懂,空间需求也比较低,但是这种方法的时间复杂度往往是指数级的,倘若不加优化,其时间效率简直无法忍受;而广度优先搜索虽然时间复杂度比前者低一些,但其庞大的空间需求量又往往让人望而却步。
所以,对程序进行优化,就成为搜索算法编程中最关键的一环。
本文所要讨论的便是搜索算法中优化程序的一种基本方法枣“剪枝”。
什么是剪枝
相信刚开始接触搜索算法的人,都做过类似迷宫这样的题目吧。我们在“走迷宫”的时候,一般回溯法思路是这样的:
1、这个方向有路可走,我没走过
2、往这个方向前进
3、是死胡同,往回走,回到上一个路口
4、重复第一步,直到找着出口
这样的思路很好理解,编程起来也比较容易。但是当迷宫的规模很大时,回溯法的缺点便暴露无遗:搜索耗时极巨,无法忍受。
我们可不可以在向某个方向前进时,先一步判断出这样走会不会走到死胡同里呢?这样一来,搜索的时间不就可以减少了吗?
答案是:可以的。
剪枝的概念,其实就跟走迷宫避开死胡同差不多。若我们把搜索的过程看成是对一棵树的遍历,那么剪枝顾名思义,就是将树中的一些“死胡同”,不能到达我们需要的解的枝条“剪”掉,以减少搜索的时间。
搜索算法,绝大部分需要用到剪枝。然而,不是所有的枝条都可以剪掉,这就需要通过设计出合理的判断方法,以决定某一分支的取舍。在设计判断方法的时候,需要遵循一定的原则。
剪枝的原则
1、正确性
正如上文所述,枝条不是爱剪就能剪的。如果随便剪枝,把带有最优解的那一分支也剪掉了的话,剪枝也就失去了意义。所以,剪枝的前提是一定要保证不丢失正确的结果。
2、准确性
在保证了正确性的基础上,我们应该根据具体问题具体分析,采用合适的判断手段,使不包含最优解的枝条尽可能多的被剪去,以达到程序“最优化”的目的。可以说,剪枝的准确性,是衡量一个优化算法好坏的标准。
3、高效性 设计优化程序的根本目的,是要减少搜索的次数,使程序运行的时间减少。但为了使搜索次数尽可能的减少,我们又必须花工夫设计出一个准确性较高的优化算法,而当算法的准确性升高,其判断的次数必定增多,从而又导致耗时的增多,这便引出了矛盾。
因此,如何在优化与效率之间寻找一个平衡点,使得程序的时间复杂度尽可能降低,同样是非常重要的。倘若一个剪枝的判断效果非常好,但是它却需要耗费大量的时间来判断、比较,结果整个程序运行起来也跟没有优化过的没什么区别,这样就太得不偿失了。
综上所述,我们可以把剪枝优化的主要原则归结为六个字:正确、准确、高效。
剪枝算法按照其判断思路可大致分成两类:可行性剪枝及最优性剪枝。
对于分支定界算法,上界是已求得的可行解的目标函数值中的最小者,分为初始上界和在探测过程中产生的动态上界.分支定界法在求最优解的迭代过程中, 若某结点估计的下界不小于已知的上界, 则不必从该节点往下继续搜索. 因此若能产生一个较好的上界, 可以消除许多不必要的列举计算.
分支定界算法的实现
在描述分支定界算法步骤之前, 先对算法涉及到的有关术语进行定义如下:
p —— 分支层数;
C*—— 当前最优目标函数值;
P*—— 相应于C*的工件顺序;
P1—— 当前节点(现在需要进行分支的节点)所对应的部分序列.
分支定界算法的实施步骤如下:
步骤1 初始化: 设置p = 0, P 1 = Á (空集) , C* = ∞.设当前节点总是与P 1 相对应. 此时, 当前节点即根节点.
步骤2 计算从当前节点分支得到的各个子节点的下界, 并按下界值由小到大对各子节点排序. 令p ←p + 1.
步骤3 如果当前节点被探测尽, 令p ←p - 1, 转步骤6. 否则, 设当前层(第p 层) 各活动子节点中具有最小下界值的节点为Q , 则在P 1末尾加入Q 对应第p 位置上的工件, 此时的当前节点转为Q , 转步骤4.
步骤4 因为当前节点是同层同父节点具有最小下界值的节点, 如果当前节点下界值大于或等于C* , 则不必再搜索当前节点及其同层同父的活动节点, 这样, 当前节点的上一层节点(父节点)被探测尽, p ←p - 1, 去掉P 1 中的最后一个工件,转步骤6. 否则, 转步骤5.
步骤5 如果p = n, 则得到一个较优顺序.令P* = P 1, C* 是当前节点的下界值, p ←p - 1,去掉P 1 中最后一个工件, 转步骤6; 否则转步骤2.
步骤6 若p ≠ 0, 去掉P 1 中最后一个工件,转步骤3; 否则, 算法停止. C* 是最优的目标函数值, P* 是最优顺序.
‘玖’ 算法常用方法有分支结构吗
算法的三种基本结构是顺序结构、条件结构、循环结构,
考查四个选项,应该选B.
故选B.