算法的特性
一个算法,尤其是一个成熟的算法,应该具有以下五个特性:
(1)确定性:算法的每一步都有确定的含义,不会出现二义性。即在相同条件下,只有一条执行路径,相同的输入,只会是相同的输出结果。
(2)可行性:算法的每一步都是可执行的,通过执行有限次数操作来完成其功能。
(3)有穷性:一个算法必须在执行有穷步骤之后结束,且每一步都可在有穷时间内完成。这里的有穷概念不是数学意义上的,而是指在实际应用当中可以接受的、合理的时间和步骤。
(4)输入:算法具有零个或多个输入。有些输入量需要在算法执行过程中输入;有的算法表面上没有输入,但实际上输入量已经被嵌入在算法之中。
(5)输出:算法至少具有一个或多个输出。“输出”是一组与“输入”有对应关系的量值,是算法进行信息加工后得到的结果,而这种对应关系即为算法的功能。
一个“好”的算法需要具备这几个条件。那么在设计算法时,怎样才能设计出“好”的算法呢?这就需要在设计算法时要有明确的目标。想要设计出一个“好”的算法,需要从以下四个方面来考虑:
(1)正确性:算法能够正确地执行,实现预先规定的功能。这是算法最重要也是最基本的要求,它包括程序没有语法错误;对于合法的输入能够产生满足要求的输出结果;甚至对于非法的测试数据都能有满足要求的输出结果。一个“好”的算法必定经得住千锤百炼的测试。
(2)可读性:算法应该易于理解,也就是可读性好,这就要求算法的逻辑必须是清晰、简单和结构化的。可读性好有助于程序员理解算法,晦涩难懂的算法往往会隐藏错误且不易被发现,难于调试和修改。
(3)健壮性:要求算法具有高容错性,即提供异常处理,能够对不合理的数据进行检查,不经常出异常中断或死机现象。
(4)高效率与低存储:算法的效率通常指的是算法的执行时间,对于同一个问题的多种算法,执行时间短的其效率就高。存储量指的是算法在执行过程中所需的最大存储空间,包括所用到的内存及外存。设计算法时应考虑到执行效率和存储需求,设计出一个“性价比”较高的算法。
要设计出一个“好”的算法,就要综合考虑其正确性、可读性、健壮性,还要考虑其执行效率和存储量需求。