上QQ阅读APP看书,第一时间看更新
1.6.1 算法设计的4个目标
一个好的算法应该具备以下目标。
1.算法的正确性
算法的正确性是指算法至少应该包括对于输入、输出和处理无歧义性的描述,能正确反映问题的需求,且能够得到问题的正确答案。
通常算法的正确性应包括以下4个层次。
(1)算法对应的程序没有语法错误。
(2)对于几组输入数据能得到满足规格要求的结果。
(3)对于精心选择的典型的、苛刻的、带有刁难性的几组输入数据能得到满足规格要求的结果。
(4)对于一切合法的输入都能得到满足要求的结果。
对于这4层算法正确性的含义,达到第4层意义上的正确是极为困难的,所有不同输入数据的数量大得惊人,逐一验证的方法是不现实的。一般情况下,把层次3作为衡量一个程序是否正确的标准。
2.可读性
算法主要是为了人们方便阅读和交流,其次才是计算机执行。可读性好有助于人们对算法的理解,晦涩难懂的程序往往隐含错误不易被发现,难以调试和修改。
3.健壮性
当输入数据不合法时,算法也应该能做出反应或进行处理,而不会产生异常或莫名其妙的输出结果。例如,求一元二次方程根ax2+bx+c=0的算法,需要考虑多种情况。先判断b2-4ac的正负,如果为正数,则该方程有两个不同的实根;如果为负数,表明该方程无实根;如果为零,表明该方程只有一个实根;如果a=0,则该方程又变成了一元一次方程,此时若b=0,还要处理除数为零的情况。如果输入的a、b、c不是数值型,还要提示用户输入错误。
4.高效率和低存储量
效率指的是算法的执行时间。对于同一个问题如果有多个算法能够解决,执行时间短的算法效率高,执行时间长的效率低。存储量需求指算法在执行过程中需要的最大存储空间。效率与低存储量需求都与问题的规模有关,求100个人的平均分与求1000个人的平均分所花的执行时间和运行空间显然有一定差别。设计算法时应尽量选择高效率和低存储量需求的算法。