第0章 预备知识
0.1 算法与数据结构
0.1.1 算法
众所周知,算法是求解一个问题类的无二义性的有穷过程。这里的过程是指求解问题执行的一步一步动作的集合,每一步动作只需要有限的存储单元和有限的操作时间。另外,如果详细说明一台典型的计算机以及与这种计算机通信的语言,那么凡用这种语言编写的、可以在给定的计算机上执行的过程便称为算法。随机存取机器(RAM)、图灵机等可以作为典型的计算机,拟ALGOL语言作为描述算法而非执行的语言。应该指出,算法不等于程序,因此描述算法的方式将是多种形式的,如在拟ALGOL语言的描述中可以使用数学记号和自然语言。为了把算法转换成上机程序,还需要进行编程工作。
算法的复杂性包括算法的时间复杂性和算法的空间复杂性。为了说明复杂性的概念,先介绍问题规模的概念。用一个与问题相关的整数量来衡量问题的大小,该整数量表示输入数据量的尺度,称为问题的规模。比如,行列式的规模可以用其阶数n来表示,图问题的规模可以用其边数或顶点数来表示,等等。
利用某算法处理一个问题规模为n的输入所需要的时间,称为该算法的时间复杂性。它显然是n的函数,记为T(n)。
类似地,可以定义算法的空间复杂性S(n)。
下面主要讨论算法的时间复杂性。由于一般不需要知道精确的时间耗费,只要知道时间耗费的增长率大体在什么范围内即可,因此我们引入算法复杂性阶的概念。
展开