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