广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。
一个程序应包含两方面的内容:
(1)对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构(data structure);
(2)对操作的描述。即操作步骤,也就是算法(algorithm)。
数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。
著名计算机科学家沃思提出一个公式:数据结构 + 算法 = 程序
计算机算法可以分为两个大类:数值运算算法和非数值运算算法。
(1)数值运算目的是求数值解,例如求方程的根、求一个函数的定积分等都属于数值运算范围。
(2)非数值运算包括的面十分广泛,最常见的是用于事务管理领域,例如图书检索、人事管理、行车调度管理等。目前,计算机在非数值运算方面的应用远远超过了在数值运算方面的应用。
由于数值运算有现成的模型,可以运用数值分析方法,因此对数值运算的算法的研究比较深入,算法比较成熟。
算法特性
(1)有穷性。
一个算法应包含有限的操作步骤,而不能是无限的。事实上,“有穷性”往往指“在合理的范围之内”。如果让计算机执行一个历时1000年才结束的算法,这虽然是有穷的,但超过了合理的限度,人们也不把它视为有效算法。究竟什么算“合理限度”,并无严格标准,由人们的常识和需要而定。
(2)确定性。
算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。例如,有一个健身操的动作要领,其中有一个动作:“ 手举过头顶”,这个步骤就是不确定的,含糊的。是双手都举过头?还是左手?或右手?举过头顶多少厘米?不同的人可以有不同的理解。算法中的每一个步骤应当不致被解释成不同的含义,而应是十分明确无误的。也就是说,算法的含义应当是惟一的,而不应当产生“歧义性”。所谓“歧义性”是指可以被理解为两种(或多种)的可能含义。
(3)有零个或多个输入。
所谓输入是指在执行算法时需要从外界取得必要的信息。例如,求两个整数m和n的最大公约数,则需要输入m和n的值。一个算法也可以没有输入,例如,在执行算法时不需要输人任何信息,就能求出5!。
(4)有一个或多个输出。
算法的目的是为了求解,“解”就是输出。如求素数的算法,最后输出的n“是素数”或“不是素数”就是输出的信息。但算法的输出不一定就是计算机的打印输出,一个算法得到的结果就是算法的输出。没有输出的算法是没有意义的。
(5)有效性。
算法中的每一个步骤都应当能有效地执行,并得到确定的结果。例如,若b=0,则执行a/b是不能有效执行的。
算法表示
(1)用自然语言表示一个算法
(2)用流程图表示一个算法
(3)用N-S流程图表示算法
(4)用伪代码表示算法
(5)用计算机语言表示算法
3种基本结构
(1)顺序结构
(2)选择结构
(3)循环结构
① 当型循环结构:先判断,后执行(while ... 、for ...)
② 直到型循环:先执行,后判断(do ... while ....)