第二章 --程序的灵魂—算法

一、概念性东西

1 一个程序应该包含一下两个方面:
   1.1、对数据的描述。在程序要指定数据的类型和数据的组织形式,即数据结构。
   1.2、对数据的操作。即操作步骤,也就是算法。

2、作为程序设计人员,必须认真考虑和设计数据结构和操作步骤(即算法),有两个公式可以作为参照:
    数据结构 + 算法 = 程序   (沃斯提出)
    
    数据结构 + 算法 + 程序设计方法 + 语言工具和环境 = 算法  (这个公式主要强调程序应该进行结构化设计)

3、算法是灵魂,数据结构是加工对象,语言是工具,编程需要采用合适的方法。
  算法是解决“做什么”和“怎么做”的问题。
  程序中的操作语句,实际上就是算法的体现;
  
 4、算法概念(广义)
 广义的讲,为解决一个问题而采取的方法和步骤,就成为“算法”
 
算法有优劣之分,一般来说,希望采用简单的和运算步骤少的方法。但是既要保证算法正确,又要保证算法质量。

5、计算机算法两大类别
   5.1 数值算法。例如,求解数值解,方程的根、函数的微积分等
   5.2 非数值算法。例如图书检索、人事管理、行车调度管理等

二、算法特性

2.1 有穷性

  一个算法应该包含有限(在合理的范围内)的步骤,而不能是无限的。

2.2 确定性

  算法中的每一个步骤都应该是确定性的,而不是含糊的、模棱两可的。

2.3 有零个或多个输入

  所谓输入是指执行算法时需要从外界取得必要的信息。
  零个输入:无参函数
  多个输入:多参函数

2.4 有一个或多个输出

  算法的目的是为了求解,“解”就是输出。
  没有输出的算法是没有意义的。

2.5 有效性

  算法的每一个步骤都应当能有效地执行,并得到确定的结果。
  例如:若b=0,则a/b是不能被执行的。

三、算法表示

 3.1 自然语言表示算法
 3.2 结构化流程图表示算法
    三种基本结构:顺序、循环、当型
 
    常用的逻辑语句:
        if...else
        while
        for循环

3.3 伪代码表示

3.4 PAD表示

3.5 用计算机语言表示
   C、java 、python等等

四、结构化程序设计方法

问题:
   面临一个复杂的问题,是难以一下子写出一个层次分明、结构清晰、算法正确的程序的。该怎么办?

解决办法:结构化程序设计方法
   基本设计思路:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人门容易理解和处理的范围内。

采用以下方法保证得到结构化的程序:
   1、自顶向下
   2、逐步细化
   3、模块化设计
   4、结构化编码
  在程序设计中常采用模块化设计的方法,尤其是当程序比较复杂是,更有必要。具体如下:在拿到一个程序模块的任务书后,根据程序模块的功能将它划分为若干个子模块,如果嫌这些子模块的规模大,还可以划分为更小的模块。这个过程采用自顶向下的方法来实现。
  程序中的子模块在C语言中(任何语言中)通常用**函数**来实现,子模块通常代码不超过50行,打印时不超过一页。这样的规模便于组织和阅读。

所以,结构化程序设计方法用来解决人脑思维能力的局限性和所处理问题的复杂性之间的矛盾。
在设计好一个结构化算法以后,还要善于进行结构化编码(即用程序语言正确的实现三种基本结构),进行结构化编程序是不困难的。

五、习题

你可能感兴趣的:(第二章 --程序的灵魂—算法)