算法其实是一个很抽象的概念,往往需要依托于具体的实现方法才能体现其价值,如在计算机编程中的算法、数值计算中的算法等。本书重点讲解的便是算法在计算机编程中的应用。算法具有抽象性,容易混淆,这里有必要说明一些基本的概念。
1.算法与公式的关系
根据前面所谈到的算法,读者很容易联想到数学中的公式。公式用于解决某类问题,有特定的输入和结果输出,能在有限时间内完成,并且公式都是完全可以操作计算的。公式确实提供了一种算法,但是算法绝不完全是公式。
公式是一种高度精简的计算方法,可以认为就是一种算法,他是人类智慧的结晶。而算法并不一定是公式,算法的形式可以比公式更复杂,解决的问题更加广泛。
2.算法与程序的关系
正如前面所述,算法依托于具体的实现方式。虽然一提到算法,就使人联想到计算机程序设计,但短发并且仅用于此。例如,在传统的笔算中,通过纸和笔按照一定的步骤完成的计算也是算法的应用;在速记中,人们通过特殊的方法来达到快速牢固记忆的目的,这也是一种算法的应用。
在计算机程序设计中,算法的体现更广泛,几乎每个程序都需要用到算法,只不过有些算法比较简单,有些算法比较复杂而已。
算法和程序设计语言是不同的,目前比较流程的程序设计语言,包括Java,C#,C++,PHP等。程序设计语言是算法实现的一种形式,也是一种工具,读者往往需要首先熟悉程序设计语言的语法格式,然后才能使用这种程序语言编写合适的算法实现程序。学习一门程序设计语言是比较容易的,难的是如何正确合理的运用算法来编写求解问题。
3.算法与数据结构的关系
数据结构是数据的组织形式,可以用来表征特定的对象数据。在计算机程序设计中,操作的对象是各式各样的数据,这些数据往往具有不同的数据结构,如数组、结构体、联合、指针和链表等。因为不同的数据结构所采用的处理方法不同,计算的复杂程度也不同,因此算法往往依赖于某种数据结构,也就是说,数据结构是算法实现的基础。
计算机科学家尼克劳斯·沃斯曾提出一个著名的公式:数据结构+算法=程序,后来,他为此著有《数据结构+算法=程序》一书。从中可以看到算法和数据结构的关系。