1.1.2 算法的特性
问题不同,解决的思路和采取的方法与步骤就有针对性,所以对应的算法也各不相同。但各种算法有如下共同之处:首先计算机要有操作对象,通过输入,给予计算机问题所涉及的对象;最后要能得到运行结果,即有输出;在输入与输出之间是具体的方法和步骤,这些方法和步骤必须是确定的、正确的、有限的、有效的、通用的。因而,运行于计算机的各种算法有如下特征。
(1)输入:算法从一个指定集合得到输入值,可以有0个、1个或多个值,由赋值或输入语句实现;
(2)输出:对每个输入值,算法都要从指定的集合中产生输出值,输出值就是问题的解,可以有1个或多个输出值,由输出语句实现;
(3)确定性:算法的步骤必须准确定义,不能产生歧义;
(4)正确性:对每一次输入值,算法都应产生正确的输出值;
(5)有限性:对任何输入,算法都应在有限步骤之后产生输出;
(6)有效性:算法每一步必须能够准确地执行,并在有限时间内完成;
(7)通用性:算法不只是用于特定的输入值,应该可以用于满足条件的所有问题。
例1.1 找出计算机软件专业录取的新生中高考总分的最高分。
分析:这个问题等价于求有限整数序列中最大值的算法,可采取以下步骤。
(1)将序列中第一个整数设为临时最大值(max);
(2)将序列中下一个整数与临时最大值比较,如果这个数大于临时最大值,临时最大值更新为这个整数;
(3)重复第(2)步,一直比较到序列中最后一个数时停止。此时临时最大值就是序列中的最大整数。
在此算法中,输入是软件专业所有新生的高考成绩,输出是高考最高分,算法过程从序列第一项开始,并把序列第一项设为临时最大值的初始值,接着逐项检查,如果有一项超过最大值,就把最大值更新为这一项的值,检查到序列的最后一项结束。算法每进行一步,要么是比较最大值和这项的大小,要么是更新最大值的值,所以每一步的操作都是确定的,能保证最大值是已检查过的最大整数,结果是正确的。如果序列包含 n 个整数,经过 n-1次比较就结束,所以算法步骤是有限的、有效的。这个算法可以用于求任何有限整数序列问题的最大元素,所以它是通用的。