第一章 算法在计算中的作用

什么是是算法?为什么算法值得研究?相对于计算机中使用的其他技术来说算法的作用是什么?

算法

非形式的说,算法(algorithm)就是任何良定义的计算过程,该过程取某个值或者值的集合作为输入并产生某个值或者值的集合作为输出。这样算法就是把输入转换成输出的计算步骤的一个序列。

我们也可以把算法看成是用于求解良说明的计算问题的工具。一般来说,问题陈述说明了期望输入/输出关系。算法则描述一个特定的计算过程来实现该输入/输出关系。

例如,我们可能需要把一个数列排成递增序。实际上,这个问题经常出现,并且为引入许多标准的设计和分析工具提供了足够的理由。下面是我们关于排序问题的形式定义。

  • 输入:$n$ 个数的一个序列 $\langle a_1, a_2, \dotsm, a_n \rangle$ 。
  • 输出:输入序列的一个排列 $\langle a’_{1}, a’_{2}, \dotsm, a’_{n} \rangle$ ,满足 $a’_{1} \leq a’_{2} \leq \dotsm \leq a’_{n}$

例如,给定输入序列 $\langle 31, 41, 59, 26, 41, 58 \rangle$ ,排序算法将返回序列 $\langle 26, 31, 41, 41, 58, 59 \rangle$ 作为输出。这样的输入序列称为排序问题的一个实例(instance)。一般来说,问题实例由计算该问题所必需的(满足问题陈述中强加的各种约束的)的输入组成。

若对每个输入实例,算法都以正确的输出停机,则称该算法是正确的,并称正确的算法解决了给定的计算问题。不正确的算法对某些输入可能根本不停机,也可能以不正确的回答停机。