数据结构(Java语言描述·微课版)
上QQ阅读APP看书,第一时间看更新

1.3 算法的描述和算法分析

1.3.1 算法的描述

算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令表示一个或多个操作。一个算法具有以下5个重要的特性。

1. 有穷性

一个算法必须总是在执行有穷步(对任何合法的输入值)之后,且每一步都可在有穷时间内完成。即一个算法对于任意一组合法输入值,在执行有穷步之后一定能够结束。

2. 确定性

算法中每一条指令都必须有确切的含义,使读者在理解时不会产生二义性。同时,在任何条件下,算法都只有一条执行路径,即对于相同的输入只能得出相同的结果。

3. 可行性

算法中所描述的操作必须足够基本,且都可以通过已经实现的基本操作执行有限次来实现。

4. 输入

作为算法加工对象的量值,一个算法有0个或多个输入。有的量值需要在算法执行过程中输入,而有的算法表面上没有输入,实际上已经被嵌入算法中。

5. 输出

输出是一组同“输入”有确定对应关系的量值,是算法进行信息加工后所得到的产物,一个算法可以有一个或多个输出。

设计一个算法时,它应该满足以下4个要求。

(1)正确性

要求算法能够正确地实现预先规定的功能和满足性能要求,这是最重要也是最基本的标准。目前大多数算法是用自然语言描述需求的,它至少应包括输入、输出和加工处理等的明确无歧义的描述。设计或选择算法应当能正确地反映这种需求。

(2)可读性

算法应当易于理解,可读性强。为了达到这个要求,算法必须做到逻辑清晰、简单并且结构化。晦涩难懂的程序容易隐藏较多错误,难以调试和修改。

(3)健壮性

算法要求具有良好的容错性,能够提供异常处理,能够对输入进行检查。不经常产生异常中断或死机现象。例如,一个求矩形面积的算法,当输入的坐标集合不能构成一个矩形时,不应继续计算,而应当报告输入错误。同时,处理错误的方法是返回一个表示错误的值,而不是输出错误信息或直接异常中断。

(4)效率与低存储量要求

通常算法的效率主要指算法的执行时间。对于同一个问题,如果能用多种算法进行求解,执行时间短的算法效率高。算法存储量指的是算法执行过程中所需的存储空间。效率与低存储量要求这两者都与问题的规模有关。例如,求100个学生的平均成绩和求10000个学生的平均成绩在时间和空间的成本上必然是存在差异的。