什么是算法?

究竟什么是算法(algorithm)呢?从字面意义上理解,算法即用于计算的方法,通过这种方法可以达到预期的计算结果。
此外,在一版的教科书或者字典中也有关于算法的专业解释,例如,算法是解决实际问题的一种精确描述方法、算法是对特定问题的求解步骤的一种精确描述方法等。目前,被广泛认可的算法的专业定义是,算法是模型分析的一组可行的、确定的和有穷的规则。
其实,通俗的讲,算法可以理解为一个完整的解题步骤,由一些基本运算和规定的运算顺序组成。通过这样的解题步骤可以解决特定的问题。从计算机程序设计的角度看,算法由一系列求解问题的指令组成,能够根据规范输入,在有限的时间内获得有效的输出结果。算法代表了用系统的方法来描述解决问题的一种策略机制。
举一个例子来分析算法是如何在现实生活中发挥作用的。最典型的例子就是统筹安排,假设有3件事(事件ABC)
事件A需要耗费5分钟
事件B需要耗费5分钟,但是要等待15分钟的事件才可以得到结果
事件C需要耗费10分钟
那么应该怎样来做这三件事呢?一种方法是依次做,做完事件A再做事件B,最后做事件C。这样,总的耗时为5+(5+15)+10=35分钟,这显然是浪费时间的做法。
在实际生活中比较可取的方法是,先做事件B,在等待事件B完成的过程中做事件A和事件C。这样,等待事件B完成的15分钟正好可以完成事件A和事件C。此时,总的耗时为5+15=20分钟,效率明显提高。
在上述的例子中提到的两种方法就可以看作是两种算法。第一种算法效率低,第二种算法效率高。但都达到了做完事情的目的。从这个例子可以看出,算法也是有好坏区别的,好的算法可以提高工作的效率。算法的基本任务是针对一个具体的问题,找到一个高效的处理方法,从而获得最佳的结果。
一个典型的算法一般都可以抽象出5个特征:有穷性、确切性、输入、输出和可行性。下面结合上述例子来分析这5个特征。
有穷性:算法的指令或者步骤的执行次数是有限的,执行时间也是有限的。例如,在上面的例子中,通过短短的几步就可以完成任务,而且执行时间都是有限的。
确切性:算法的每一个指令或者步骤都必须有明确的定义或描述。例如,在上面的例子中,为了完成三件事情的任务,每一步做什么事情都有明确的规定。
输入:一个算法应该有相应的输入条件,用来刻画运算对象的初始情况。例如,在上面的例子中,有三个待完成的事件(事件ABC),这三个事件便是输入。
输出:一个算法应该有明确的结果输出。这时容易理解的,因为没有得到结果的算法毫无意义。例如,在上面的例子中,输出结果便是三件事全部做完了。
可行性:算法的执行步骤必须是可行的,且可以在有限时间内完成。例如,在上面的例子中,每一个步骤都切实可行。其实无法执行的步骤也是毫无意义的,解决不了任何实际的问题。