所谓算法是指解决方案的准确而完整的描述。
对于一个问题,如果可以通过一个计算机程序,在有限的存储空间内运行有限的时间,而得到正确的结果,则称这个问题是算法可解的。但算法不等于程序,也不等于计算方法。当然,程序也可以作为算法的一种描述,但程序通常还需要考虑很多与方法和分析无关的细节问题,这是因为在编写程序时要受到计算机系统运行环境的限制。通常,程序的编制不可能优于算法的设计。
1.算法的基本特征
(1)可行性(Effectiveness)
针对实际问题设计算法,人们总希望能够得到满意的结果。但一个算法又总是在某个特定的计算工具上执行的,因此,算法在执行的过程中往往要受到计算工具的限制,使执行结果产生偏差。例:若某计算工具具有7位有效数字,则设:A=10^12,B=1,C=-10^12,则A+B+C=0,A+C+B=1。所以在设计一个算法的时候必须考虑他的可行性。
(2)确定性(Definiteness)
算法的确定性,是指算法中的每一个步骤必须是有明确定义的,不允许有模凌两可的解释,也不允许有多义性。在解决实际问题时,可能会出现这样的情况:针对某种特殊问题,数学公式是正确的,但按此数学公式设计的计算过程可能会使计算机系统无所适从。这是因为根据数学公式设计的计算过程只考虑了正常使用的情况,而当出现异常情况时,次计算过程就不能适应了。
(3)有穷性(Finiteness)
算法的有穷性,是指算法必须能在有限的时间内做完。算法的有穷性还应包括合理的执行时间的含义。若一个算法需要执行千万年,显然失去了使用的价值。
(4)拥有足够的情报
一个算法执行的结果总是与输入的初始数据有关,不同的输入将会有不同的结果输出。但输入不够或输入错误时,算法本身也就无法执行或导致执行有错。
综上所述,所谓算法,是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。
2.算法的基本要素
一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是算法的控制结构。
(1)算法中对数据的运算和操作
通常,计算机可执行的基本操作是以指令的形式描述的。在一般的计算机系统中,基本的运算和操作有以下四类:
1.算术运算:主要包括加、减、乘、除等运算。
2.逻辑运算:主要包括“与”、“或”、“非”等运算。
3.关系运算:主要包括“大于”、“小于”、“等于”、“不等于”等运算。
4.数据传输:主要包括赋值、输入、输出等操作。
(2)算法的控制结构
算法中各操作之间的执行顺序称为算法的控制结构。
描述算法的工具通常有传统流程图、N-S结构化流程图、算法描述语言等。一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成。
3.算法设计基本方法
计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。计算机算法不同与人工处理方法。
(1)列举法
基本思想:根据提出的问题,列举所有的可能,并用问题中给定的条件检验哪些是需要的,哪些是不需要的。
(2)归纳法
基本思想:通过列举少量的特殊情况,经过分析,最后找出一般的关系。
(3)递推
基本思想:所谓递推,是指从已知的初始条件出发,逐次推出所要求的各中间结果和最后结果。
(4)递归
基本思想:将问题逐层分解,最后归结为一些最简单的问题。这种将问题逐层分解的过程,实际上并没有对问题进行求解,而只是当解决了最后那些最简单的问题后,再沿着原来分解的逆过程逐步进行综合,这就是递归思想。
递归分为直接递归和间接递归两种。如果一个算法P显式地调用自己则称为直接递归。如果算法P调用另一个算法Q,而算法Q 又调用算法P,则称为间接递归。
(5)减半递推技术
所谓“减半”,是指将问题的规模减半,而问题的性质不变;所谓“递推”,是指重复“减半”的过程。例如用二分法求函数f(x)在某区间[a,b]上的实根,这个二分法就是减半递推技术的一种表现。
(6)回溯法
有些实际问题很难归纳出一组简单的递推公式或直观的求解步骤,并且也不能进行无限的列举。对于这类问题,一种有效的方法是“试”。通过对问题的分析,找出一个解决问题的线索,然后沿着这个线索逐步试探,对于每一步试探,若试探成功,就得到问题的解,若试探失败,就逐步回退,换别的路线再进行试探。这种方法称为回朔法。
以上资料均出自:《全国计算机等级考试二级教程——公共基础知识(2013年版)》,高等教育出版社,2013.5,pag:1-5