算法描述
算法描述是指对设计出的算法,用一种方式进行详细的描述,以便与人交流。描述可以使用自然语言、伪代码,也可使用程序流程图,但描述的结果必须满足算法的五个特征。
使用自然语言描述算法显然很有吸引力,但是自然语言固有的不严密性使得要简单清晰的描述算法变得很困难。因此,使用伪代码来描述算法是一个很好的选择。
算法的特征
-
输入:一个算法必须有零个或以上输入量。
-
输出:一个算法应有一个或以上输出量,输出量是算法计算的结果。
-
明确性:算法的描述必须无歧义,以保证算法的实际执行结果是精确地符合要求或期望,通常要求实际运行结果是确定的。
-
有限性:依据图灵的定义,一个算法是能够被任何图灵完备系统模拟的一串运算,而图灵机器只有有限个状态、有限个输入符号和有限个转移函数(指令)。而一些定义更规定算法必须在有限个步骤内完成任务。
-
有效性:又称可行性。能够实现,算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现。
伪代码
伪代码是自然语言和类编程语言组成的混合结构。它比自然语言更精确,描述算法很简洁;同时也可以很容易转换成计算机程序。虽然如此,但计算机科学家们从来就没有对伪代码的形式达成共识,不同作者的教材会设计他们自己的“方言”(伪代码)。幸运的是,这些伪代码都十分相似,任何熟悉一门现代变成语言的人都完全能够理解。
使用伪代码描述算法可以让程序员很容易将算法转换成程序,同时还可以避开不同程序语言的语法差别,如Pascal语言使用“:=”作为赋值,使用“=”作为比较;又如C/C++的赋值使用“=”,而判断相等的比较则是用“==”。
常用的微带关键词含义如下表所示:
伪代码 | 含义 | C/C++语言 |
---|---|---|
缩进 | 程序块 | {} |
/ / | 行注释 | / / |
← | 赋值 | = |
= | 比较运算——等于 | == |
≠ | 比较运算——不等于 | != |
≤ | 比较运算——小于或等于 | < = |
≥ | 比较运算——大于或等于 | >= |
for i←1 to n do | For循环 | for(i=1;i⇐n;i++){} |
for i←n downto 1 do | For循环 | for(i=n;i>=1;i–){} |
while i<n do | Wihle循环 | while(i<n){} |
do while i<n | Do-While循环 | do {} while(i<n) |
repeat until i<n | Repeat循环 | |
if i<n else | If-Else语句 | if(i<n){} else {} |
return | 函数返回值 | return |
A[0..n-1] | 数组定义 | int A[n-1] |
A[i] | 引用数组 | A[i] |
SubFun() | 函数调用 | SubFun() |
流程图
在计算机应用早期,描述算的主要工具是流程图。流程图使用一系列相连的几何图形来描述算法,几何图形内部包含对算法步骤的描述。实践证明,除了一些非常简单的算法外,这种表示方法使用起来非常不方便。