1 算法

算法是解决问题的方法、是程序的灵魂。程序对算法的具体实现,正确的程序应当表达解决问题的过程和方法。

计算机程序 = 数据结构 + 算法

算法定义:

  • 算法是有限的、有序的、有效的计算机指令集合。计算机按照规定的顺序来执行这些指令,可以解决某个问题。

算法主要特征:

  • 输入输出的数据必须是由字母组成的有限符号串;

  • 处理过程必须可以明确地分解成有限多个不能再分解的步骤;

  • 算法的继续进行和结束要有明确的条件加以规定;

  • 算法的变换规则必须是非常简单而机械。

算法的基本性质

  • 名称:每一个算法都应该有一个名称(便于描述和交流)。

  • 输入:算法应该有数据的输入(对输入的数据进行处理)。

  • 输出:算法要有输出(对数据加工后的结果)。

  • 有效性:算法每一步都应是可执行的,理论上通过人工有限次运算也可以完成。

  • 正确性:算法的结果必须是正确的 。

  • 有限性:算法必须在执行有限条指令后结束 。

算法描述方法

  • 自然语言

  • 结构化流程图

  • 伪代码

  • N-S图

2 算法描述

以下介绍几种常用的算法描述方法:

  • 流程图:采用一些图形框和带箭头的线条组成,用流程图来表示算法中描述的各种操作,简洁明了,更容易转变成计算机程序来实现。

  • 常用的流程图符号:

  • 流程图表示的程序结构包括:

    (1)顺序结构:(2)分支结构:

    (3)循环结构:

  • 程序流程图示例如下 :

分析题目要求,画出程序流程图如下:

  • NS图:也被称作为盒图,英文名称叫(Nassi Shneiderman图),它是一种可见化建模的结构化编程,NS图与流程图很像,但NS图是在流程图中去掉了流程线,将全部的算法写在一个矩形阵内,在框内中包含其他框的流程图形式。

  • 表示的程序结构包括:顺序结构框,选择结构框和循环结构框

  • 上述流程图示例用NS图描述如下:

  • 伪码:介于自然语言和计算机语言之间的文字和符号来描述算法,可以用英文,也可以用中英文混用。常用的描述方法如下:

    (1)赋值语句:a ← 5

    (2)分支语句:if - then - else

    if i=10 
    then 指令1
    else 指令2 //else 和 then 要对齐

    或:

    if i=10 
    then 指令1 //if 后面必定跟上then,else后面不用跟then
    elseif i=9 //elseif 要连在一起写
        then 指令2
             指令3
        else 指令4 //else 跟在 elseif 的 then 对齐

    (3)循环语句:while和for

    while time<10 do
      指令1 //while后面循环体要缩进
      指令2
    

    或:

    for init ← 1 to limit by incr do //包括循环初始值init、终值limit以及步长incr
      指令1 //for后面循环体要缩进
      指令2

    (4)转向语句:goto

    (5)输出语句:return

    (6)调用过程:直接写过程名

    (7)注释: //...

伪码算法描述示例 :求最大公约数

算法:Euclid ( m , n ) //说明:使用欧几里得算法求最大公约数
输入: 两个不全为0的非负整数 m , n // 必须先说明算法的输入和输出
输出:m , n 的最大公约数

while m > 0 do
  r ← n mod m //注意循环体使用缩进
  n ← m
  m ← r
return n // 返回最大公约数n

3 算法绘图工具

一个人使用笔向在平板电脑上的 Web 浏览器中打开的 Visio 图表添加注释。