« 十年之005:生活中的算法十年之007:用文字图表符号呈现的算法 »

十年之006:算法的基本形式

    当我们面对生活时,首先是面对生活中的各种各样的问题。在面对问题时,会先想到的解决问题的方法与步骤。许多生活中习以为常的简单活动中,也会包含着许多不用停顿思考的系列方法与步骤。
洗手的方法与步骤
 
    这些方法与步骤后面,往往存在着一般性的规律和规则。当我们有精力开始注意到它的时候,就开始对解决问题非常熟练了。从面对问题茫然无知的新手状态到面对问题轻车熟路的熟手状态,如何缩短这个过程其实也是人生中的一个重大问题。
    人们发现任何复杂的算法都可以由顺序结构、分支(选择)结构和循环结构这三种基本结构组成。因此,我们构造一个算法的时候,也仅以这三种基本结构作为“建筑单元”。用这样的“建筑单元”就可以把复杂的问题变得简单化。
    正因为整个算法都是由三种基本结构组成的,就像用模块构建的一样。所以结构清晰,易于正确性验证,易于纠错,这种方法就是结构化的设计方法。
  1.        算法的顺序结构
    顺序就是按照一定的次序,一步步地解决问题。例如,每天早晨起床前后的活动可以是:
   
    在顺序结构中,有些环节是可以改变前后次序的,而有些环节则必须按照一定次序执行。如“刷牙”和“洗脸”两个环节,是可以改变先后次序的。可以先刷牙,然后再洗脸。也可以先洗脸、然后刷牙。但是“起床”、“上学”两个环节中必然是先“起床”,后“上学”。生活中是不会出现先“上学”,后“起床”的。
    顺序是最基本的算法形式。
 
  2.        分支结构
      一部分问题在不同的条件下会有着不同的步骤和方法,这就是分支结构。在生活中的“选择”、“判断”都是典型的分支结构。例如:打算明天去公园玩,但如果天气不好,那只好在家中看电视。这个过程可以表示成为下图。
 
    有了分支结构后就有了判断功能。日常生活中很多情况下都是分支、判断的活动。对人来说判断-选择往往是一件很容易,但又很困难的事情。
 
3.        循环结构
    由于没有达到条件而不停地重复做同一事情,这样的过程就是一种循环结构。在现实生活中,我们也经常会碰到这样的事情。例如:在跳绳测试中,会以时间为限。还没有到时间之前,需要不停地跳下去。
 
 
     在算法中,顺序结构、条件分支结构、循环结构并不彼此孤立。三种基本结构既可以并列,也可以相互包含,在循环中常常伴有条件分支和顺序结构,条件分支结构中也常常伴有循环和顺序结构。正是这三种基本结构按照不同的结构组成了不同的算法。
 
4.        模块化的基本思路
    算法经常是环环相扣的、模块化的结构。
    模块化其实就是把一个大的问题按一定的分类方式分成若干个小问题,直到问题被分解到最简单、最单一的结构,就好像是搭积木一样。
    例如:前面所说的起床后的活动,可以分为起床、刷牙、洗脸、吃饭、上学几个顺序,这样就把一个复杂的程序分解成为若干个相对简单一些的部分了。如果需要再进一步的细化,那么我们就要把这些列举出来的部分再进一步细分。在这个整个活动中,可将“洗脸”这一个部分再分解为下列几个动作序列:1、拿毛巾;2、洗毛巾;3、拧干毛巾;4、擦脸;5、洗毛巾;6、拧干毛巾;7、放毛巾。
 
 
    有了顺序、分支、循环三种基本的算法结构,根据从顶及底的设计思路,利用模块化的设计方法就可以分析与设计生活中的算法。这样设计出来的解决方案将会是从全局的角度来思考的、整体的解决方案。
    明确的算法对于人的问题解决来说有着重要作用。在这其中就有一个重要问题。如何把算法明确表达出来?
 
  • 相关文章:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们

日历

最新评论

最近发表

Powered By Z-Blog 1.7 Laputa Build 70216

Copyright 2003-2007 芸心芹意 bean.being.org.cn Some Rights Reserved.